feat(autosave): use new autosave controller

This commit is contained in:
Paul Chavard 2022-05-06 19:52:55 +02:00
parent 3fea34732e
commit c9b8d43acd
11 changed files with 30 additions and 36 deletions

View file

@ -174,7 +174,7 @@ module Users
respond_to do |format| respond_to do |format|
format.html { render :brouillon } format.html { render :brouillon }
format.js format.turbo_stream
end end
end end

View file

@ -29,14 +29,6 @@ module DossierHelper
new_dossier_url(procedure_id: revision.procedure.id, brouillon: revision.draft? ? true : nil) new_dossier_url(procedure_id: revision.procedure.id, brouillon: revision.draft? ? true : nil)
end end
def dossier_form_class(dossier)
classes = ['form']
if autosave_available?(dossier)
classes << 'autosave-enabled'
end
classes.join(' ')
end
def autosave_available?(dossier) def autosave_available?(dossier)
dossier.brouillon? dossier.brouillon?
end end

View file

@ -60,7 +60,7 @@ export function useHiddenField(
if (hiddenField) { if (hiddenField) {
hiddenField.setAttribute('value', value); hiddenField.setAttribute('value', value);
setValue(value); setValue(value);
fire(hiddenField, 'autosave:trigger'); fire(hiddenField, 'change');
} }
}, },
hiddenField ?? undefined hiddenField ?? undefined

View file

@ -1,10 +0,0 @@
<%= fields_for @champ.input_name, @champ do |form| %>
<%= render_to_element("##{@champ.input_group_id}", partial: "shared/dossiers/editable_champs/editable_champ", locals: { champ: @champ, form: form }, outer: true) %>
<% end %>
<% attachment = @champ.piece_justificative_file.attachment %>
<% if attachment.virus_scanner.pending? %>
<%= fire_event('attachment:update', { url: attachment_url(attachment.id, { signed_id: attachment.blob.signed_id, user_can_upload: true }) }.to_json ) %>
<% end %>
<%= focus_element("button[data-toggle-target=\".attachment-input-#{attachment.id}\"]") %>

View file

@ -0,0 +1,6 @@
= fields_for @champ.input_name, @champ do |form|
= turbo_stream.replace @champ.input_group_id, partial: "shared/dossiers/editable_champs/editable_champ", locals: { champ: @champ, form: form }
- if @champ.piece_justificative_file.attached?
- attachment = @champ.piece_justificative_file.attachment
= turbo_stream.focus_all "button[data-toggle-target=\".attachment-input-#{attachment.id}\"]"

View file

@ -30,7 +30,7 @@
Une erreur sest produite pendant lenvoi du fichier. Une erreur sest produite pendant lenvoi du fichier.
%p.attachment-error-description %p.attachment-error-description
Une erreur inconnue s'est produite pendant l'envoi du fichier Une erreur inconnue s'est produite pendant l'envoi du fichier
= button_tag type: 'button', class: 'button attachment-error-retry', data: { 'input-target': ".attachment-input-#{attachment_id}" } do = button_tag type: 'button', class: 'button attachment-error-retry', data: { 'input-target': ".attachment-input-#{attachment_id}", action: 'autosave#onClickRetryButton' } do
%span.icon.retry %span.icon.retry
Ré-essayer Ré-essayer

View file

@ -8,7 +8,7 @@
- else - else
- form_options = { url: modifier_dossier_url(dossier), method: :patch } - form_options = { url: modifier_dossier_url(dossier), method: :patch }
= form_for dossier, form_options.merge({ html: { id: 'dossier-edit-form', class: dossier_form_class(dossier), multipart: true } }) do |f| = form_for dossier, form_options.merge({ html: { id: 'dossier-edit-form', class: 'form', multipart: true } }) do |f|
.prologue .prologue
%p.mandatory-explanation= t('utils.asterisk_html') %p.mandatory-explanation= t('utils.asterisk_html')
@ -28,6 +28,7 @@
%hr %hr
- if dossier.show_groupe_instructeur_selector? - if dossier.show_groupe_instructeur_selector?
%span{ data: autosave_available?(dossier) ? { controller: 'autosave', autosave_url_value: brouillon_dossier_path(dossier) } : {} }
= f.label :groupe_instructeur_id do = f.label :groupe_instructeur_id do
= dossier.procedure.routing_criteria_name = dossier.procedure.routing_criteria_name
%span.mandatory * %span.mandatory *

View file

