diff --git a/app/components/editable_champ/communes_component/communes_component.en.yml b/app/components/editable_champ/communes_component/communes_component.en.yml
index 94928ea15..7bd07cc72 100644
--- a/app/components/editable_champ/communes_component/communes_component.en.yml
+++ b/app/components/editable_champ/communes_component/communes_component.en.yml
@@ -1,4 +1,5 @@
---
en:
- postal_code: Enter the postal code then select the municipality from the list
+ postal_code: "Enter the postal code"
+ commune: "Select the municipality from the list"
not_found: No municipality found for postal code %{postal_code}. Please check that you haven't made any mistakes.
diff --git a/app/components/editable_champ/communes_component/communes_component.fr.yml b/app/components/editable_champ/communes_component/communes_component.fr.yml
index 77b096d10..160339a51 100644
--- a/app/components/editable_champ/communes_component/communes_component.fr.yml
+++ b/app/components/editable_champ/communes_component/communes_component.fr.yml
@@ -1,4 +1,5 @@
---
fr:
- postal_code: Renseignez le code postal puis sélectionnez la commune dans la liste
+ postal_code: "Renseignez le code postal"
+ commune: "Sélectionnez la commune dans la liste"
not_found: Aucune commune trouvée pour le code postal %{postal_code}. Verifiez que vous n'avez pas fait d’erreur.
diff --git a/app/components/editable_champ/communes_component/communes_component.html.haml b/app/components/editable_champ/communes_component/communes_component.html.haml
index 849a5e1c8..fa297cf12 100644
--- a/app/components/editable_champ/communes_component/communes_component.html.haml
+++ b/app/components/editable_champ/communes_component/communes_component.html.haml
@@ -1,13 +1,26 @@
-%label.notice{ for: code_postal_input_id }= t('.postal_code')
-= @form.text_field :code_postal, required: @champ.required?, id: code_postal_input_id, class: "width-33-desktop width-100-mobile small-margin"
-- if @champ.code_postal?
+.fr-fieldset__element.fr-mb-0
+ .fr-input-group
+ = @form.label :code_postal, t('.postal_code').html_safe, class: 'fr-label', for: code_postal_input_id
+ = @form.text_field :code_postal, required: @champ.required?, id: code_postal_input_id, class: "width-33-desktop width-100-mobile small-margin fr-input"
+ - if @champ.code_postal?
+ - if commune_options.empty?
+ .fr-error-text.mb-4= t('.not_found', postal_code: @champ.code_postal)
+
+.fr-fieldset__element.fr-mb-0
- if commune_options.empty?
- .fr-error-text.mb-4= t('.not_found', postal_code: @champ.code_postal)
+ - #noop
- elsif commune_options.size <= 3
- %fieldset.radios
+ %fieldset.fr-fieldset
+ .fr-fieldset__legend--regular.fr-fieldset__legend= t('.commune').html_safe
+
- commune_options.each.with_index do |(option, value), index|
- %label
- = @form.radio_button :value, value, checked: @champ.selected == value, id: index == 0 ? @champ.input_id : nil
- = option
+ .fr-fieldset__element
+ .fr-radio-group
+ = @form.radio_button :value, value, checked: @champ.selected == value, id: index == 0 ? @champ.input_id : nil
+ = @form.label :value, option, for: option, class: 'fr-label'
+ / %label
+ / = @form.radio_button :value, value, checked: @champ.selected == value, id: index == 0 ? @champ.input_id : nil
+ / = option
- else
- = @form.select :value, commune_options, commune_select_options, required: @champ.required?, id: @champ.input_id, aria: { describedby: @champ.describedby_id }, class: "width-33-desktop width-100-mobile"
+ = @form.label :value, t('.commune').html_safe, for: @champ.input_id, class: 'fr-label'
+ = @form.select :value, commune_options, commune_select_options, required: @champ.required?, id: @champ.input_id, aria: { describedby: @champ.describedby_id }, class: "width-33-desktop width-100-mobile fr-select"
diff --git a/app/models/champs/commune_champ.rb b/app/models/champs/commune_champ.rb
index 9b9ca0335..6631735f0 100644
--- a/app/models/champs/commune_champ.rb
+++ b/app/models/champs/commune_champ.rb
@@ -88,6 +88,18 @@ class Champs::CommuneChamp < Champs::TextChamp
end
end
+ def html_label?
+ false
+ end
+
+ def legend_label?
+ true
+ end
+
+ def dsfr_champ_container
+ :fieldset
+ end
+
private
def safe_to_s