Merge pull request #2249 from betagouv/dev

mep
This commit is contained in:
LeSim 2018-07-13 14:26:28 +02:00 committed by GitHub
commit 4730a8502f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 35 additions and 22 deletions

View file

@ -1,14 +1,14 @@
document.addEventListener('turbolinks:load', function() { document.addEventListener('turbolinks:load', function() {
var primaries, i, primary, secondary, secondaryOptions; var primaries, i;
primaries = document.querySelectorAll('select[data-secondary-options]'); primaries = document.querySelectorAll('select[data-secondary-options]');
for (i = 0; i < primaries.length; i++) { for (i = 0; i < primaries.length; i++) {
primary = primaries[i]; primaries[i].addEventListener('change', function(e) {
secondary = document.querySelector('select[data-secondary-id="' + primary.dataset.primaryId + '"]'); var option, options, element, primary, secondary, secondaryOptions;
secondaryOptions = JSON.parse(primary.dataset.secondaryOptions);
primary.addEventListener('change', function(e) { primary = e.target;
var option, options, element; secondary = document.querySelector('select[data-secondary-id="' + primary.dataset.primaryId + '"]');
secondaryOptions = JSON.parse(primary.dataset.secondaryOptions);
while ((option = secondary.firstChild)) { while ((option = secondary.firstChild)) {
secondary.removeChild(option); secondary.removeChild(option);

View file

@ -187,7 +187,7 @@ module NewGestionnaire
def champs_private_params def champs_private_params
params.require(:dossier).permit(champs_private_attributes: [ params.require(:dossier).permit(champs_private_attributes: [
:id, :piece_justificative_file, :value, value: [], :id, :primary_value, :secondary_value, :piece_justificative_file, :value, value: [],
etablissement_attributes: Champs::SiretChamp::ETABLISSEMENT_ATTRIBUTES etablissement_attributes: Champs::SiretChamp::ETABLISSEMENT_ATTRIBUTES
]) ])
end end

View file

@ -1,27 +1,28 @@
class Champs::LinkedDropDownListChamp < Champ class Champs::LinkedDropDownListChamp < Champ
attr_reader :primary_value, :secondary_value
delegate :primary_options, :secondary_options, to: :type_de_champ delegate :primary_options, :secondary_options, to: :type_de_champ
after_initialize :unpack_value def primary_value
def unpack_value
if value.present? if value.present?
primary, secondary = JSON.parse(value) JSON.parse(value)[0]
else else
primary = secondary = '' ''
end
end
def secondary_value
if value.present?
JSON.parse(value)[1]
else
''
end end
@primary_value ||= primary
@secondary_value ||= secondary
end end
def primary_value=(value) def primary_value=(value)
@primary_value = value pack_value(value, secondary_value)
pack_value
end end
def secondary_value=(value) def secondary_value=(value)
@secondary_value = value pack_value(primary_value, value)
pack_value
end end
def main_value_name def main_value_name
@ -46,7 +47,7 @@ class Champs::LinkedDropDownListChamp < Champ
"#{primary_value || ''};#{secondary_value || ''}" "#{primary_value || ''};#{secondary_value || ''}"
end end
def pack_value def pack_value(primary, secondary)
self.value = JSON.generate([ primary_value, secondary_value ]) self.value = JSON.generate([ primary, secondary ])
end end
end end

View file

@ -350,12 +350,16 @@ describe NewGestionnaire::DossiersController, type: :controller do
create(:type_de_champ_multiple_drop_down_list, :private, libelle: 'libelle').champ.create create(:type_de_champ_multiple_drop_down_list, :private, libelle: 'libelle').champ.create
end end
let(:champ_linked_drop_down_list) do
create(:type_de_champ_linked_drop_down_list, :private, libelle: 'libelle').champ.create
end
let(:champ_datetime) do let(:champ_datetime) do
create(:type_de_champ_datetime, :private, libelle: 'libelle').champ.create create(:type_de_champ_datetime, :private, libelle: 'libelle').champ.create
end end
let(:dossier) do let(:dossier) do
create(:dossier, :en_construction, procedure: procedure, champs_private: [champ_multiple_drop_down_list, champ_datetime]) create(:dossier, :en_construction, procedure: procedure, champs_private: [champ_multiple_drop_down_list, champ_linked_drop_down_list, champ_datetime])
end end
before do before do
@ -375,16 +379,24 @@ describe NewGestionnaire::DossiersController, type: :controller do
'value(3i)': 21, 'value(3i)': 21,
'value(4i)': 13, 'value(4i)': 13,
'value(5i)': 17 'value(5i)': 17
},
'2': {
id: champ_linked_drop_down_list.id,
primary_value: 'primary',
secondary_value: 'secondary'
} }
} }
} }
} }
champ_multiple_drop_down_list.reload champ_multiple_drop_down_list.reload
champ_linked_drop_down_list.reload
champ_datetime.reload champ_datetime.reload
end end
it { expect(champ_multiple_drop_down_list.value).to eq('["un", "deux"]') } it { expect(champ_multiple_drop_down_list.value).to eq('["un", "deux"]') }
it { expect(champ_linked_drop_down_list.primary_value).to eq('primary') }
it { expect(champ_linked_drop_down_list.secondary_value).to eq('secondary') }
it { expect(champ_datetime.value).to eq('21/12/2019 13:17') } it { expect(champ_datetime.value).to eq('21/12/2019 13:17') }
it { expect(response).to redirect_to(annotations_privees_gestionnaire_dossier_path(dossier.procedure, dossier)) } it { expect(response).to redirect_to(annotations_privees_gestionnaire_dossier_path(dossier.procedure, dossier)) }
end end