Merge pull request #9375 from colinux/fix-legacy-forms-layout

Améliore l'affichage de plusieurs petits formulaires résiduels
This commit is contained in:
Paul Chavard 2023-08-01 14:21:50 +00:00 committed by GitHub
commit 9c8b015b45
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
14 changed files with 92 additions and 126 deletions

View file

@ -1,34 +1,6 @@
@import "constants";
#invites-form {
padding: $default-padding;
text-align: left;
form {
display: flex;
margin-top: $default-padding;
}
h4 {
font-weight: bold;
margin-bottom: $default-spacer;
}
p {
margin-bottom: $default-spacer;
}
ul {
list-style-position: inside;
list-style-type: disc;
margin-bottom: $default-padding;
}
input[type=email] {
margin-bottom: $default-spacer;
}
.button {
margin-left: $default-spacer;
@media (min-width: 48em) {
min-width: 400px;
}
}

View file

@ -1,10 +1,13 @@
module Dsfr
module InputErrorable
extend ActiveSupport::Concern
included do
delegate :object, to: :@form
delegate :errors, to: :object
renders_one :hint
private
# lookup for edge case from `form.rich_text_area`
@ -89,6 +92,10 @@ module Dsfr
end
def hint
get_slot(:hint).presence || default_hint
end
def default_hint
I18n.t("activerecord.attributes.#{object.class.name.underscore}.hints.#{@attribute}")
end
@ -101,6 +108,8 @@ module Dsfr
end
def hint?
return true if get_slot(:hint).present?
I18n.exists?("activerecord.attributes.#{object.class.name.underscore}.hints.#{@attribute}")
end
end

View file

@ -1,11 +1,10 @@
= form_tag(search_admin_procedures_path, data: { turbo: true }, method: :post, class: 'form') do
= label_tag :query, 'Rechercher une procédure'
= form_tag(search_admin_procedures_path, data: { turbo: true }, method: :post) do
.fr-input-group
= label_tag :query, class: "fr-label" do
Rechercher une démarche
%span.fr-hint-text Saisissez au moins 3 lettres
.notice
%p Entrez au minimum 3 lettres
= text_field_tag :query, params[:query], required: true, placeholder: 'politique de la ville', minlength: "3"
= text_field_tag :query, params[:query], required: true, placeholder: 'politique de la ville', minlength: "3", class: "fr-input"
= submit_tag 'Rechercher', class: 'fr-btn'

View file

@ -1,9 +1,13 @@
= form_for procedure.administrateurs.new(user: User.new),
url: { controller: 'procedure_administrateurs' },
html: { class: 'form', id: "new_administrateur" },
html: { id: "new_administrateur" },
data: { turbo: true, turbo_force: :server } do |f|
= f.label :email do
Ajouter un administrateur
%p.notice Renseignez lemail dun administrateur déjà enregistré sur #{APPLICATION_NAME} pour lui permettre de modifier « #{procedure.libelle} ».
= f.email_field :email, placeholder: 'marie.dupont@exemple.fr', autofocus: true, required: true, disabled: disabled_as_super_admin
= f.submit 'Ajouter comme administrateur', class: 'button primary send', disabled: disabled_as_super_admin
.fr-input-group
= f.label :email, class: "fr-label" do
Ajouter un administrateur
%span.fr-hint-text
= "Renseignez lemail dun administrateur déjà enregistré sur #{APPLICATION_NAME} pour lui permettre de modifier « #{procedure.libelle} ». Exemple : marie.dupont@exemple.fr"
= f.email_field :email, required: true, class: "fr-input", autofocus: true, disabled: disabled_as_super_admin
= f.submit 'Ajouter comme administrateur', class: 'fr-btn', disabled: disabled_as_super_admin

View file

@ -13,7 +13,6 @@
%th= 'État'
%tbody#administrateurs
= render(Procedure::ProcedureAdministrateurs::AdministrateurComponent.with_collection(@procedure.administrateurs.order('users.email'), procedure: @procedure))
%tfoot
%tr
%th{ colspan: 4 }
= render 'add_admin_form', procedure: @procedure, disabled_as_super_admin: administrateur_as_manager?
.fr-mt-4w
= render 'add_admin_form', procedure: @procedure, disabled_as_super_admin: administrateur_as_manager?

