Browse Source

Remove hotwire turbo (#406)

* Remove turbo

* No turbo so redirect form response

* Handle multiple errors per field

* Remove turbo styles
pull/451/head
baarkerlounger 3 years ago committed by GitHub
parent
commit
2998170cdd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 4
      Gemfile
  2. 9
      Gemfile.lock
  3. 10
      app/controllers/form_controller.rb
  4. 1
      app/frontend/application.js
  5. 6
      app/frontend/styles/application.scss
  6. 7
      app/views/case_logs/edit.html.erb
  7. 6
      app/views/form/check_answers.html.erb
  8. 8
      app/views/form/page.html.erb
  9. 4
      app/views/layouts/application.html.erb
  10. 2
      package.json
  11. 24
      spec/features/form/validations_spec.rb
  12. 2
      spec/requests/form_controller_spec.rb
  13. 18
      yarn.lock

4
Gemfile

@ -25,8 +25,8 @@ gem "govuk_design_system_formbuilder"
gem "govuk_markdown" gem "govuk_markdown"
# GOV UK Notify # GOV UK Notify
gem "notifications-ruby-client" gem "notifications-ruby-client"
# Turbo and Stimulus # A modest javascript framework for the html you already have
gem "hotwire-rails" gem "stimulus-rails"
# Administration framework # Administration framework
gem "activeadmin" gem "activeadmin"
# Admin charts # Admin charts

9
Gemfile.lock

@ -188,10 +188,6 @@ GEM
actionpack (>= 5.2) actionpack (>= 5.2)
activesupport (>= 5.2) activesupport (>= 5.2)
hashdiff (1.0.1) hashdiff (1.0.1)
hotwire-rails (0.1.3)
rails (>= 6.0.0)
stimulus-rails
turbo-rails
i18n (1.10.0) i18n (1.10.0)
concurrent-ruby (~> 1.0) concurrent-ruby (~> 1.0)
inherited_resources (1.13.1) inherited_resources (1.13.1)
@ -432,9 +428,6 @@ GEM
thor (1.2.1) thor (1.2.1)
timecop (0.9.5) timecop (0.9.5)
timeout (0.2.0) timeout (0.2.0)
turbo-rails (1.0.1)
actionpack (>= 6.0.0)
railties (>= 6.0.0)
tzinfo (2.0.4) tzinfo (2.0.4)
concurrent-ruby (~> 1.0) concurrent-ruby (~> 1.0)
uk_postcode (2.1.7) uk_postcode (2.1.7)
@ -482,7 +475,6 @@ DEPENDENCIES
govuk-components govuk-components
govuk_design_system_formbuilder govuk_design_system_formbuilder
govuk_markdown govuk_markdown
hotwire-rails
jsbundling-rails jsbundling-rails
json-schema json-schema
listen (~> 3.3) listen (~> 3.3)
@ -510,6 +502,7 @@ DEPENDENCIES
sentry-rails sentry-rails
sentry-ruby sentry-ruby
simplecov simplecov
stimulus-rails
timecop (~> 0.9.4) timecop (~> 0.9.4)
two_factor_authentication! two_factor_authentication!
tzinfo-data tzinfo-data

10
app/controllers/form_controller.rb

@ -17,8 +17,9 @@ class FormController < ApplicationController
redirect_to(send(redirect_path, @case_log)) redirect_to(send(redirect_path, @case_log))
end end
else else
@subsection = @case_log.form.subsection_for_page(@page) redirect_path = "case_log_#{@page.id}_path"
render "form/page", status: :unprocessable_entity session[:errors] = @case_log.errors.to_json
redirect_to(send(redirect_path, @case_log))
end end
else else
render_not_found render_not_found
@ -39,6 +40,11 @@ class FormController < ApplicationController
form.pages.map do |page| form.pages.map do |page|
define_method(page.id) do |_errors = {}| define_method(page.id) do |_errors = {}|
if @case_log if @case_log
if session["errors"]
JSON(session["errors"]).each do |field, messages|
messages.each { |message| @case_log.errors.add field.to_sym, message }
end
end
@subsection = @case_log.form.subsection_for_page(page) @subsection = @case_log.form.subsection_for_page(page)
@page = @case_log.form.get_page(page.id) @page = @case_log.form.get_page(page.id)
if @page.routed_to?(@case_log) && @page.subsection.enabled?(@case_log) if @page.routed_to?(@case_log) && @page.subsection.enabled?(@case_log)

1
app/frontend/application.js

@ -16,6 +16,5 @@ require.context("govuk-frontend/govuk/assets")
import { initAll } from "govuk-frontend" import { initAll } from "govuk-frontend"
import "./styles/application.scss" import "./styles/application.scss"
import "./controllers" import "./controllers"
import "@hotwired/turbo-rails"
initAll() initAll()

6
app/frontend/styles/application.scss

@ -25,12 +25,6 @@ $govuk-global-styles: true;
@import "pagination"; @import "pagination";
@import "panel"; @import "panel";
// Turbo
.turbo-progress-bar {
height: govuk-spacing(1);
background-color: $govuk-brand-colour;
}
// App utilities // App utilities
.app-\!-colour-muted { .app-\!-colour-muted {
color: $govuk-secondary-text-colour !important; color: $govuk-secondary-text-colour !important;

7
app/views/case_logs/edit.html.erb

@ -4,8 +4,7 @@
content_for(:title) => "" content_for(:title) => ""
}) %> }) %>
<%= turbo_frame_tag "case_log_form", target: "_top" do %> <div class="govuk-grid-row">
<div class="govuk-grid-row">
<div class="govuk-grid-column-two-thirds-from-desktop"> <div class="govuk-grid-column-two-thirds-from-desktop">
<h1 class="govuk-heading-xl"> <h1 class="govuk-heading-xl">
<%= content_for(:title) %> <%= content_for(:title) %>
@ -26,8 +25,6 @@
<% elsif @case_log.status == "not_started" %> <% elsif @case_log.status == "not_started" %>
<p class="govuk-body">This log has not been started.</p> <p class="govuk-body">This log has not been started.</p>
<% end %> <% end %>
<%= render "tasklist" %> <%= render "tasklist" %>
</div> </div>
</div> </div>
<% end %>

