Browse Source

feat: add check answers page behaviour

pull/1515/head
natdeanlewissoftwire 3 years ago
parent
commit
0d91c28bf9
  1. 2
      app/controllers/form_controller.rb
  2. 27
      app/models/form.rb
  3. 4
      app/views/form/page.html.erb

2
app/controllers/form_controller.rb

@ -126,7 +126,7 @@ private
page_index = page_ids.index(@page.id)
next_page_id = form.next_page(@page, @log, current_user)
next_page = form.get_page(next_page_id)
previous_page = form.previous_page(page_ids, page_index, @log, current_user)
previous_page = form.previous_page(@page, @log, current_user)
if next_page&.interruption_screen? || next_page_id == previous_page
return send("#{@log.class.name.underscore}_#{next_page_id}_path", @log, { referrer: "check_answers" })

27
app/models/form.rb

@ -67,7 +67,7 @@ class Form
page_ids = subsection_for_page(page).pages.map(&:id)
page_index = page_ids.index(page.id)
page_id = if page.interruption_screen? && log[page.questions[0].id] == 1 && page.routed_to?(log, current_user)
previous_page(page_ids, page_index, log, current_user)
previous_page(page, log, current_user)
else
page_ids[page_index + 1]
end
@ -88,10 +88,24 @@ class Form
end
end
def previous_page_redirect_path(page, log, current_user)
def previous_page(page, log, current_user)
page_ids = subsection_for_page(page).pages.map(&:id)
page_index = page_ids.index(page.id)
previous_page = previous_page(page_ids, page_index, log, current_user)
page_id = if page_index == 0
:check_answers
else
page_ids[page_index - 1]
end
prvs_page = get_page(page_id)
return :check_answers if prvs_page.nil?
return prvs_page.id if prvs_page.routed_to?(log, current_user)
previous_page(prvs_page, log, current_user)
end
def previous_page_redirect_path(page, log, current_user)
previous_page = previous_page(page, log, current_user)
if previous_page == :check_answers
"#{type}_log_#{subsection_for_page(page).id}_check_answers_path"
else
@ -217,13 +231,6 @@ class Form
questions.select { |q| q.type == "numeric" }
end
def previous_page(page_ids, page_index, log, current_user)
prev_page = get_page(page_ids[page_index - 1])
return prev_page.id if prev_page.routed_to?(log, current_user)
previous_page(page_ids, page_index - 1, log, current_user)
end
def send_chain(arr, log)
Array(arr).inject(log) { |o, a| o.public_send(*a) }
end

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

@ -1,7 +1,11 @@
<% content_for :title, @page.header.presence || @page.questions.first.header.html_safe %>
<% content_for :before_content do %>
<% if url_for(:back).include?("check_answers") %>
<%= govuk_back_link(href: :back) %>
<% else %>
<%= govuk_back_link(href: send(@log.form.previous_page_redirect_path(@page, @log, current_user), @log)) %>
<% end %>
<% end %>
<div data-controller="govukfrontend"></div>

Loading…
Cancel
Save