View file

@ -11,5 +11,6 @@
%br
Une fois en possession du code généré sur le site MonAvis, vous pouvez le coller dans le champ ci-dessous :
= f.label :monavis_embed, "Mon avis"
= f.text_area :monavis_embed, rows: '6', placeholder: '<a href="https://monavis.numerique.gouv.fr/Demarches/123456?&view-mode=formulaire-avis&nd_mode=en-ligne-enti%C3%A8rement&nd_source=button&key=cd4a872d4"><img src="https://monavis.numerique.gouv.fr/monavis-static/bouton-bleu.png" alt="Je donne mon avis" title="Je donne mon avis sur cette démarche" /></a>', class: 'form-control'
.fr-input-group
= f.label :monavis_embed, "Mon avis", class: "fr-label"
= f.text_area :monavis_embed, rows: '6', placeholder: '<a href="https://monavis.numerique.gouv.fr/Demarches/123456?&view-mode=formulaire-avis&nd_mode=en-ligne-enti%C3%A8rement&nd_source=button&key=cd4a872d4"><img src="https://monavis.numerique.gouv.fr/monavis-static/bouton-bleu.png" alt="Je donne mon avis" title="Je donne mon avis sur cette démarche" /></a>', class: 'fr-input'

View file

@ -9,7 +9,7 @@
.container
%h1
= form_with model: @procedure, url: url_for({ controller: 'administrateurs/procedures', action: :update_jeton }), html: { class: 'form' } do |f|
= form_with model: @procedure, url: url_for({ controller: 'administrateurs/procedures', action: :update_jeton }) do |f|
%p.explication
Démarches Simplifiées utilise
= link_to 'API Entreprise', "https://entreprise.api.gouv.fr/"
@ -18,7 +18,7 @@
= link_to 'API Entreprise', "https://api.gouv.fr/les-api/api-entreprise/demande-acces"
propre à votre démarche.
= f.label :api_entreprise_token, "Jeton"
= f.password_field :api_entreprise_token, value: @procedure.read_attribute(:api_entreprise_token), class: 'form-control'
.text-right
= f.button 'Enregistrer', class: 'button primary send'
.fr-input-group
= f.label :api_entreprise_token, "Jeton", class: 'fr-label'
= f.password_field :api_entreprise_token, value: @procedure.read_attribute(:api_entreprise_token), class: 'fr-input'
= f.button 'Enregistrer', class: 'fr-btn'

View file

@ -11,5 +11,4 @@
%h1
= form_for @procedure, url: url_for({ controller: 'administrateurs/procedures', action: :update_monavis }), html: { class: 'form', multipart: true } do |f|
= render partial: 'monavis', locals: { f: f }
.text-right
= f.button 'Enregistrer', class: 'button primary send'
= f.button 'Enregistrer', class: 'fr-btn'

View file

