metadata_presenter 2.17.12 → 2.17.15

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: 83d44483b1324f5bd4feb59767282ae2356c985bfd7afc50be63335dd1c57dbe
4
- data.tar.gz: 64dd7c4d4cd9c2815e1fada71c2780f60203b2530b305b0edd82a85833cf5f0b
3
+ metadata.gz: 554d66ee3145149186a1ba14c1314e491d8288f7089dc4f471aad6e49fd010f7
4
+ data.tar.gz: a43937e88311ebe4885cc3465182c11e9322691f70c9f7dfe495f4b5bfae2d21
5
5
  SHA512:
6
- metadata.gz: 6da916e33426cfbd2868b09aa0a92c16a78fbee45cf33016a24844686dfc82a8dc076c80538c2e5ab723e9448fd5a0a1802e06bea94abfe311922a046c94d190
7
- data.tar.gz: 5af616852e99ec845cf63daf3eb630f9a6b6e83229f58a763df29f787fc0e940e8b7fd7f928a048687324469c7abbe78e611bca513936de80cf3a2838d2b7d64
6
+ metadata.gz: c2d04eec97e8cb4370fc0ff93340c7690fef5531de833cc2b258cdaa45c0d65ad0d9119fe1dd791e67f4f07a778ed287a0703716d3a94a42ea3d4614b47beb4b
7
+ data.tar.gz: 5754628254e35783c0b1a898abbbbef6e2c4c89e0a5ef1da07428bce4c73cf8d536a97dac578aff3e2a999960317cfce0f303f0a8a4f8906da68bca09d09ee9c
@@ -4,7 +4,7 @@ module MetadataPresenter
4
4
 
5
5
  def create
6
6
  @previous_answers = reload_user_data.deep_dup
7
- @page_answers = PageAnswers.new(page, answers_params)
7
+ @page_answers = PageAnswers.new(page, answers_params, autocomplete_items(page.components))
8
8
 
9
9
  upload_files if upload?
10
10
 
@@ -43,6 +43,8 @@ module MetadataPresenter
43
43
 
44
44
  def render_validation_error
45
45
  @user_data = answers_params
46
+ load_autocomplete_items
47
+
46
48
  render template: page.template, status: :unprocessable_entity
47
49
  end
48
50
 
@@ -57,6 +57,13 @@ module MetadataPresenter
57
57
  end
58
58
  helper_method :analytics_tags_present?
59
59
 
60
+ def load_autocomplete_items
61
+ if @page.autocomplete_component_present?
62
+ items = autocomplete_items(@page.components)
63
+ @page.assign_autocomplete_items(items)
64
+ end
65
+ end
66
+
60
67
  private
61
68
 
62
69
  def not_found
@@ -5,10 +5,7 @@ module MetadataPresenter
5
5
  @page ||= service.find_page_by_url(request.env['PATH_INFO'])
6
6
 
7
7
  if @page
8
- if @page.autocomplete_component_present?
9
- items = autocomplete_items(@page.components)
10
- @page.assign_autocomplete_items(items)
11
- end
8
+ load_autocomplete_items
12
9
 
13
10
  @page_answers = PageAnswers.new(@page, @user_data)
14
11
  render template: @page.template
@@ -3,16 +3,17 @@ module MetadataPresenter
3
3
  include ActiveModel::Model
4
4
  include ActiveModel::Validations
5
5
  include ActionView::Helpers
6
- attr_reader :page, :answers, :uploaded_files
6
+ attr_reader :page, :answers, :uploaded_files, :autocomplete_items
7
7
 
8
- def initialize(page, answers)
8
+ def initialize(page, answers, autocomplete_items = nil)
9
9
  @page = page
10
10
  @answers = answers
11
+ @autocomplete_items = autocomplete_items
11
12
  @uploaded_files = []
12
13
  end
13
14
 
14
15
  def validate_answers
15
- ValidateAnswers.new(self, components: components).valid?
16
+ ValidateAnswers.new(self, components: components, autocomplete_items: autocomplete_items).valid?
16
17
  end
17
18
 
18
19
  delegate :components, to: :page
@@ -0,0 +1,21 @@
1
+ module MetadataPresenter
2
+ class AutocompleteValidator < BaseValidator
3
+ attr_reader :autocomplete_items
4
+
5
+ def initialize(page_answers:, component:, autocomplete_items:)
6
+ super(page_answers: page_answers, component: component)
7
+
8
+ @autocomplete_items = autocomplete_items
9
+ end
10
+
11
+ def invalid_answer?
12
+ return if autocomplete_item_list.blank?
13
+
14
+ autocomplete_item_list.exclude?(JSON.parse(user_answer))
15
+ end
16
+
17
+ def autocomplete_item_list
18
+ @autocomplete_item_list ||= autocomplete_items[component.uuid]
19
+ end
20
+ end
21
+ end
@@ -1,10 +1,11 @@
1
1
  module MetadataPresenter
2
2
  class ValidateAnswers
3
- attr_reader :page_answers, :components
3
+ attr_reader :page_answers, :components, :autocomplete_items
4
4
 
5
- def initialize(page_answers, components:)
5
+ def initialize(page_answers, components:, autocomplete_items:)
6
6
  @page_answers = page_answers
7
7
  @components = Array(components)
8
+ @autocomplete_items = autocomplete_items
8
9
  end
9
10
 
10
11
  def valid?