6
app/views/form/check_answers.html.erb

@ -5,8 +5,7 @@
subsection.label => "" subsection.label => ""
}) %> }) %>
<%= turbo_frame_tag "case_log_form", target: "_top" do %> <div class="govuk-grid-row">
<div class="govuk-grid-row">
<div class="govuk-grid-column-three-quarters-from-desktop"> <div class="govuk-grid-column-three-quarters-from-desktop">
<h1 class="govuk-heading-l"> <h1 class="govuk-heading-l">
<span class="govuk-caption-l"><%= subsection.label %></span> <span class="govuk-caption-l"><%= subsection.label %></span>
@ -31,5 +30,4 @@
<% end %> <% end %>
<% end %> <% end %>
</div> </div>
</div> </div>
<% end %>

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

@ -1,7 +1,3 @@
<% content_for :head do %>
<meta name="turbo-cache-control" content="no-cache">
<% end %>
<% content_for :title, @page.header.present? ? @page.header : @page.questions.first().header.html_safe %> <% content_for :title, @page.header.present? ? @page.header : @page.questions.first().header.html_safe %>
<% content_for :before_content do %> <% content_for :before_content do %>
@ -13,8 +9,7 @@
<div data-controller="govukfrontend"></div> <div data-controller="govukfrontend"></div>
<%= turbo_frame_tag "case_log_form", target: "_top" do %> <%= form_with model: @case_log, url: form_case_log_path(@case_log), method: "post", local: true do |f| %>
<%= form_with model: @case_log, url: form_case_log_path(@case_log), method: "post" do |f| %>
<div class="govuk-grid-row"> <div class="govuk-grid-row">
<div class=<%= @page.questions[0].type == "interruption_screen" ? "govuk-grid-column-full-from-desktop" : "govuk-grid-column-two-thirds-from-desktop"%>> <div class=<%= @page.questions[0].type == "interruption_screen" ? "govuk-grid-column-full-from-desktop" : "govuk-grid-column-two-thirds-from-desktop"%>>
<% remove_other_page_errors(@case_log, @page) %> <% remove_other_page_errors(@case_log, @page) %>
@ -56,5 +51,4 @@
<%end %> <%end %>
</div> </div>
</div> </div>
<% end %>
<% end %> <% end %>

