i18n: fix enum values for Dossier.state

According to Rails i18n guide, enum values should be localized
as `<model>/<enum>`, not as sub-values to the attribute.

This fixes an exception in administrate when displaying a Dossier
in the Manager.

Note: we need to change the way GraphQL attributes are generated, because
`AASM::Core::State#display_name` doesn’t honor the `model/attribute.value`
convention (and instead tries to localize as `model.attribute/value`).
So instead we lookup the localized name using ActiveRecord.
This commit is contained in:
Pierre de La Morinerie 2021-05-06 12:27:34 +02:00
parent fb75f9d133
commit b8f71bd52c
4 changed files with 14 additions and 18 deletions

View file

@ -1088,7 +1088,7 @@ enum DossierState {
refuse
"""
Sans suite
Classé sans suite
"""
sans_suite
}

View file

@ -2,7 +2,7 @@ module Types
class DossierType < Types::BaseObject
class DossierState < Types::BaseEnum
Dossier.aasm.states.reject { |state| state.name == :brouillon }.each do |state|
value(state.name.to_s, state.display_name, value: state.name.to_s)
value(state.name.to_s, Dossier.human_attribute_name("state.#{state.name}"), value: state.name.to_s)
end
end

View file

@ -51,7 +51,7 @@ module DossierHelper
def dossier_display_state(dossier_or_state, lower: false)
state = dossier_or_state.is_a?(Dossier) ? dossier_or_state.state : dossier_or_state
display_state = I18n.t(state, scope: [:activerecord, :attributes, :dossier, :state])
display_state = Dossier.human_attribute_name("state.#{state}")
lower ? display_state.downcase : display_state
end