@@ -21,8 +22,10 @@ module MetadataPresenter
21
22
  components.map { |component|
22
23
  component_validations(component).map do |key|
23
24
  "MetadataPresenter::#{key.classify}Validator".constantize.new(
24
- page_answers: page_answers,
25
- component: component
25
+ {
26
+ component: component,
27
+ page_answers: page_answers
28
+ }.merge(autocomplete_param(key))
26
29
  )
27
30
  end
28
31
  }.compact.flatten
@@ -33,5 +36,9 @@ module MetadataPresenter
33
36
 
34
37
  component.validation.select { |_, value| value.present? }.keys
35
38
  end
39
+
40
+ def autocomplete_param(key)
41
+ key == 'autocomplete' ? { autocomplete_items: autocomplete_items } : {}
42
+ end
36
43
  end
37
44
  end
@@ -14,8 +14,8 @@
14
14
  <link rel="apple-touch-icon" sizes="152x152" href="<%= asset_pack_url('media/images/govuk-apple-touch-icon-152x152.png') %>">
15
15
  <link rel="apple-touch-icon" href="<%= asset_pack_url('media/images/govuk-apple-touch-icon.png') %>">
16
16
 
17
- <%= stylesheet_pack_tag 'govuk' %>
18
- <%= stylesheet_link_tag 'application', media: 'all' %>
17
+ <%= javascript_pack_tag 'runner_application', 'govuk', defer: true %>
18
+ <%= stylesheet_pack_tag 'govuk', 'runner_application', media: 'all' %>
19
19
 
20
20
  <% if allow_analytics? %>
21
21
  <%= render template: 'metadata_presenter/analytics/analytics' %>
@@ -30,15 +30,12 @@
30
30
  <%= render template: 'metadata_presenter/header/show' %>
31
31
  <div class="govuk-width-container govuk-body-m">
32
32
  <main class="govuk-main-wrapper govuk-main-wrapper--auto-spacing" id="main-content" role="main">
33
- <% if back_link.present? %>
34
- <a class="govuk-back-link" href="<%= back_link %>">Back</a>
35
- <% end %>
36
-
33
+ <% if back_link.present? %>
34
+ <a class="govuk-back-link" href="<%= back_link %>">Back</a>
35
+ <% end %>
37
36
  <%= yield %>
38
37
  </main>
39
38
  </div>
40
39
  <%= render template: 'metadata_presenter/footer/footer' %>
41
- <%= javascript_pack_tag 'runner_application' %>
42
- <%= javascript_pack_tag 'govuk' %>
43
40
  </body>
44
41
  </html>
@@ -3,14 +3,19 @@
3
3
  component.items,
4
4
  :id,
5
5
  :name,
6
+ selected: component.value,
6
7
  label: { text: input_title },
7
8
  hint: {
8
9
  data: { "fb-default-text" => default_text('hint') },
9
10
  text: component.hint
10
11
  },
11
- class: "govuk-!-width-two-thirds"
12
+ class: "govuk-!-width-two-thirds fb-autocomplete",
13
+ options: {
14
+ include_blank: true
15
+ }
12
16
  %>
13
17
 
14
18
  <% if editable? %>
15
19
  <%= render partial: '/partials/editable_autocomplete', locals: { component: component } %>
16
20
  <% end %>
21
+
@@ -7,6 +7,7 @@
7
7
  "name": "component-name",
8
8
  "legend": "Question",
9
9
  "validation": {
10
- "required": true
10
+ "required": true,
11
+ "autocomplete": true
11
12
  }
12
13
  }
@@ -0,0 +1,6 @@
1
+ {
2
+ "_id": "error.autocomplete",
3
+ "_type": "string.error",
4
+ "description": "Autocomplete item is not on the list",
5
+ "value": "Select an option from the list"
6
+ }
@@ -595,7 +595,8 @@
595
595
  },
596
596
  "legend": "Countries",
597
597
  "validation": {
598
- "required": true
598
+ "required": true,
599
+ "autocomplete": true
599
600
  }
600
601
  }
601
602
  ],
@@ -1,3 +1,3 @@
1
1
  module MetadataPresenter
2
- VERSION = '2.17.12'.freeze
2
+ VERSION = '2.17.15'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: metadata_presenter
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.17.12
4
+ version: 2.17.15
5
5
  platform: ruby
6
6
  authors:
7
7
  - MoJ Forms
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-07-29 00:00:00.000000000 Z
11
+ date: 2022-08-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: govuk_design_system_formbuilder
@@ -299,6 +299,7 @@ files:
299
299
  - app/operators/metadata_presenter/operator.rb
300
300
  - app/presenters/metadata_presenter/page_answers_presenter.rb
301
301
  - app/validators/metadata_presenter/accept_validator.rb
302
+ - app/validators/metadata_presenter/autocomplete_validator.rb
302
303
  - app/validators/metadata_presenter/base_validator.rb
303
304
  - app/validators/metadata_presenter/date_after_validator.rb
304
305
  - app/validators/metadata_presenter/date_before_validator.rb
@@ -390,6 +391,7 @@ files:
390
391
  - default_metadata/page/start.json
391
392
  - default_metadata/service/base.json
392
393
  - default_metadata/string/error.accept.json
394
+ - default_metadata/string/error.autocomplete.json
393
395
  - default_metadata/string/error.date.json
394
396
  - default_metadata/string/error.date_after.json
395
397
  - default_metadata/string/error.date_before.json