From 5f2c1e4c13bda0b50638ca7494c7321d648a1b11 Mon Sep 17 00:00:00 2001 From: baarkerlounger Date: Thu, 4 Nov 2021 18:57:23 +0000 Subject: [PATCH] Make sure we only run the stimulus init once per page load --- .../soft_validations_controller.js | 53 ++++++++++--------- .../_validation_override_question.html.erb | 2 +- spec/features/case_log_spec.rb | 1 - 3 files changed, 30 insertions(+), 26 deletions(-) diff --git a/app/javascript/controllers/soft_validations_controller.js b/app/javascript/controllers/soft_validations_controller.js index f25331411..d8a3e48e2 100644 --- a/app/javascript/controllers/soft_validations_controller.js +++ b/app/javascript/controllers/soft_validations_controller.js @@ -1,30 +1,35 @@ import { Controller } from "@hotwired/stimulus" export default class extends Controller { + static values = { run: Number } + initialize() { - let url = window.location.href + "/soft_validations" - let xhr = new XMLHttpRequest() - let div = document.getElementById("soft-validations") - xhr.open("GET", url, true) - xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded") - xhr.onreadystatechange = function () { - if (this.readyState == 4 && this.status == 200) { - let response = JSON.parse(this.response) - if(response["show"]){ - div.style.display = "block" - let innerHTML = div.innerHTML - innerHTML = innerHTML.replace("soft-validations-placeholder-message", response["label"]) - innerHTML = innerHTML.replace("soft-validations-placeholder-hint-text", response["hint"]) - div.innerHTML = innerHTML - } else { - div.style.display = "none" - let buttons = document.getElementsByName(`case_log[override_net_income_validation][]`) - Object.entries(buttons).forEach(([idx, button]) => { - button.checked = false; - }) - } - } - } - xhr.send() + if(this.runValue == 0){ + let url = window.location.href + "/soft_validations" + let xhr = new XMLHttpRequest() + let div = document.getElementById("soft-validations") + xhr.open("GET", url, true) + xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded") + xhr.onreadystatechange = function () { + if (this.readyState == 4 && this.status == 200) { + let response = JSON.parse(this.response) + if(response["show"]){ + div.style.display = "block" + let innerHTML = div.innerHTML + innerHTML = innerHTML.replace("soft-validations-placeholder-message", response["label"]) + innerHTML = innerHTML.replace("soft-validations-placeholder-hint-text", response["hint"]) + div.innerHTML = innerHTML + } else { + div.style.display = "none" + let buttons = document.getElementsByName(`case_log[override_net_income_validation][]`) + Object.entries(buttons).forEach(([idx, button]) => { + button.checked = false; + }) + } + } + } + xhr.send() + this.runValue++ + } } } diff --git a/app/views/form/_validation_override_question.html.erb b/app/views/form/_validation_override_question.html.erb index 5459844e0..4f9af5d78 100644 --- a/app/views/form/_validation_override_question.html.erb +++ b/app/views/form/_validation_override_question.html.erb @@ -2,7 +2,7 @@ <%= f.govuk_check_boxes_fieldset page_info["soft_validations"]&.keys&.first, legend: { text: "soft-validations-placeholder-message", size: "l" }, hint: { text: "soft-validations-placeholder-hint-text" }, - form_group: { "data-controller": "soft-validations" } do %> + form_group: { "data-controller": "soft-validations", "data-run": "0" } do %> <%= f.govuk_check_box page_info["soft_validations"]&.keys&.first, page_info["soft_validations"]&.keys&.first, label: { text: "Yes" } diff --git a/spec/features/case_log_spec.rb b/spec/features/case_log_spec.rb index 4d292d01e..8f50bf0af 100644 --- a/spec/features/case_log_spec.rb +++ b/spec/features/case_log_spec.rb @@ -405,7 +405,6 @@ RSpec.describe "Test Features" do choose("case-log-net-income-frequency-weekly-field", allow_label_click: true) click_button("Save and continue") expect(page).to have_content("Are you sure this is correct?") - binding.pry check("case-log-override-net-income-validation-override-net-income-validation-field", allow_label_click: true) click_button("Save and continue") expect(page).to have_current_path("/case_logs/#{case_log.id}/net_income_uc_proportion")