Browse Source

Dynamic back button

pull/21/head
baarkerlounger 3 years ago
parent
commit
377e055e47
  1. 8
      app/javascript/styles/_task-list.scss
  2. 4
      app/models/form.rb
  3. 5
      app/views/form/questions/previous_housing_situation.html.erb
  4. 8
      app/views/form/questions/tenant_age.html.erb
  5. 6
      app/views/form/questions/tenant_code.html.erb
  6. 5
      app/views/form/questions/tenant_gender.html.erb
  7. 16
      spec/models/form_spec.rb

8
app/javascript/styles/_task-list.scss

@ -81,7 +81,7 @@
} }
} }
// turbo-frame { turbo-frame {
// display: block; display: block;
// border: 1px solid blue border: 1px solid blue
// } }

4
app/models/form.rb

@ -36,4 +36,8 @@ class Form < ApplicationRecord
def self.next_question(previous_question) def self.next_question(previous_question)
Form::QUESTIONS[previous_question] Form::QUESTIONS[previous_question]
end end
def self.previous_question(current_question)
Hash[QUESTIONS.to_a.map(&:reverse)][current_question]
end
end end

5
app/views/form/questions/previous_housing_situation.html.erb

@ -24,6 +24,11 @@
OpenStruct.new(id: 22, name: "Lifetime PRP General Needs tenancy"), OpenStruct.new(id: 22, name: "Lifetime PRP General Needs tenancy"),
] %> ] %>
<% previous_question = Form.previous_question("previous_housing_situation") %>
<%= govuk_back_link href: "/case_logs/#{case_log_id}/#{previous_question}" do %>
Back
<% end %>
<%= turbo_frame_tag "case_log_form", target: "_top" do %> <%= turbo_frame_tag "case_log_form", target: "_top" do %>
<%= form_with action: '/case_logs', method: "next_question", builder: GOVUKDesignSystemFormBuilder::FormBuilder do |f| %> <%= form_with action: '/case_logs', method: "next_question", builder: GOVUKDesignSystemFormBuilder::FormBuilder do |f| %>
<%= f.govuk_collection_radio_buttons :previous_housing_situation, situations, :id, :name, legend: { text: "What was the tenant’s housing situation immediately before this letting?", size: "l" } %> <%= f.govuk_collection_radio_buttons :previous_housing_situation, situations, :id, :name, legend: { text: "What was the tenant’s housing situation immediately before this letting?", size: "l" } %>

8
app/views/form/questions/tenant_age.html.erb

@ -1,7 +1,9 @@
<%= turbo_frame_tag "case_log_form", target: "_top" do %> <% previous_question = Form.previous_question("tenant_age") %>
<%= govuk_back_link GovukComponent::BackLinkComponent.new href: 'tenant_code' do %> <%= govuk_back_link href: "/case_logs/#{case_log_id}/#{previous_question}" do %>
back Back
<% end %> <% end %>
<%= turbo_frame_tag "case_log_form", target: "_top" do %>
<%= form_with action: '/case_logs', method: "next_question", builder: GOVUKDesignSystemFormBuilder::FormBuilder do |f| %> <%= form_with action: '/case_logs', method: "next_question", builder: GOVUKDesignSystemFormBuilder::FormBuilder do |f| %>
<%= f.govuk_number_field :tenant_age, <%= f.govuk_number_field :tenant_age,
hint: { text: "More detail" }, hint: { text: "More detail" },

6
app/views/form/questions/tenant_code.html.erb

@ -1,7 +1,9 @@
<%= turbo_frame_tag "case_log_form", target: "_top" do %> <% previous_question = Form.previous_question("tenant_code") %>
<%= govuk_back_link href: "/case_logs/#{case_log_id}" do %> <%= govuk_back_link href: "/case_logs/#{case_log_id}/#{previous_question}" do %>
Back Back
<% end %> <% end %>
<%= turbo_frame_tag "case_log_form", target: "_top" do %>
<%= form_with action: '/case_logs', method: "next_question", builder: GOVUKDesignSystemFormBuilder::FormBuilder do |f| %> <%= form_with action: '/case_logs', method: "next_question", builder: GOVUKDesignSystemFormBuilder::FormBuilder do |f| %>
<%= f.govuk_text_field :tenant_code, <%= f.govuk_text_field :tenant_code,
hint: { text: "More detail" }, hint: { text: "More detail" },

5
app/views/form/questions/tenant_gender.html.erb

@ -5,6 +5,11 @@
OpenStruct.new(id: 3, name: "Prefer not to say") OpenStruct.new(id: 3, name: "Prefer not to say")
] %> ] %>
<% previous_question = Form.previous_question("tenant_gender") %>
<%= govuk_back_link href: "/case_logs/#{case_log_id}/#{previous_question}" do %>
Back
<% end %>
<%= turbo_frame_tag "case_log_form", target: "_top" do %> <%= turbo_frame_tag "case_log_form", target: "_top" do %>
<%= form_with action: '/case_logs', method: "next_question", builder: GOVUKDesignSystemFormBuilder::FormBuilder do |f| %> <%= form_with action: '/case_logs', method: "next_question", builder: GOVUKDesignSystemFormBuilder::FormBuilder do |f| %>
<%= f.govuk_collection_radio_buttons :tenant_gender, genders, :id, :name, legend: { text: "Which of these best describes the tenant's gender identity?", size: "l" } %> <%= f.govuk_collection_radio_buttons :tenant_gender, genders, :id, :name, legend: { text: "Which of these best describes the tenant's gender identity?", size: "l" } %>

16
spec/models/form_spec.rb

@ -14,4 +14,20 @@ RSpec.describe Form, type: :model do
expect(Form.first_question_for_subsection(subsection)).to eq("tenant_code") expect(Form.first_question_for_subsection(subsection)).to eq("tenant_code")
end end
end end
describe ".previous_question" do
context "given a question in the middle of a subsection" do
let(:current_question) { "tenant_age" }
it "returns the previous question given the current" do
expect(Form.previous_question(current_question)).to eq("tenant_code")
end
end
context "given the first question in a subsection" do
let(:current_question) { "tenant_code" }
it "returns empty string" do
expect(Form.previous_question(current_question)).to be_nil
end
end
end
end end

Loading…
Cancel
Save