diff --git a/app/helpers/conditional_questions_helper.rb b/app/helpers/conditional_questions_helper.rb new file mode 100644 index 000000000..b5c38dd2a --- /dev/null +++ b/app/helpers/conditional_questions_helper.rb @@ -0,0 +1,7 @@ +module ConditionalQuestionsHelper + def conditional_questions_for_page(page) + page["questions"].values.map do |question| + question["conditional_for"] + end.compact.map(&:keys).flatten + end +end diff --git a/app/javascript/controllers/armed_forces_controller.js b/app/javascript/controllers/armed_forces_controller.js new file mode 100644 index 000000000..d84b5cc5e --- /dev/null +++ b/app/javascript/controllers/armed_forces_controller.js @@ -0,0 +1,17 @@ +import { Controller } from "stimulus" + +export default class extends Controller { + displayConditional() { + let question = this.element.name; + let selected = this.element.value; + let conditional_for = JSON.parse(this.element.dataset.info); + + Object.entries(conditional_for).forEach(([key, values]) => { + if(values.includes(selected)) { + document.getElementById(key + "_div").style.display = "block" + } else { + document.getElementById(key + "_div").style.display = "none" + } + }); + } +} diff --git a/app/views/form/_radio_question.html.erb b/app/views/form/_radio_question.html.erb index 363337ff1..b084fdbc1 100644 --- a/app/views/form/_radio_question.html.erb +++ b/app/views/form/_radio_question.html.erb @@ -6,30 +6,14 @@ <% question["answer_options"].map do |key, val| %> <% if key.starts_with?("divider") %> <%= f.govuk_radio_divider %> + <% elsif question["conditional_for"] %> + <%= f.govuk_radio_button question_key, key, label: { text: val }, + "data-controller": "#{question_key.dasherize}", + "data-action": "click->#{question_key.dasherize}#displayConditional", + "data-info": "#{question["conditional_for"].to_json}" + %> <% else %> <%= f.govuk_radio_button question_key, val, label: { text: val } %> <% end %> <% end %> <% end %> - - diff --git a/app/views/form/page.html.erb b/app/views/form/page.html.erb index d8df7605d..0d292ec42 100644 --- a/app/views/form/page.html.erb +++ b/app/views/form/page.html.erb @@ -17,6 +17,11 @@
> <%= render partial: "form/#{question["type"]}_question", locals: { question_key: question_key, question: question, f: f } %>
+ <% if conditional_questions_for_page(page_info).include?(question_key) %> + + <% end %> <% end %> <%= f.hidden_field :previous_page, value: page_key %> diff --git a/config/forms/2021_2022.json b/config/forms/2021_2022.json index 91b71997d..8815212d3 100644 --- a/config/forms/2021_2022.json +++ b/config/forms/2021_2022.json @@ -292,6 +292,10 @@ "1": "Yes - a reserve", "2": "No", "3": "Prefer not to say" + }, + "conditional_for": { + "armed_forces_active": ["0", "1"], + "armed_forces_injured": ["0", "1"] } }, "armed_forces_active": { @@ -303,9 +307,6 @@ "1": "No - they left up to 5 years ago", "2": "No - they left more than 5 years ago", "3": "Prefer not to say" - }, - "show_if": { - "armed_forces": ["0", "1"] } }, "armed_forces_injured": { @@ -316,9 +317,6 @@ "0": "Yes", "1": "No", "2": "Prefer not to say" - }, - "show_if": { - "armed_forces": ["0", "1"] } }, "armed_forces_partner": {