4
app/views/layouts/application.html.erb

@ -13,7 +13,7 @@
<%= favicon_link_tag asset_path('images/govuk-apple-touch-icon-152x152.png'), rel: 'apple-touch-icon', type: 'image/png', size: '152x152' %> <%= favicon_link_tag asset_path('images/govuk-apple-touch-icon-152x152.png'), rel: 'apple-touch-icon', type: 'image/png', size: '152x152' %>
<%= favicon_link_tag asset_path('images/govuk-apple-touch-icon-167x167.png'), rel: 'apple-touch-icon', type: 'image/png', size: '167x167' %> <%= favicon_link_tag asset_path('images/govuk-apple-touch-icon-167x167.png'), rel: 'apple-touch-icon', type: 'image/png', size: '167x167' %>
<%= favicon_link_tag asset_path('images/govuk-apple-touch-icon-180x180.png'), rel: 'apple-touch-icon', type: 'image/png', size: '180x180' %> <%= favicon_link_tag asset_path('images/govuk-apple-touch-icon-180x180.png'), rel: 'apple-touch-icon', type: 'image/png', size: '180x180' %>
<%= stylesheet_link_tag "application", "data-turbo-track": "reload" %> <%= stylesheet_link_tag "application" %>
<%= javascript_include_tag "vendor/html5shiv.min.js" %> <%= javascript_include_tag "vendor/html5shiv.min.js" %>
<%= javascript_tag do -%> <%= javascript_tag do -%>
window.html5.elements = 'output'; window.html5.elements = 'output';
@ -21,7 +21,7 @@
<% end -%> <% end -%>
<%= javascript_include_tag "vendor/polyfill-output-value.js" %> <%= javascript_include_tag "vendor/polyfill-output-value.js" %>
<%= javascript_include_tag "vendor/outerHTML.js" %> <%= javascript_include_tag "vendor/outerHTML.js" %>
<%= javascript_include_tag "application", "data-turbo-track": "reload", defer: true %> <%= javascript_include_tag "application", defer: true %>
<% if content_for?(:head) %> <% if content_for?(:head) %>
<%= yield(:head) %> <%= yield(:head) %>

2
package.json

@ -10,8 +10,6 @@
"@babel/plugin-transform-runtime": "^7.17.0", "@babel/plugin-transform-runtime": "^7.17.0",
"@babel/preset-env": "^7.16.11", "@babel/preset-env": "^7.16.11",
"@hotwired/stimulus": "^3.0.0", "@hotwired/stimulus": "^3.0.0",
"@hotwired/turbo": "^7.1.0",
"@hotwired/turbo-rails": "^7.1.0",
"@stimulus/polyfills": "^2.0.0", "@stimulus/polyfills": "^2.0.0",
"@webcomponents/webcomponentsjs": "^2.6.0", "@webcomponents/webcomponentsjs": "^2.6.0",
"accessible-autocomplete": "^2.0.3", "accessible-autocomplete": "^2.0.3",

24
spec/features/form/validations_spec.rb

