Merge pull request #1446 from tchak/fix-multi-submit

Fix multi submit bug with direct upload
This commit is contained in:
gregoirenovel 2018-02-16 13:47:15 +01:00 committed by GitHub
commit 5b6a54399c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 45 additions and 10 deletions

View file

@ -42,4 +42,16 @@ addEventListener("direct-upload:end", function (event) {
element = document.getElementById("direct-upload-" + id); element = document.getElementById("direct-upload-" + id);
element.classList.add("direct-upload--complete"); element.classList.add("direct-upload--complete");
}); });
addEventListener('load', function() {
var submitButtons = document.querySelectorAll('form button[type=submit][data-action]');
var hiddenInput = document.querySelector('form input[type=hidden][name=submit_action]');
submitButtons = [].slice.call(submitButtons);
submitButtons.forEach(function(button) {
button.addEventListener('click', function() {
hiddenInput.value = button.getAttribute('data-action');
});
});
});

View file

@ -113,11 +113,11 @@ class Users::DescriptionController < UsersController
end end
def brouillon_submission? def brouillon_submission?
params[:submit] && params[:submit]['brouillon'].present? params[:submit_action] == 'brouillon'
end end
def brouillon_then_dashboard_submission? def brouillon_then_dashboard_submission?
params[:submit] && params[:submit]['brouillon_then_dashboard'].present? params[:submit_action] == 'brouillon_then_dashboard'
end end
def check_autorisation_donnees def check_autorisation_donnees

View file

@ -40,6 +40,26 @@
- elsif !@dossier.brouillon? - elsif !@dossier.brouillon?
= render partial: '/layouts/modifications_terminees' = render partial: '/layouts/modifications_terminees'
- else - else
= submit_tag 'Soumettre mon dossier', id: 'suivant', name: 'submit[nouveaux]', class: 'btn btn btn-success', style: 'float: right;', disabled: @procedure.archivee?, data: { disable_with: 'Soumettre votre dossier', submit: true } = hidden_field_tag 'submit_action', 'brouillon'
= submit_tag 'Enregistrer un brouillon', id: 'brouillon', name: 'submit[brouillon]', class: 'btn btn-xs btn-default', style: 'float: right; margin-right: 10px; margin-top: 6px;', disabled: @procedure.archivee?, data: { disable_with: 'Enregistrer un brouillon', submit: true } = submit_tag 'Bonjour Active Storage !', style: 'display: none;'
= submit_tag "Enregistrer et voir mes dossiers", id: 'brouillon_then_dashboard', name: 'submit[brouillon_then_dashboard]', class: 'btn btn-xs btn-default', style: 'float: right; margin-right: 10px; margin-top: 6px;', disabled: @procedure.archivee?, data: { disable_with: 'Voir mes brouillons et dossiers', submit: true } = button_tag 'Soumettre mon dossier',
id: 'suivant',
type: 'submit',
class: 'btn btn btn-success',
style: 'float: right;',
disabled: @procedure.archivee?,
data: { disable: true, action: 'nouveaux' }
= button_tag 'Enregistrer un brouillon',
id: 'brouillon',
type: 'submit',
class: 'btn btn-xs btn-default',
style: 'float: right; margin-right: 10px; margin-top: 6px;',
disabled: @procedure.archivee?,
data: { disable: true, action: 'brouillon' }
= button_tag "Enregistrer et voir mes dossiers",
id: 'brouillon_then_dashboard',
type: 'submit',
class: 'btn btn-xs btn-default',
style: 'float: right; margin-right: 10px; margin-top: 6px;',
disabled: @procedure.archivee?,
data: { disable: true, action: 'brouillon_then_dashboard' }

View file

