Browse Source

Fix JS errors and remove UJS

pull/235/head
Stéphane Meny 3 years ago committed by baarkerlounger
parent
commit
31f2b55caa
  1. 7
      app/helpers/conditional_questions_helper.rb
  2. 9
      app/models/form/page.rb
  3. 7
      app/views/form/_radio_question.html.erb
  4. 4
      app/views/form/page.html.erb
  5. 1
      app/webpacker/controllers/conditional_question_controller.js
  6. 8
      app/webpacker/packs/application.js
  7. 2
      config/application.rb
  8. 1
      package.json
  9. 5
      yarn.lock

7
app/helpers/conditional_questions_helper.rb

@ -3,6 +3,13 @@ module ConditionalQuestionsHelper
page.questions.map(&:conditional_for).compact.map(&:keys).flatten page.questions.map(&:conditional_for).compact.map(&:keys).flatten
end end
def find_conditional_question(page, conditional_for, answer_value)
return if conditional_for.nil?
conditional_key = conditional_for.find { |_, conditional_value| conditional_value.include? answer_value }&.first
page.questions.find { |q| q.id == conditional_key }
end
def display_question_key_div(page, question) def display_question_key_div(page, question)
"style='display:none;'".html_safe if conditional_questions_for_page(page).include?(question.id) || question.requires_js "style='display:none;'".html_safe if conditional_questions_for_page(page).include?(question.id) || question.requires_js
end end

9
app/models/form/page.rb

@ -27,6 +27,15 @@ class Form::Page
subsection.enabled?(case_log) && depends_on_met(case_log) subsection.enabled?(case_log) && depends_on_met(case_log)
end end
# We expect to render only one radio question (with conditionals)
def questions_to_render
if questions.first.type == "radio"
[questions.first]
else
questions
end
end
private private
def depends_on_met(case_log) def depends_on_met(case_log)

7
app/views/form/_radio_question.html.erb

@ -8,11 +8,12 @@
<% question.answer_options.map do |key, val| %> <% question.answer_options.map do |key, val| %>
<% if key.starts_with?("divider") %> <% if key.starts_with?("divider") %>
<%= f.govuk_radio_divider %> <%= f.govuk_radio_divider %>
<% else %>
<% conditional_question = find_conditional_question(@page, question.conditional_for, val) %>
<% if conditional_question.nil? %>
<%= f.govuk_radio_button question.id, val, label: { text: val }, **stimulus_html_attributes(question) %>
<% else %> <% else %>
<%= f.govuk_radio_button question.id, val, label: { text: val }, **stimulus_html_attributes(question) do %> <%= f.govuk_radio_button question.id, val, label: { text: val }, **stimulus_html_attributes(question) do %>
<% conditional_key = question.conditional_for&.find { |_, cval| cval.include? val }&.first %>
<% if conditional_key %>
<% conditional_question = @page.questions.find { |q| q.id == conditional_key } %>
<%= render partial: "#{conditional_question.type}_question", locals: { question: conditional_question, caption: caption, page_header: page_header, f: f } %> <%= render partial: "#{conditional_question.type}_question", locals: { question: conditional_question, caption: caption, page_header: page_header, f: f } %>
<% end %> <% end %>
<% end %> <% end %>

4
app/views/form/page.html.erb

@ -29,8 +29,8 @@
<%= form_with model: @case_log, url: form_case_log_path(@case_log), method: "post" do |f| %> <%= form_with model: @case_log, url: form_case_log_path(@case_log), method: "post" do |f| %>
<%= f.govuk_error_summary %> <%= f.govuk_error_summary %>
<% @page.questions.map do |question| %> <% @page.questions_to_render.map do |question| %>
<div id=<%= question.id + "_div " %><%= display_question_key_div(@page, question) %> > <div id=<%= question.id + "_div " %> >
<% if question.read_only? %> <% if question.read_only? %>
<hr class="govuk-section-break govuk-section-break--visible govuk-section-break--m"> <hr class="govuk-section-break govuk-section-break--visible govuk-section-break--m">
<% end %> <% end %>

1
app/webpacker/controllers/conditional_question_controller.js

@ -23,6 +23,7 @@ export default class extends Controller {
Object.entries(conditional_for).map(([targetQuestion, conditions]) => { Object.entries(conditional_for).map(([targetQuestion, conditions]) => {
let div = document.getElementById(targetQuestion + "_div") let div = document.getElementById(targetQuestion + "_div")
if (div == null) return;
if(conditions.includes(selectedValue)) { if(conditions.includes(selectedValue)) {
div.style.display = "block" div.style.display = "block"
} else { } else {

8
app/webpacker/packs/application.js

@ -5,15 +5,11 @@
require.context('govuk-frontend/govuk/assets') require.context('govuk-frontend/govuk/assets')
import '../styles/application.scss' import '../styles/application.scss'
import Rails from "@rails/ujs"
import * as ActiveStorage from "@rails/activestorage" import * as ActiveStorage from "@rails/activestorage"
import "channels" import "channels"
import { initAll } from 'govuk-frontend' import "controllers"
import "@hotwired/turbo-rails" import "@hotwired/turbo-rails"
import { initAll } from 'govuk-frontend'
Rails.start()
ActiveStorage.start() ActiveStorage.start()
initAll() initAll()
import "controllers"

2
config/application.rb

@ -33,5 +33,7 @@ module DataCollector
# config.eager_load_paths << Rails.root.join("extras") # config.eager_load_paths << Rails.root.join("extras")
config.exceptions_app = routes config.exceptions_app = routes
config.action_view.form_with_generates_remote_forms = false
end end
end end

1
package.json

@ -12,7 +12,6 @@
"@hotwired/turbo-rails": "^7.1.0", "@hotwired/turbo-rails": "^7.1.0",
"@rails/actioncable": "^6.0.0", "@rails/actioncable": "^6.0.0",
"@rails/activestorage": "^6.0.0", "@rails/activestorage": "^6.0.0",
"@rails/ujs": "^6.0.0",
"@rails/webpacker": "5.4.0", "@rails/webpacker": "5.4.0",
"accessible-autocomplete": "^2.0.3", "accessible-autocomplete": "^2.0.3",
"chart.js": "^3.6.0", "chart.js": "^3.6.0",

5
yarn.lock

@ -970,11 +970,6 @@
dependencies: dependencies:
spark-md5 "^3.0.0" spark-md5 "^3.0.0"
"@rails/ujs@^6.0.0":
version "6.1.4"
resolved "https://registry.yarnpkg.com/@rails/ujs/-/ujs-6.1.4.tgz#093d5341595a02089ed309dec40f3c37da7b1b10"
integrity sha512-O3lEzL5DYbxppMdsFSw36e4BHIlfz/xusynwXGv3l2lhSlvah41qviRpsoAlKXxl37nZAqK+UUF5cnGGK45Mfw==
"@rails/webpacker@5.4.0": "@rails/webpacker@5.4.0":
version "5.4.0" version "5.4.0"
resolved "https://registry.yarnpkg.com/@rails/webpacker/-/webpacker-5.4.0.tgz#2c64a9ea7e85d2a33e50e86319fe6751df0c47e8" resolved "https://registry.yarnpkg.com/@rails/webpacker/-/webpacker-5.4.0.tgz#2c64a9ea7e85d2a33e50e86319fe6751df0c47e8"

Loading…
Cancel
Save