metadata_presenter 2.3.5 → 2.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d4a7ee0a63e0eb10aacb69c6ac94739447bd229e07951bccd4e09ddd957a2806
4
- data.tar.gz: f305308dc5bbaf9b16fcc272df5804e7d505fa50e1dcebc59bfaa653172b10f0
3
+ metadata.gz: c3e99fe731812a98c2a9d2f6cefcade21ccd233f24118cd23440aa4d726b49c1
4
+ data.tar.gz: 98496d517a2cdbf8da121d9d15469c9f017065921ca81b8133d895cec9bc9cff
5
5
  SHA512:
6
- metadata.gz: 185722bfd36b6ccccbaafee26fa0ce0763224f8178a57bda1f14a34f6eb34b6607a6a63540ef10744e80bf98dc9dddb5a3992e81e2d6647622d5382dded1ecd8
7
- data.tar.gz: 9f42f91ad922fe126a02ecdb744bd32e9f086cfe559f590bf4247df1a4290aff007504a22530c60cffffd1e3f61f296dbfa1c0a6fab2dac3b5d0debf2499afbe
6
+ metadata.gz: f3735753a806e4b199b6420ed46469a06a856fa2140a3c893f91e187a8ae2a8068f5d54118ddefddabfd72db15ca04b9d532e9eb63019aa5d5611497ce322aee
7
+ data.tar.gz: 5322246015561fc511b8fb1dc2072fec440df0fce1ca34555a3893b6a43b281b59d896a0941e3d69ea0f0114ea90408fc702b2bcd7a8080ade9934dc09bdd3ad
@@ -3,6 +3,7 @@ module MetadataPresenter
3
3
  before_action :check_page_exists
4
4
 
5
5
  def create
6
+ @previous_answers = reload_user_data.deep_dup
6
7
  @page_answers = PageAnswers.new(page, answers_params)
7
8
 
8
9
  upload_files if upload?
@@ -28,8 +29,9 @@ module MetadataPresenter
28
29
  next_page = NextPage.new(
29
30
  service: service,
30
31
  session: session,
31
- user_data: load_user_data,
32
- current_page_url: page_url
32
+ user_data: reload_user_data,
33
+ current_page_url: page_url,
34
+ previous_answers: @previous_answers
33
35
  ).find
34
36
 
35
37
  if next_page.present?
@@ -5,6 +5,14 @@ module MetadataPresenter
5
5
  helper MetadataPresenter::ApplicationHelper
6
6
  default_form_builder GOVUKDesignSystemFormBuilder::FormBuilder
7
7
 
8
+ def reload_user_data
9
+ if defined? super
10
+ super
11
+ else
12
+ load_user_data
13
+ end
14
+ end
15
+
8
16
  def back_link
9
17
  previous_page = PreviousPage.new(
10
18
  service: service,
@@ -16,6 +16,10 @@ module MetadataPresenter
16
16
  metadata['next']['default']
17
17
  end
18
18
 
19
+ def all_destination_uuids
20
+ conditionals.map(&:next).append(default_next)
21
+ end
22
+
19
23
  def conditionals
20
24
  Array(metadata['next']['conditionals']).map do |conditional_metadata|
21
25
  Conditional.new(conditional_metadata)
@@ -1,7 +1,7 @@
1
1
  module MetadataPresenter
2
2
  class NextPage
3
3
  include ActiveModel::Model
4
- attr_accessor :service, :session, :user_data, :current_page_url
4
+ attr_accessor :service, :session, :user_data, :current_page_url, :previous_answers
5
5
 
6
6
  def find
7
7
  return check_answers_page if return_to_check_your_answer?
@@ -11,17 +11,53 @@ module MetadataPresenter
11
11
  else
12
12
  service.find_page_by_uuid(current_page_flow.default_next)
13
13
  end
14
+ ensure
15
+ session[:return_to_check_your_answer] = nil
14
16
  end
15
17
 
16
18
  private
17
19
 
18
20
  def check_answers_page
19
- session[:return_to_check_your_answer] = nil
20
21
  service.pages.find { |page| page.type == 'page.checkanswers' }
21
22
  end
22
23
 
23
24
  def return_to_check_your_answer?
24
- session[:return_to_check_your_answer].present?
25
+ session[:return_to_check_your_answer].present? &&
26
+ components_not_used_for_branching_and_answers_unchanged?
27
+ end
28
+
29
+ def components_not_used_for_branching_and_answers_unchanged?
30
+ components_not_used_for_branching? && answers_unchanged?
31
+ end
32
+
33
+ def components_not_used_for_branching?
34
+ expressions.none? { |expression| component_ids.include?(expression) }
35
+ end
36
+
37
+ def answers_unchanged?
38
+ components = current_page_components.select do |component|
39
+ component.uuid.in?(expressions.map(&:component))
40
+ end
41
+
42
+ components.all? do |component|
43
+ user_data[component.id] == previous_answers[component.id]
44
+ end
45
+ end
46
+
47
+ def component_ids
48
+ current_page_components.map(&:id)
49
+ end
50
+
51
+ def current_page_components
52
+ current_page.components
53
+ end
54
+
55
+ def expressions
56
+ collection = service.branches.map do |branch|
57
+ branch.conditionals.map(&:expressions)
58
+ end
59
+
60
+ collection.flatten
25
61
  end
26
62
 
27
63
  def conditionals?
@@ -13,6 +13,12 @@ module MetadataPresenter
13
13
  add_extra_component
14
14
  ].freeze
15
15
  QUESTION_PAGES = %w[page.singlequestion page.multiplequestions].freeze
16
+ USES_HEADING = %w[
17
+ page.content
18
+ page.checkanswers
19
+ page.confirmation
20
+ page.multiplequestions
21
+ ].freeze
16
22
 
17
23
  def editable_attributes
18
24
  to_h.reject { |k, _| k.in?(NOT_EDITABLE) }
@@ -87,8 +93,7 @@ module MetadataPresenter
87
93
  private
88
94
 
89
95
  def heading?
90
- Array(components).size != 1 ||
91
- type.in?(['page.content', 'page.checkanswers', 'page.confirmation'])
96
+ type.in?(USES_HEADING) || Array(components).size != 1
92
97
  end
93
98
 
94
99
  def to_components(node_components, collection:)
@@ -17,7 +17,8 @@
17
17
  <% if @page.before_you_start %>
18
18
  <div class="fb-editable"
19
19
  data-fb-content-id="page[before_you_start]"
20
- data-fb-content-type="content">
20
+ data-fb-content-type="content"
21
+ data-fb-default-text="<%= default_text('before_you_start') %>">
21
22
  <%= to_html(@page.before_you_start) %>
22
23
  </div>
23
24
  <%- end %>
@@ -6,5 +6,6 @@
6
6
  "hint": "[Optional hint text]",
7
7
  "option": "Option",
8
8
  "option_hint": "[Optional hint text]",
9
- "upload_hint": "Maximum file size is 7MB"
9
+ "upload_hint": "Maximum file size is 7MB",
10
+ "before_you_start": "[Optional content]"
10
11
  }