Ajoute une sticky navbar si il y a une modification de démarche déjà publiée

This commit is contained in:
Kara Diaby 2024-08-21 00:21:47 +00:00
parent ec9a03ac17
commit 4a93579e71
No known key found for this signature in database
GPG key ID: C4D1B0CF9F24D759
6 changed files with 85 additions and 0 deletions

View file

@ -0,0 +1,9 @@
.sticky-header.sticky-header-warning
.fr-container
%p.flex.justify-between.align-center.fr-text-default--warning
%span
= dsfr_icon("fr-icon-warning-fill fr-mr-1v")
= t('.intro_html').html_safe
%span.no-wrap
= link_to t('.see_changes'), admin_procedure_path(procedure), class: 'fr-btn fr-btn--secondary fr-mr-2w'
= link_to t('.publish_changes'), admin_procedure_publish_revision_path(procedure), class: 'fr-btn', method: :post, data: { disable_with: "Publication...", confirm: 'Êtes-vous sûr de vouloir publier les modifications ?' }

View file

@ -1,3 +1,7 @@
- if @procedure.draft_changed?
- content_for(:sticky_header) do
= render partial: 'administrateurs/procedures/unpublished_changes_navbar', locals: { procedure: @procedure }
= render partial: 'administrateurs/breadcrumbs',
locals: { steps: [['Démarches', admin_procedures_back_path(@procedure)],
[@procedure.libelle.truncate_words(10), admin_procedure_path(@procedure)],

View file

@ -49,3 +49,10 @@
= turbo_stream.hide dom_id(@created.coordinate.parent, :type_de_champ_add_button)
- elsif @destroyed&.child? && @destroyed.parent.empty?
= turbo_stream.show dom_id(@destroyed.parent, :type_de_champ_add_button)
- if @procedure.draft_changed?
= turbo_stream.update "sticky-header" do
= render partial: "administrateurs/procedures/unpublished_changes_navbar", locals: { procedure: @procedure }
- else
= turbo_stream.update "sticky-header", ""

View file

@ -71,3 +71,7 @@ en:
path_not_available:
owner: This URL is identical to another of your published procedures. If you publish this procedure, the old one will be unpublished and will no longer be accessible to the public.
not_owner: This URL is identical to another procedure, you must modify it.
unpublished_changes_navbar:
intro_html: Changes made will only be visible <strong>after the next publication</strong>
see_changes: View changes
publish_changes: Publish changes

View file

@ -71,3 +71,7 @@ fr:
path_not_available:
owner: Cette url est identique à celle dune autre de vos démarches publiées. Si vous publiez cette démarche, lancienne sera dépubliée et ne sera plus accessible au public.
not_owner: Cette url est identique à celle dune autre démarche, vous devez la modifier afin de pouvoir publier votre démarche.
unpublished_changes_navbar:
intro_html: Les modifications effectuées ne seront visibles <strong>qu'à la prochaine publication</strong>
see_changes: Voir les modifications
publish_changes: Publier les modifications

View file

@ -351,4 +351,61 @@ describe 'As an administrateur I can edit types de champ', js: true do
end
end
end
context "unpublished changes navbar" do
let(:procedure) { create(:procedure, :published) }
before do
login_as administrateur.user, scope: :user
visit champs_admin_procedure_path(procedure)
end
scenario "navbar behavior for published and unpublished procedures" do
expect(page).not_to have_selector('.sticky-header.sticky-header-warning')
# Ajouter le premier champ
find('.fr-btn.fr-btn--secondary.fr-btn--icon-left.fr-icon-add-line', match: :first).click
fill_in 'Libellé du champ', with: 'Premier champ'
expect(page).to have_selector('.sticky-header.sticky-header-warning')
expect(page).to have_content("Les modifications effectuées ne seront visibles qu'à la prochaine publication")
expect(page).to have_field('Libellé du champ', with: 'Premier champ')
# Ajouter le deuxième champ
find('.fr-btn.fr-btn--secondary.fr-btn--icon-left.fr-icon-add-line', match: :first).click
expect(page).to have_selector('.type-de-champ', count: 2, wait: 5)
within all('.type-de-champ').last do
fill_in 'Libellé du champ', with: 'Deuxième champ'
end
expect(page).to have_field('Libellé du champ', with: 'Premier champ')
expect(page).to have_field('Libellé du champ', with: 'Deuxième champ')
expect(page).to have_selector('.sticky-header.sticky-header-warning')
expect(page).to have_content("Les modifications effectuées ne seront visibles qu'à la prochaine publication")
# Supprimer les champs
2.times do
initial_count = page.all('.type-de-champ').count
first('.fr-btn--tertiary-no-outline[title="Supprimer le champ"]').click
page.driver.browser.switch_to.alert.accept rescue nil
expect(page).to have_selector('.type-de-champ', count: initial_count - 1, wait: 5)
end
expect(page).not_to have_selector('.sticky-header.sticky-header-warning')
unpublished_procedure = create(:procedure)
visit champs_admin_procedure_path(unpublished_procedure)
find('.fr-btn.fr-btn--secondary.fr-btn--icon-left.fr-icon-add-line', match: :first).click
fill_in 'Libellé du champ', with: 'Nouveau champ'
expect(page).not_to have_selector('.sticky-header.sticky-header-warning')
end
end
end