@ -107,12 +107,12 @@ shared_examples 'description_controller_spec' do
let(:state) { 'brouillon' } let(:state) { 'brouillon' }
def submit_dossier def submit_dossier
post :update, params: { dossier_id: dossier_id, submit: submit } post :update, params: { dossier_id: dossier_id, submit_action: submit }
dossier.reload dossier.reload
end end
context "when the user submits the dossier" do context "when the user submits the dossier" do
let(:submit) { { nouveaux: 'nouveaux' } } let(:submit) { 'nouveaux' }
it "redirection vers la page recapitulative" do it "redirection vers la page recapitulative" do
submit_dossier submit_dossier
@ -142,7 +142,7 @@ shared_examples 'description_controller_spec' do
end end
context 'when user saves a brouillon' do context 'when user saves a brouillon' do
let(:submit) { { brouillon: 'brouillon' } } let(:submit) { 'brouillon' }
it "reste sur la page du dossier" do it "reste sur la page du dossier" do
submit_dossier submit_dossier
@ -156,7 +156,7 @@ shared_examples 'description_controller_spec' do
end end
context 'when user saves a brouillon and goes to dashboard' do context 'when user saves a brouillon and goes to dashboard' do
let(:submit) { { brouillon_then_dashboard: 'brouillon_then_dashboard' } } let(:submit) { 'brouillon_then_dashboard' }
it "goes to dashboard" do it "goes to dashboard" do
submit_dossier submit_dossier

View file

@ -27,6 +27,7 @@ feature 'As a User I wanna create a dossier' do
expect(page).to have_current_path(users_dossier_carte_path(procedure_for_individual.dossiers.last.id.to_s)) expect(page).to have_current_path(users_dossier_carte_path(procedure_for_individual.dossiers.last.id.to_s))
page.find_by_id('etape_suivante').click page.find_by_id('etape_suivante').click
fill_in "champs_#{procedure_for_individual.dossiers.last.champs.first.id}", with: 'contenu du champ 1' fill_in "champs_#{procedure_for_individual.dossiers.last.champs.first.id}", with: 'contenu du champ 1'
find(:css, '[name=submit_action]').set('nouveaux')
page.find_by_id('suivant').click page.find_by_id('suivant').click
expect(user.dossiers.first.individual.birthdate).to eq("1987-10-14") expect(user.dossiers.first.individual.birthdate).to eq("1987-10-14")
expect(page).to have_current_path(users_dossier_recapitulatif_path(procedure_for_individual.dossiers.last.id.to_s)) expect(page).to have_current_path(users_dossier_recapitulatif_path(procedure_for_individual.dossiers.last.id.to_s))
@ -38,6 +39,7 @@ feature 'As a User I wanna create a dossier' do
expect(page).to have_current_path(users_dossier_carte_path(procedure_for_individual.dossiers.last.id.to_s)) expect(page).to have_current_path(users_dossier_carte_path(procedure_for_individual.dossiers.last.id.to_s))
page.find_by_id('etape_suivante').click page.find_by_id('etape_suivante').click
fill_in "champs_#{procedure_for_individual.dossiers.last.champs.first.id}", with: 'contenu du champ 1' fill_in "champs_#{procedure_for_individual.dossiers.last.champs.first.id}", with: 'contenu du champ 1'
find(:css, '[name=submit_action]').set('nouveaux')
page.find_by_id('suivant').click page.find_by_id('suivant').click
expect(user.dossiers.first.individual.birthdate).to eq("1987-10-14") expect(user.dossiers.first.individual.birthdate).to eq("1987-10-14")
expect(page).to have_current_path(users_dossier_recapitulatif_path(procedure_for_individual.dossiers.last.id.to_s)) expect(page).to have_current_path(users_dossier_recapitulatif_path(procedure_for_individual.dossiers.last.id.to_s))
@ -52,6 +54,7 @@ feature 'As a User I wanna create a dossier' do
expect(page).to have_current_path(users_dossier_carte_path(procedure_for_individual.dossiers.last.id.to_s)) expect(page).to have_current_path(users_dossier_carte_path(procedure_for_individual.dossiers.last.id.to_s))
page.find_by_id('etape_suivante').click page.find_by_id('etape_suivante').click
fill_in "champs_#{procedure_for_individual.dossiers.last.champs.first.id}", with: 'contenu du champ 1' fill_in "champs_#{procedure_for_individual.dossiers.last.champs.first.id}", with: 'contenu du champ 1'
find(:css, '[name=submit_action]').set('nouveaux')
page.find_by_id('suivant').click page.find_by_id('suivant').click
expect(user.dossiers.first.individual.birthdate).to eq(nil) expect(user.dossiers.first.individual.birthdate).to eq(nil)
expect(page).to have_current_path(users_dossier_recapitulatif_path(procedure_for_individual.dossiers.last.id.to_s)) expect(page).to have_current_path(users_dossier_recapitulatif_path(procedure_for_individual.dossiers.last.id.to_s))