@ -60,51 +60,51 @@ RSpec.describe "validations" do
describe "date validation", js: true do describe "date validation", js: true do
def fill_in_date(case_log_id, question, day, month, year, path) def fill_in_date(case_log_id, question, day, month, year, path)
visit("/logs/#{case_log_id}/#{path}") visit("/logs/#{case_log_id}/#{path}")
fill_in("#{question}_1i", with: year) fill_in("case_log[#{question}(1i)]", with: year)
fill_in("#{question}_2i", with: month) fill_in("case_log[#{question}(2i)]", with: month)
fill_in("#{question}_3i", with: day) fill_in("case_log[#{question}(3i)]", with: day)
end end
it "does not allow out of range dates to be submitted" do it "does not allow out of range dates to be submitted" do
fill_in_date(id, "case_log_mrcdate", 3100, 12, 2000, "property-major-repairs") fill_in_date(id, "mrcdate", 3100, 12, 2000, "property-major-repairs")
click_button("Save and continue") click_button("Save and continue")
expect(page).to have_current_path("/logs/#{id}/property-major-repairs") expect(page).to have_current_path("/logs/#{id}/property-major-repairs")
fill_in_date(id, "case_log_mrcdate", 12, 1, 20_000, "property-major-repairs") fill_in_date(id, "mrcdate", 12, 1, 20_000, "property-major-repairs")
click_button("Save and continue") click_button("Save and continue")
expect(page).to have_current_path("/logs/#{id}/property-major-repairs") expect(page).to have_current_path("/logs/#{id}/property-major-repairs")
fill_in_date(id, "case_log_mrcdate", 13, 100, 2020, "property-major-repairs") fill_in_date(id, "mrcdate", 13, 100, 2020, "property-major-repairs")
click_button("Save and continue") click_button("Save and continue")
expect(page).to have_current_path("/logs/#{id}/property-major-repairs") expect(page).to have_current_path("/logs/#{id}/property-major-repairs")
fill_in_date(id, "case_log_mrcdate", 21, 11, 2020, "property-major-repairs") fill_in_date(id, "mrcdate", 21, 11, 2020, "property-major-repairs")
click_button("Save and continue") click_button("Save and continue")
expect(page).to have_current_path("/logs/#{id}/local-authority/check-answers") expect(page).to have_current_path("/logs/#{id}/local-authority/check-answers")
end end
it "does not allow non numeric inputs to be submitted" do it "does not allow non numeric inputs to be submitted" do
fill_in_date(id, "case_log_mrcdate", "abc", "de", "ff", "property-major-repairs") fill_in_date(id, "mrcdate", "abc", "de", "ff", "property-major-repairs")
click_button("Save and continue") click_button("Save and continue")
expect(page).to have_current_path("/logs/#{id}/property-major-repairs") expect(page).to have_current_path("/logs/#{id}/property-major-repairs")
end end
it "does not allow partial inputs to be submitted" do it "does not allow partial inputs to be submitted" do
fill_in_date(id, "case_log_mrcdate", 21, 12, nil, "property-major-repairs") fill_in_date(id, "mrcdate", 21, 12, nil, "property-major-repairs")
click_button("Save and continue") click_button("Save and continue")
expect(page).to have_current_path("/logs/#{id}/property-major-repairs") expect(page).to have_current_path("/logs/#{id}/property-major-repairs")
fill_in_date(id, "case_log_mrcdate", 12, nil, 2000, "property-major-repairs") fill_in_date(id, "mrcdate", 12, nil, 2000, "property-major-repairs")
click_button("Save and continue") click_button("Save and continue")
expect(page).to have_current_path("/logs/#{id}/property-major-repairs") expect(page).to have_current_path("/logs/#{id}/property-major-repairs")
fill_in_date(id, "case_log_mrcdate", nil, 10, 2020, "property-major-repairs") fill_in_date(id, "mrcdate", nil, 10, 2020, "property-major-repairs")
click_button("Save and continue") click_button("Save and continue")
expect(page).to have_current_path("/logs/#{id}/property-major-repairs") expect(page).to have_current_path("/logs/#{id}/property-major-repairs")
end end
it "allows valid inputs to be submitted" do it "allows valid inputs to be submitted" do
fill_in_date(id, "case_log_mrcdate", 21, 11, 2020, "property-major-repairs") fill_in_date(id, "mrcdate", 21, 11, 2020, "property-major-repairs")
click_button("Save and continue") click_button("Save and continue")
expect(page).to have_current_path("/logs/#{id}/local-authority/check-answers") expect(page).to have_current_path("/logs/#{id}/local-authority/check-answers")
end end

