Disable phase date fields when a phase is disabled

The JavaScript involved wasn't working since we removed the disable-date
attribute in commit 73ff6881.

We're also improving the JavaScript in two ways:

First, we trigger the `change` event immediately, so when the page loads
date fields are disabled when phases are disabled.

And second, we don't remove the selected dates when disabling a phase,
so disabling it and enabling it again will keep the selected values.
This commit is contained in:
Javi Martín
2020-08-14 18:34:16 +02:00
parent 6172dd0a56
commit 1e70a3db02
3 changed files with 49 additions and 7 deletions

View File

@@ -2,21 +2,21 @@
"use strict";
App.LegislationAdmin = {
initialize: function() {
$("input[type='checkbox'][data-disable-date]").on({
$(".legislation-process-form").find("[name$='enabled]'],[name$='[published]']").on({
change: function() {
var checkbox, date_selector, parent;
var checkbox;
checkbox = $(this);
parent = $(this).parents(".row:eq(0)");
date_selector = $(this).data("disable-date");
parent.find("input[type='text'][id^='" + date_selector + "']").each(function() {
checkbox.closest("fieldset").find("input[type='text']").each(function() {
if (checkbox.is(":checked")) {
$(this).removeAttr("disabled");
} else {
$(this).val("");
$(this).prop("disabled", true);
}
});
}
});
}).trigger("change");
$("#nested_question_options").on("cocoon:after-insert", function() {
App.Globalize.refresh_visible_translations();
});

View File

@@ -1074,6 +1074,10 @@ form {
&.error {
margin-bottom: rem-calc(1);
}
&:disabled {
background-color: $input-background-disabled;
}
}
[type="checkbox"] + label,

View File

@@ -240,6 +240,44 @@ describe "Admin collaborative legislation" do
expect(page).not_to have_content "Draft publication"
end
scenario "Enabling/disabling a phase enables/disables its date fields", :js do
process.update!(published: false)
visit edit_admin_legislation_process_path(process)
expect(page).to have_field "start_date", disabled: true
expect(page).to have_field "end_date", disabled: true
check "legislation_process[published]"
fill_in "start_date", with: "07/07/2007"
fill_in "end_date", with: "08/08/2008"
uncheck "legislation_process[published]"
expect(page).to have_field "start_date", disabled: true
expect(page).to have_field "end_date", disabled: true
check "legislation_process[published]"
expect(page).to have_field "start_date", disabled: false, with: "07/07/2007"
expect(page).to have_field "end_date", disabled: false, with: "08/08/2008"
end
scenario "Enabling/disabling a phase does not enable/disable another phase date fields", :js do
process.update!(draft_phase_enabled: false, draft_publication_enabled: false)
visit edit_admin_legislation_process_path(process)
expect(page).to have_field "draft_start_date", disabled: true
expect(page).to have_field "draft_end_date", disabled: true
expect(page).to have_field "draft_publication_date", disabled: true
check "legislation_process[draft_phase_enabled]"
expect(page).to have_field "draft_start_date", disabled: false
expect(page).to have_field "draft_end_date", disabled: false
expect(page).to have_field "draft_publication_date", disabled: true
end
scenario "Change proposal categories" do
visit edit_admin_legislation_process_path(process)
within(".admin-content") { click_link "Proposals" }