From 57f698853f7a43586e0ec125ffef1e25b4af455c Mon Sep 17 00:00:00 2001 From: simon lehericey Date: Mon, 15 Jul 2024 23:28:36 +0200 Subject: [PATCH] some layouts --- app/helpers/application_helper.rb | 2 + .../export_templates/_export_item.html.haml | 26 +++++ .../export_templates/_form.html.haml | 108 ++++++++---------- .../export_templates/_preview.html.haml | 46 +++++--- .../export_templates/edit.html.haml | 2 +- .../export_templates/new.html.haml | 2 +- .../instructeurs/procedures/exports.html.haml | 4 +- 7 files changed, 113 insertions(+), 77 deletions(-) create mode 100644 app/views/instructeurs/export_templates/_export_item.html.haml diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 856cc923e..177d5196e 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -150,4 +150,6 @@ module ApplicationHelper .map { |word| word[0].upcase } .join end + + def asterisk = render(EditableChamp::AsteriskMandatoryComponent.new) end diff --git a/app/views/instructeurs/export_templates/_export_item.html.haml b/app/views/instructeurs/export_templates/_export_item.html.haml new file mode 100644 index 000000000..6ab854adf --- /dev/null +++ b/app/views/instructeurs/export_templates/_export_item.html.haml @@ -0,0 +1,26 @@ +.card.no-list + = hidden_field_tag("#{prefix}[stable_id]", item.stable_id) + + .fr-checkbox-group{ data: { controller: 'hide-target' } } + - id = sanitize_to_id("#{prefix}_#{item.stable_id}_enabled") + = check_box_tag "#{prefix}[enabled]", true, item.enabled?, id:, data: { 'hide-target_target': 'source' } + = label_tag id, libelle, class: 'fr-label' + + %div{ class: class_names('fr-hidden': !item.enabled?), data: { hide_target_target: 'toHide' } } + %div{ data: { controller: 'hide-target tiptap-to-template'} } + .fr-mt-2w{ data: { hide_target_target: 'toHide' } } + %span Nom du fichier : + %span{ data: { 'tiptap-to-template_target': 'output'} }= sanitize(item.template_string) + .fr-mt-2w + %button.fr-btn.fr-btn--tertiary.fr-btn--sm{ type: 'button', data: { 'hide-target_target': 'source' } } Renommer le fichier + + .fr-mt-2w.fr-hidden{ data: { controller: 'tiptap', 'tiptap-attributes-value': { spellcheck: false }.to_json, hide_target_target: 'toHide' } } + %span Renommer le fichier : + .fr-mt-2w.tiptap-editor{ data: { tiptap_target: 'editor' } } + = hidden_field_tag "#{prefix}[template]", item.template_json, data: { tiptap_target: 'input' }, id: nil + + .fr-mt-2w + %span.fr-text--sm Cliquez sur les étiquettes que vous souhaitez intégrer au nom du fichier + .fr-mt-2w= render TagsButtonListComponent.new(tags: { nil => @export_template.pj_tags }) + + = button_tag "Valider", type: 'button', class: 'fr-btn fr-mt-2w', data: { 'tiptap-to-template_target': 'trigger', 'hide-target_target': 'source'} diff --git a/app/views/instructeurs/export_templates/_form.html.haml b/app/views/instructeurs/export_templates/_form.html.haml index 00813d9b6..1de02b429 100644 --- a/app/views/instructeurs/export_templates/_form.html.haml +++ b/app/views/instructeurs/export_templates/_form.html.haml @@ -1,3 +1,5 @@ +- procedure = @export_template.procedure + #export_template-edit.fr-my-4w .fr-mb-6w = render Dsfr::AlertComponent.new(state: :info, title: "Nouvel éditeur de modèle d'export", heading_level: 'h3') do |c| @@ -7,72 +9,62 @@ Essayez-le et donnez-nous votre avis en nous envoyant un email à #{mail_to(CONTACT_EMAIL, subject: "Editeur de modèle d'export")}. -.fr-grid-row.fr-grid-row--gutters - .fr-col-12.fr-col-md-8 - = form_with url: form_url, model: @export_template, local: true, data: { turbo: 'true', controller: 'autosubmit' } do |f| + .fr-grid-row.fr-grid-row--gutters + .fr-col-12.fr-col-md-8.fr-pr-4w + = form_with model: [:instructeur, procedure, export_template], data: { turbo: 'true', controller: 'autosubmit' } do |f| + %input.hidden{ type: 'submit', formaction: preview_instructeur_procedure_export_templates_path, data: { autosubmit_target: 'submitter' }, formnovalidate: 'true', formmethod: 'get' } - = render Dsfr::InputComponent.new(form: f, attribute: :name, input_type: :text_field) + = f.hidden_field :kind, value: 'zip' - - if groupe_instructeurs.many? - .fr-input-group + = render Dsfr::InputComponent.new(form: f, attribute: :name, input_type: :text_field) + + .fr-input-group{ class: class_names('fr-hidden': groupe_instructeurs.one?) } = f.label :groupe_instructeur_id, class: 'fr-label' do - = f.object.class.human_attribute_name(:groupe_instructeur_id) - = render EditableChamp::AsteriskMandatoryComponent.new - %span.fr-hint-text - Avec quel groupe instructeur souhaitez-vous partager ce modèle d'export ? + = "#{ExportTemplate.human_attribute_name('groupe_instructeur_id')} #{asterisk}" + %span.fr-hint-text Avec quel groupe instructeur souhaitez-vous partager ce modèle d'export ? = f.collection_select :groupe_instructeur_id, groupe_instructeurs, :id, :label, {}, class: 'fr-select' - - else - = f.hidden_field :groupe_instructeur_id - = f.hidden_field :kind + .fr-input-group{ data: { controller: 'tiptap', 'tiptap-attributes-value': { spellcheck: false }.to_json } } + = f.label '[dossier_folder][template]', class: "fr-label" do + = "#{ExportTemplate.human_attribute_name('dossier_folder')} #{asterisk}" + %span.fr-hint-text Nom du répertoire contenant les différents fichiers à exporter + .tiptap-editor.fr-mt-1w{ data: { tiptap_target: 'editor' } } + = f.hidden_field "[dossier_folder][template]", data: { tiptap_target: 'input' }, value: export_template.dossier_folder.template_json + = f.hidden_field "[dossier_folder][enabled]", value: 'true' + .fr-mt-2w + %span.fr-text--sm Cliquez sur les étiquettes que vous souhaitez intégrer au nom du fichier + .fr-mt-2w= render TagsButtonListComponent.new(tags: { nil => export_template.tags }) - .fr-input-group{ data: { controller: 'tiptap' } } - = f.label :tiptap_default_dossier_directory, class: "fr-label" do - = f.object.class.human_attribute_name(:tiptap_default_dossier_directory) - = render EditableChamp::AsteriskMandatoryComponent.new - %span.fr-hint-text - = t('activerecord.attributes.export_template.hints.tiptap_default_dossier_directory') + = render Dsfr::NoticeComponent.new(data_attributes: { class: 'fr-my-4w' }) do |c| + - c.with_title do + Sélectionnez les fichiers que vous souhaitez exporter - .tiptap-editor.fr-mt-1w{ data: { tiptap_target: 'editor' } } - = f.hidden_field :tiptap_default_dossier_directory, data: { tiptap_target: 'input' } - .fr-mt-2w= render TagsButtonListComponent.new(tags: { nil => @export_template.specific_tags }) + %h3 Dossier au format PDF + = render partial: 'export_item', + locals: { item: export_template.export_pdf, + libelle: ExportTemplate.human_attribute_name(:export_pdf), + prefix: 'export_template[export_pdf]' } - .fr-input-group{ data: { controller: 'tiptap' } } - = f.label :tiptap_pdf_name, class: "fr-label" do - = f.object.class.human_attribute_name(:tiptap_pdf_name) - = render EditableChamp::AsteriskMandatoryComponent.new - %span.fr-hint-text - = t('activerecord.attributes.export_template.hints.tiptap_pdf_name') - .tiptap-editor.fr-mt-1w{ data: { tiptap_target: 'editor' } } - = f.hidden_field :tiptap_pdf_name, data: { tiptap_target: 'input' } - .fr-mt-2w= render TagsButtonListComponent.new(tags: { nil => @export_template.specific_tags }) + %h3 Pièces justificatives + - procedure.exportables_pieces_jointes.each do |tdc| + - item = export_template.pj(tdc) + = render partial: 'export_item', + locals: { item:, + libelle: tdc.libelle, + prefix: 'export_template[pjs][]'} - - if @all_pj.any? - %h3 Pieces justificatives + .fixed-footer + .fr-container + %ul.fr-btns-group.fr-btns-group--inline-md + %li= f.button "Enregistrer", class: "fr-btn", data: { turbo: 'false' } + %li= link_to "Annuler", [:exports, :instructeur, procedure], class: "fr-btn fr-btn--secondary" + - if export_template.persisted? + %li + = link_to "Supprimer", + [:instructeur, procedure, export_template], + method: :delete, + data: { confirm: "Voulez-vous vraiment supprimer ce modèle ? Il sera supprimé pour tous les instructeurs du groupe"}, + class: "fr-btn fr-btn--secondary" - .fr-highlight - %p.fr-text--sm - N'incluez pas les extensions de fichier (.pdf, .jpg, …) dans les noms de pièces jointes. - - - @all_pj.each do |pj| - .fr-input-group{ data: { controller: 'tiptap' } } - = label_tag pj.libelle, nil, name: field_name(:export_template, "tiptap_pj_#{pj.stable_id}"), class: "fr-label" - .tiptap-editor.fr-mt-1w{ data: { tiptap_target: 'editor' } } - = hidden_field_tag field_name(:export_template, "tiptap_pj_#{pj.stable_id}"), "#{@export_template.content_for_pj(pj)}" , data: { tiptap_target: 'input' } - .fr-mt-2w= render TagsButtonListComponent.new(tags: { nil => @export_template.tags_for_pj }) - - .fixed-footer - .fr-container - %ul.fr-btns-group.fr-btns-group--inline-md - %li - %input.hidden{ type: 'submit', formaction: preview_instructeur_export_templates_path, data: { autosubmit_target: 'submitter' }, formnovalidate: 'true', formmethod: 'get' } - = f.button "Enregistrer", class: "fr-btn", data: { turbo: 'false' } - %li - = link_to "Annuler", instructeur_procedure_path(@procedure), class: "fr-btn fr-btn--secondary" - - if @export_template.persisted? - %li - = link_to "Supprimer", instructeur_export_template_path(@export_template, procedure_id: @procedure.id), method: :delete, data: { confirm: "Voulez-vous vraiment supprimer ce modèle ? Il sera supprimé pour tous les instructeurs du groupe"}, class: "fr-btn fr-btn--secondary" - - sample_dossier = @procedure.dossier_for_preview(current_instructeur) - - if sample_dossier .fr-col-12.fr-col-md-4.fr-background-alt--blue-france - = render partial: 'preview', locals: { dossier: sample_dossier, export_template: @export_template, procedure: @procedure } + = render partial: 'preview', locals: { export_template: } diff --git a/app/views/instructeurs/export_templates/_preview.html.haml b/app/views/instructeurs/export_templates/_preview.html.haml index 124abc2c1..0df0548e0 100644 --- a/app/views/instructeurs/export_templates/_preview.html.haml +++ b/app/views/instructeurs/export_templates/_preview.html.haml @@ -1,17 +1,33 @@ +- procedure = export_template.procedure +- dossier = procedure.dossier_for_preview(current_instructeur) + #preview.export-template-preview.fr-p-2w.sticky--top %h2.fr-h4 Aperçu - %ul.tree.fr-text--sm - %li #{DownloadableFileService::EXPORT_DIRNAME}/ - %li - %ul - %li - %span#preview_default_dossier_directory #{export_template.tiptap_convert(dossier, "default_dossier_directory")}/ - %ul - %li#preview_pdf_name #{export_template.tiptap_convert(dossier, "pdf_name")}.pdf - - procedure.exportables_pieces_jointes.each do |pj| - %li{ id: "preview_pj_#{pj.stable_id}" } #{export_template.tiptap_convert_pj(dossier, pj.stable_id)}-1.jpg - %ul - %li - %span messagerie/ - %ul - %li un-autre-fichier.png + - if dossier.nil? + %p.fr-text--sm + Pour générer un aperçu fidèle avec tous les champs et les dates, + = link_to 'créez-vous un dossier', commencer_url(procedure.path), target: '_blank' + et acceptez-le : l’aperçu l’utilisera. + + - else + %ul.tree.fr-text--sm + %li + %span.fr-icon-folder-zip-line + #{DownloadableFileService::EXPORT_DIRNAME}/ + %li + %ul + %li + %span.fr-icon-folder-line + #{export_template.dossier_folder.path(dossier)}/ + %ul + - if export_template.export_pdf.enabled? + %li + %span.fr-icon-pdf-2-line + #{export_template.export_pdf.path(dossier)}.pdf + + - procedure.exportables_pieces_jointes.each do |tdc| + - export_pj = export_template.pj(tdc) + - if export_pj.enabled? + %li + %span.fr-icon-file-image-line + #{export_pj.path(dossier)}-1.jpg diff --git a/app/views/instructeurs/export_templates/edit.html.haml b/app/views/instructeurs/export_templates/edit.html.haml index bd4fc02b4..ab4c5f8c7 100644 --- a/app/views/instructeurs/export_templates/edit.html.haml +++ b/app/views/instructeurs/export_templates/edit.html.haml @@ -4,4 +4,4 @@ .fr-container %h1 Mise à jour modèle d'export - = render partial: 'form', locals: { form_url: instructeur_export_template_path(@procedure, @export_template), groupe_instructeurs: @groupe_instructeurs } + = render partial: 'form', locals: { export_template: @export_template, groupe_instructeurs: @groupe_instructeurs } diff --git a/app/views/instructeurs/export_templates/new.html.haml b/app/views/instructeurs/export_templates/new.html.haml index eeff6baa9..10962b1cd 100644 --- a/app/views/instructeurs/export_templates/new.html.haml +++ b/app/views/instructeurs/export_templates/new.html.haml @@ -3,4 +3,4 @@ [t('.title')]] } .fr-container %h1 Nouveau modèle d'export - = render partial: 'form', locals: { form_url: instructeur_export_templates_path, groupe_instructeurs: @groupe_instructeurs } + = render partial: 'form', locals: { export_template: @export_template, groupe_instructeurs: @groupe_instructeurs } diff --git a/app/views/instructeurs/procedures/exports.html.haml b/app/views/instructeurs/procedures/exports.html.haml index 793a7d960..e63eb4472 100644 --- a/app/views/instructeurs/procedures/exports.html.haml +++ b/app/views/instructeurs/procedures/exports.html.haml @@ -38,9 +38,9 @@ %tbody - @export_templates.each do |export_template| %tr - %td= link_to export_template.name, edit_instructeur_export_template_path(export_template, procedure_id: @procedure.id) + %td= link_to export_template.name, [:edit, :instructeur, @procedure, export_template] %td= export_template.groupe_instructeur.label if @procedure.groupe_instructeurs.many? %p - = link_to new_instructeur_export_template_path(procedure_id: params[:procedure_id]), class: 'fr-btn fr-btn--secondary fr-btn--icon-left fr-icon-add-line' do + = link_to [:new, :instructeur, @procedure, :export_template], class: 'fr-btn fr-btn--secondary fr-btn--icon-left fr-icon-add-line' do Ajouter un modèle d'export