@ -1,4 +1,5 @@
.editable-champ{ class: "editable-champ-#{champ.type_champ}", id: champ.input_group_id } - autosave_controller = autosave_available?(champ.dossier) && !champ.repetition? ? { controller: 'autosave', autosave_url_value: brouillon_dossier_path(champ.dossier) } : {}
.editable-champ{ class: "editable-champ-#{champ.type_champ}", id: champ.input_group_id, data: autosave_controller }
- if champ.repetition? - if champ.repetition?
%h3.header-subsection= champ.libelle %h3.header-subsection= champ.libelle
- if champ.description.present? - if champ.description.present?
@ -9,5 +10,5 @@
- if champ.type_champ == "titre_identite" - if champ.type_champ == "titre_identite"
%p.notice Carte nationale didentité (uniquement le recto), passeport, titre de séjour ou autre justificatif didentité. Formats acceptés : jpg/png %p.notice Carte nationale didentité (uniquement le recto), passeport, titre de séjour ou autre justificatif didentité. Formats acceptés : jpg/png
= form.hidden_field :id, value: champ.id = form.hidden_field :id, value: champ.id, data: champ.repetition? ? { id: true } : {}
= render partial: "shared/dossiers/editable_champs/#{champ.type_champ}", locals: { form: form, champ: champ } = render partial: "shared/dossiers/editable_champs/#{champ.type_champ}", locals: { form: form, champ: champ }

View file

@ -1,4 +1,4 @@
.autosave.autosave-state-idle .autosave.autosave-state-idle{ data: { controller: 'autosave-status' } }
%p.autosave-explanation %p.autosave-explanation
%span.autosave-explanation-text %span.autosave-explanation-text
= t('views.users.dossiers.autosave.autosave_draft') = t('views.users.dossiers.autosave.autosave_draft')
@ -13,7 +13,7 @@
%p.autosave-status.failed %p.autosave-status.failed
%span.autosave-icon ⚠️ %span.autosave-icon ⚠️
%span.autosave-label Impossible denregistrer le brouillon %span.autosave-label Impossible denregistrer le brouillon
%button.button.small.autosave-retry %button.button.small.autosave-retry{ type: :button, data: { action: 'autosave-status#onClickRetryButton', autosave_status_target: 'retryButton' } }
%span.autosave-retry-label réessayer %span.autosave-retry-label réessayer
%span.autosave-retrying-label enregistrement en cours… %span.autosave-retrying-label enregistrement en cours…

View file

@ -13,7 +13,7 @@ describe Champs::PieceJustificativeController, type: :controller do
position: '1', position: '1',
champ_id: champ.id, champ_id: champ.id,
blob_signed_id: file blob_signed_id: file
}, format: 'js' }, format: :turbo_stream
end end
context 'when the file is valid' do context 'when the file is valid' do
@ -29,7 +29,7 @@ describe Champs::PieceJustificativeController, type: :controller do
it 'renders the attachment template as Javascript' do it 'renders the attachment template as Javascript' do
subject subject
expect(response.status).to eq(200) expect(response.status).to eq(200)
expect(response.body).to include("##{champ.input_group_id}") expect(response.body).to include("action=\"replace\" target=\"#{champ.input_group_id}\"")
end end
it 'updates dossier.last_champ_updated_at' do it 'updates dossier.last_champ_updated_at' do

View file

@ -247,14 +247,18 @@ describe 'The user' do
fill_individual fill_individual
# Test auto-upload failure # Test auto-upload failure
logout(:user) # Make the subsequent auto-upload request fail # Make the subsequent auto-upload request fail
allow_any_instance_of(Champs::PieceJustificativeController).to receive(:update) do |instance|
instance.render json: { errors: ['Error'] }, status: :bad_request
end
attach_file('Pièce justificative 1', Rails.root + 'spec/fixtures/files/file.pdf') attach_file('Pièce justificative 1', Rails.root + 'spec/fixtures/files/file.pdf')
expect(page).to have_text('Une erreur sest produite pendant lenvoi du fichier') expect(page).to have_text('Une erreur sest produite pendant lenvoi du fichier')
expect(page).to have_button('Ré-essayer', visible: true) expect(page).to have_button('Ré-essayer', visible: true)
expect(page).to have_button('Déposer le dossier', disabled: false) expect(page).to have_button('Déposer le dossier', disabled: false)
allow_any_instance_of(Champs::PieceJustificativeController).to receive(:update).and_call_original
# Test that retrying after a failure works # Test that retrying after a failure works
login_as(user, scope: :user) # Make the auto-upload request work again
click_on('Ré-essayer', visible: true) click_on('Ré-essayer', visible: true)
expect(page).to have_text('analyse antivirus en cours') expect(page).to have_text('analyse antivirus en cours')
expect(page).to have_text('file.pdf') expect(page).to have_text('file.pdf')