fix(dropdown): wait "other" input to be disabled before autosave

Fix le workflow suivant pour un champ drop down avec option "autre" :

- on choisit la valeur "autre" avec une valeur => ça autosave la bonne valeur
- on choisit finalement une autre valeur proposée => l'autosave envoyait
  la nouvelle valeur, et toujours la valeur "other" car l'input n'était pas encore
  `disabled`. Par conséquent la valeur other overridait la valeur choisie
  et ça provoquait des erreurs en cascade, notamment dans le conditionnel.
This commit is contained in:
Colin Darie 2023-01-24 14:27:53 +01:00
parent c15ad573bc
commit 3265fff30e
2 changed files with 21 additions and 3 deletions

View file

@ -89,9 +89,12 @@ export class AutosaveController extends ApplicationController {
isCheckboxOrRadioInputElement(target) || isCheckboxOrRadioInputElement(target) ||
(!this.saveOnInput && isTextInputElement(target)) (!this.saveOnInput && isTextInputElement(target))
) { ) {
this.enqueueAutosaveRequest(); // Wait next tick so champs having JS can interact
// with form elements before extracting form data.
this.showConditionnalSpinner(target); setTimeout(() => {
this.enqueueAutosaveRequest();
this.showConditionnalSpinner(target);
}, 0);
} }
} }
} }

View file

@ -26,6 +26,21 @@ describe 'dropdown list with other option activated', js: true do
find('.radios').find('label:last-child').find('input').select_option find('.radios').find('label:last-child').find('input').select_option
expect(page).to have_selector('.drop_down_other', visible: true) expect(page).to have_selector('.drop_down_other', visible: true)
end end
scenario "Getting back from other save the new option", js: true do
fill_individual
choose "Autre"
fill_in("Veuillez saisir votre autre choix", with: "My choice")
wait_until { user_dossier.champs_public.first.value == "My choice" }
expect(user_dossier.champs_public.first.value).to eq("My choice")
choose "Secondary 1.1"
wait_until { user_dossier.champs_public.first.value == "Secondary 1.1" }
expect(user_dossier.champs_public.first.value).to eq("Secondary 1.1")
end
end end
context 'with select' do context 'with select' do