@ -1,35 +1,19 @@
= form_with model: [ :admin, service], local: true, html: { class: 'form' } do |f|
= form_with model: [ :admin, service], local: true do |f|
= f.label :nom do
Nom du service
%span.mandatory *
= render Dsfr::InputComponent.new(form: f, attribute: :nom, input_type: :text_field)
%p.notice Indiquez le nom et la direction rattachée séparé par une virgule
= render Dsfr::InputComponent.new(form: f, attribute: :organisme, input_type: :text_field)
= f.text_field :nom, placeholder: 'service jeunesse et prévention, direction des affaires maritimes', required: true
.fr-input-group
= f.label :type_organisme, class: "fr-label" do
Type dorganisme
= f.label :organisme do
Organisme/s
%span.mandatory *
%p.notice Indiquez les organismes depuis léchelon territorial jusquau ministère séparés par une virgule
= f.text_field :organisme, placeholder: "mairie de Mours, préfecture de l'Oise, ministère de la Culture", required: true
= f.select :type_organisme, Service.type_organismes.keys.map { |key| [ I18n.t("type_organisme.#{key}"), key] }, {}, class: 'fr-select'
= f.label :type_organisme do
Type dorganisme
%span.mandatory *
= f.select :type_organisme, Service.type_organismes.keys.map { |key| [ I18n.t("type_organisme.#{key}"), key] }, class: 'width-33-desktop width-100-mobile'
= f.label :siret do
Numéro SIRET
%span.mandatory *
%p.notice
Veuillez saisir le numéro de SIRET de lorganisme dont ce service dépend.
%br
= link_to "➡ Rechercher le numéro SIRET sur « annuaire-entreprises.data.gouv.fr »", annuaire_link, target: "_blank"
= f.text_field :siret, placeholder: "14 chiffres", required: true
= render Dsfr::InputComponent.new(form: f, attribute: :siret, input_type: :text_field, opts: { placeholder: "14 chiffres, sans espace" }) do |c|
- c.with_hint do
= "Indiquez le numéro de SIRET de lorganisme dont ce service dépend. Rechercher le SIRET sur "
= link_to("annuaire-entreprises.data.gouv.fr", annuaire_link, **external_link_attributes)
= render Dsfr::CalloutComponent.new(title: "Informations de contact") do |c|
- c.body do
@ -42,31 +26,10 @@
%br
Ces informations de contact seront visibles par les utilisateurs de la démarche, affichées dans le menu « Aide », ainsi quen pied de page lors du dépôt dun dossier. En cas dinformations invalides, #{APPLICATION_NAME} se réserve le droit de suspendre la publication de la démarche.
= f.label :email do
Adresse email
%span.mandatory *
%p.notice
Indiquez une adresse Email valide qui permettra de recevoir et de répondre aux questions des usagers.
= f.email_field :email, placeholder: 'contact@mon-service.fr', required: true, class: 'width-33-desktop width-100-mobile'
= f.label :telephone do
Numéro de téléphone
%span.mandatory *
%p.notice Indiquez le numéro de téléphone du service valide le plus à même de fournir des réponses pertinentes à vos usagers
= f.telephone_field :telephone, placeholder: '04 12 24 42 37', required: true, class: 'width-33-desktop width-100-mobile'
= f.label :horaires do
Horaires
%span.mandatory *
%p.notice Indiquez les jours ouvrables et les horaires où les usagers peuvent vous joindre
= f.text_area :horaires, placeholder: "Du lundi au vendredi de 9 h 30 à 17 h 30. Le samedi de 9 h 30 à 12 h.", required: true, class: 'width-66-desktop width-100-mobile'
= f.label :adresse do
Adresse postale
%span.mandatory *
= f.text_area :adresse, placeholder: "20 avenue de Ségur, 75007 Paris", required: true, class: 'width-66-desktop width-100-mobile'
= render Dsfr::InputComponent.new(form: f, attribute: :email, input_type: :email_field)
= render Dsfr::InputComponent.new(form: f, attribute: :telephone, input_type: :telephone_field)
= render Dsfr::InputComponent.new(form: f, attribute: :horaires, input_type: :text_area)
= render Dsfr::InputComponent.new(form: f, attribute: :adresse, input_type: :text_area)
- if procedure_id.present?
= hidden_field_tag :procedure_id, procedure_id

View file