2
spec/requests/form_controller_spec.rb

@ -129,7 +129,7 @@ RSpec.describe FormController, type: :request do
let(:answer) { 2000 } let(:answer) { 2000 }
it "re-renders the same page with errors if validation fails" do it "re-renders the same page with errors if validation fails" do
expect(response).to have_http_status(:unprocessable_entity) expect(response).to redirect_to("/logs/#{case_log.id}/#{page_id.dasherize}")
end end
end end

18
yarn.lock

@ -926,19 +926,6 @@
resolved "https://registry.yarnpkg.com/@hotwired/stimulus/-/stimulus-3.0.1.tgz#141f15645acaa3b133b7c247cad58ae252ffae85" resolved "https://registry.yarnpkg.com/@hotwired/stimulus/-/stimulus-3.0.1.tgz#141f15645acaa3b133b7c247cad58ae252ffae85"
integrity sha512-oHsJhgY2cip+K2ED7vKUNd2P+BEswVhrCYcJ802DSsblJFv7mPFVk3cQKvm2vHgHeDVdnj7oOKrBbzp1u8D+KA== integrity sha512-oHsJhgY2cip+K2ED7vKUNd2P+BEswVhrCYcJ802DSsblJFv7mPFVk3cQKvm2vHgHeDVdnj7oOKrBbzp1u8D+KA==
"@hotwired/turbo-rails@^7.1.0":
version "7.1.1"
resolved "https://registry.yarnpkg.com/@hotwired/turbo-rails/-/turbo-rails-7.1.1.tgz#35c03b92b5c86f0137ed08bef843d955ec9bbe83"
integrity sha512-ZXpxUjCfkdbuXfoGrsFK80qsVzACs8xCfie9rt2jMTSN6o1olXVA0Nrk8u02yNEwSiVJm/4QSOa8cUcMj6VQjg==
dependencies:
"@hotwired/turbo" "^7.1.0"
"@rails/actioncable" "^7.0"
"@hotwired/turbo@^7.1.0":
version "7.1.0"
resolved "https://registry.yarnpkg.com/@hotwired/turbo/-/turbo-7.1.0.tgz#27e44e0e3dc5bd1d4bda0766d579cf5a14091cd7"
integrity sha512-Q8kGjqwPqER+CtpQudbH+3Zgs2X4zb6pBAlr6NsKTXadg45pAOvxI9i4QpuHbwSzR2+x87HUm+rot9F/Pe8rxA==
"@jridgewell/resolve-uri@^3.0.3": "@jridgewell/resolve-uri@^3.0.3":
version "3.0.5" version "3.0.5"
resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz#68eb521368db76d040a6315cdb24bf2483037b9c" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz#68eb521368db76d040a6315cdb24bf2483037b9c"
@ -978,11 +965,6 @@
"@nodelib/fs.scandir" "2.1.5" "@nodelib/fs.scandir" "2.1.5"
fastq "^1.6.0" fastq "^1.6.0"
"@rails/actioncable@^7.0":
version "7.0.2"
resolved "https://registry.yarnpkg.com/@rails/actioncable/-/actioncable-7.0.2.tgz#69a6d999f4087e0537dd38fe0963db1f4305d650"
integrity sha512-G26maXW1Kx0LxQdmNNuNjQlRO/QlXNr3QfuwKiOKb5FZQGYe2OwtHTGXBAjSoiu4dW36XYMT/+L1Wo1Yov4ZXA==
"@stimulus/polyfills@^2.0.0": "@stimulus/polyfills@^2.0.0":
version "2.0.0" version "2.0.0"
resolved "https://registry.yarnpkg.com/@stimulus/polyfills/-/polyfills-2.0.0.tgz#64b3e247c762330f80d88e993d1d26b24e3c13b1" resolved "https://registry.yarnpkg.com/@stimulus/polyfills/-/polyfills-2.0.0.tgz#64b3e247c762330f80d88e993d1d26b24e3c13b1"

Loading…
Cancel
Save