@ -1,13 +1,13 @@
#invites-form
#invites-form.fr-p-2w
- if invites.present?
#invite-list{ morphing ? { tabindex: "-1" } : {} }
%h4= t('views.invites.form.invite_to_participate')
%h4.fr-h6= t('views.invites.form.invite_to_participate')
%ul
- invites.each do |invite|
%li
= invite.email
%small{ 'data-turbo': 'true' }
= link_to t('views.invites.form.withdraw_permission'), invite_path(invite), data: { turbo_method: :delete, turbo_confirm: t('views.invites.form.want_to_withdraw_permission') }
= link_to t('views.invites.form.withdraw_permission'), invite_path(invite), data: { turbo_method: :delete, turbo_confirm: t('views.invites.form.want_to_withdraw_permission') }, class: "fr-btn fr-btn--sm fr-btn--tertiary-no-outline"
%p= t('views.invites.form.edit_dossier')
- if dossier.brouillon?
@ -17,15 +17,15 @@
%p= t('views.invites.form.invite_to_edit_line1')
%p= t('views.invites.form.invite_to_edit_line2')
= form_tag dossier_invites_path(dossier), data: { turbo: true, turbo_force: :server }, method: :post, class: 'form' do
.row
.col
%span
= label_tag :invite_email, t('views.invites.form.email')
= email_field_tag :invite_email, '', class: 'small', placeholder: t('views.invites.form.email'), required: true
.col
%span
= label_tag :invite_message, t('views.invites.form.invite_message')
= text_area_tag :invite_message, '', class: 'small', placeholder: t('views.invites.form.invite_message')
.col
= submit_tag t('views.invites.form.send_invitation'), class: 'fr-btn fr-btn--secondary'
= form_tag dossier_invites_path(dossier), data: { turbo: true, turbo_force: :server }, method: :post do
.fr-input-group
= label_tag :invite_email, class: "fr-label" do
= t('views.invites.form.email')
%span.fr-hint-text= t('views.invites.form.email_hint')
= email_field_tag :invite_email, '', required: true, class: "fr-input"
.fr-input-group
= label_tag :invite_message, t('views.invites.form.invite_message'), class: "fr-label"
= text_area_tag :invite_message, '', class: "fr-input"
= submit_tag t('views.invites.form.send_invitation'), class: 'fr-btn fr-btn--secondary'

View file

@ -34,4 +34,4 @@
= f.label :birthdate
= f.date_field :birthdate, value: @dossier.individual.birthdate, placeholder: 'format : AAAA-MM-JJ', required: true, class: "small"
= f.submit t('views.users.dossiers.identite.continue'), class: "fr-btn fr-btn--lg"
= f.submit t('views.users.dossiers.identite.continue'), class: "fr-btn fr-btn--lg fr-mt-4w"

View file

@ -39,8 +39,8 @@
application_name: APPLICATION_NAME,
legit_admin_domains: LEGIT_ADMIN_DOMAINS.join(', '))
= form_for current_user, url: update_email_path, method: :patch, html: { class: 'form' } do |f|
= f.email_field :email, value: nil, placeholder: t('.new_email_address'), required: true
= form_for current_user, url: update_email_path, method: :patch do |f|
= render Dsfr::InputComponent.new(form: f, attribute: :email, input_type: :email_field, opts: { value: nil, placeholder: t('.new_email_address') })
= f.submit t('.change_address'), class: 'fr-btn fr-btn--secondary'
- if !instructeur_signed_in?

View file

@ -309,6 +309,7 @@ fr:
invite_to_edit_line1: Vous pouvez inviter quelquun à remplir ce dossier avec vous.
invite_to_edit_line2: Cette personne aura le droit de modifier votre dossier.
email: Adresse mail
email_hint: "Exemple : camilya.martin@exemple.fr"
invite_message: Ajouter un message à la personne invitée (optionnel)
send_invitation: Envoyer une invitation
invite_to_participate: "Personnes invitées à participer à ce dossier"

View file

@ -9,6 +9,25 @@ fr:
adresse: 'Adresse postale'
email: 'Email de contact'
telephone: 'Téléphone'
nom: Nom du service
organisme: Organisme(s)
hints:
nom: |
Indiquez le nom et la direction rattachée, séparés par une virgule.
Exemple : service jeunesse et prévention, direction des affaires maritimes
organisme: |
Indiquez les organismes depuis léchelon territorial jusquau ministère séparés par une virgule.
Exemple : mairie de Mours, préfecture de l'Oise, ministère de la Culture
email: |
Indiquez une adresse email valide qui permettra de recevoir et de répondre aux questions des usagers.
Exemple : contact@mairie-de-mours.fr
telephone: "Indiquez le numéro de téléphone du service valide le plus à même de fournir des réponses pertinentes à vos usagers. Exemple : 01 23 45 67 89"
horaires: |
Indiquez les jours ouvrables et les horaires où les usagers peuvent vous joindre.
Exemple : Du lundi au vendredi de 9h30 à 17h30, le samedi de 9h30 à 12h.
adresse: |
Indiquez ladresse à laquelle un usager peut vous contacter, par exemple sil nest pas en capacité de compléter son formulaire en ligne.
errors:
models:
service: