metadata_presenter 2.17.9 → 2.17.12

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: 7f753356995076aa70b70538d34770ce68b03aa2fe866208cac8cd5b4ad861e9
4
- data.tar.gz: 7ed63dece8665708989288145f64518c5a7c925c3c8e5ec55f5bc44487728b97
3
+ metadata.gz: 83d44483b1324f5bd4feb59767282ae2356c985bfd7afc50be63335dd1c57dbe
4
+ data.tar.gz: 64dd7c4d4cd9c2815e1fada71c2780f60203b2530b305b0edd82a85833cf5f0b
5
5
  SHA512:
6
- metadata.gz: 0f8629f5c3a5cb9e4be7ac9fc7abf2868f45a7e44f10249fdcc8d47e7ee9ceb848c6e3cafa9683f02137fcddd78391e521f19a6a8e2f55dea5218f46da60d003
7
- data.tar.gz: ad83b314cdaa5eb1d2f2babcbe2be7d358305fed7b474f194a73fb1c41829e4e578e4c8bdf8cd7ebcd8ca5d040372943aaa94ef76b8b673b6f3458a36216aadc
6
+ metadata.gz: 6da916e33426cfbd2868b09aa0a92c16a78fbee45cf33016a24844686dfc82a8dc076c80538c2e5ab723e9448fd5a0a1802e06bea94abfe311922a046c94d190
7
+ data.tar.gz: 5af616852e99ec845cf63daf3eb630f9a6b6e83229f58a763df29f787fc0e940e8b7fd7f928a048687324469c7abbe78e611bca513936de80cf3a2838d2b7d64
data/README.md CHANGED
@@ -49,6 +49,7 @@ that you need to write the following methods in your controller:
49
49
  2. load_user_data
50
50
  3. editable?
51
51
  4. create_submission
52
+ 5. assign_autocomplete_items
52
53
 
53
54
  The user answers can be accessed via `params[:answers]`.
54
55
 
@@ -80,6 +81,8 @@ mountable app:
80
81
  The `create_submission` is related to process the submission in a backend
81
82
  service.
82
83
 
84
+ The `autocomplete_items` takes the components on a page and retrieves any items for them that may exist. For the Editor it will make an API call, for the Runner it will look it up via an environment variable.
85
+
83
86
  ## Generate documentation
84
87
 
85
88
  Run `rake doc` and open the doc/index.html
@@ -46,7 +46,7 @@ module MetadataPresenter
46
46
  helper_method :allow_analytics?
47
47
 
48
48
  def show_cookie_banner?
49
- no_analytics_cookie?
49
+ (Rails.application.config.respond_to?(:global_ga4) || analytics_tags_present?) && no_analytics_cookie?
50
50
  end
51
51
  helper_method :show_cookie_banner?
52
52
 
@@ -5,6 +5,11 @@ 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
12
+
8
13
  @page_answers = PageAnswers.new(@page, @user_data)
9
14
  render template: @page.template
10
15
  else
@@ -0,0 +1,9 @@
1
+ class MetadataPresenter::AutocompleteItem < MetadataPresenter::Metadata
2
+ def id
3
+ { text: text, value: value }.to_json
4
+ end
5
+
6
+ def name
7
+ text
8
+ end
9
+ end
@@ -10,6 +10,17 @@ class MetadataPresenter::Component < MetadataPresenter::Metadata
10
10
  # Threshold percentage at which the remaining count is shown
11
11
  VALIDATION_STRING_LENGTH_THRESHOLD = 75
12
12
 
13
+ # Overriding here because autocomplete component's items property is non interactable
14
+ # in the Editor therefore it does not need to exist in the data-fb-content-data
15
+ # attribute on the page. The data-fb-content-data attribute is what is used to
16
+ # update user interactable elements such as the component question or page section
17
+ # heading etc.
18
+ def to_json(*_args)
19
+ return super unless autocomplete?
20
+
21
+ JSON.parse(super).to_json(except: 'items')
22
+ end
23
+
13
24
  def to_partial_path
14
25
  "metadata_presenter/component/#{type}"
15
26
  end
@@ -20,16 +31,24 @@ class MetadataPresenter::Component < MetadataPresenter::Metadata
20
31
 
21
32
  def items
22
33
  Array(metadata.items).map do |item|
23
- MetadataPresenter::Item.new(item, editor: editor?)
34
+ item_klass.new(item, editor: editor?)
24
35
  end
25
36
  end
26
37
 
38
+ def item_klass
39
+ autocomplete? ? MetadataPresenter::AutocompleteItem : MetadataPresenter::Item
40
+ end
41
+
27
42
  SUPPORTS_BRANCHING = %w[radios checkboxes].freeze
28
43
 
29
44
  def supports_branching?
30
45
  type.in?(SUPPORTS_BRANCHING)
31
46
  end
32
47
 
48
+ def autocomplete?
49
+ type == 'autocomplete'
50
+ end
51
+
33
52
  def content?
34
53
  type == 'content'
35
54
  end
@@ -39,7 +39,8 @@ module MetadataPresenter
39
39
  end
40
40
 
41
41
  def components
42
- to_components(metadata.components, collection: :components)
42
+ @components ||=
43
+ to_components(metadata.components, collection: :components)
43
44
  end
44
45
 
45
46
  def extra_components
@@ -104,6 +105,17 @@ module MetadataPresenter
104
105
  type == 'page.multiplequestions'
105
106
  end
106
107
 
108
+ def autocomplete_component_present?
109
+ components.any?(&:autocomplete?)
110
+ end
111
+
112
+ def assign_autocomplete_items(items)
113
+ component_uuids = items.keys
114
+ components.each do |component|
115
+ component.items = items[component.uuid] if component.uuid.in?(component_uuids)
116
+ end
117
+ end
118
+
107
119
  private
108
120
 
109
121
  def heading?
@@ -111,7 +123,7 @@ module MetadataPresenter
111
123
  end
112
124
 
113
125
  def to_components(node_components, collection:)
114
- node_components&.map do |component|
126
+ Array(node_components).map do |component|
115
127
  MetadataPresenter::Component.new(
116
128
  component.merge(collection: collection),
117
129
  editor: editor?
@@ -83,5 +83,9 @@ module MetadataPresenter
83
83
  def upload(file_hash)
84
84
  file_hash['original_filename']
85
85
  end
86
+
87
+ def autocomplete(value)
88
+ JSON.parse(value)['text']
89
+ end
86
90
  end
87
91
  end
@@ -21,7 +21,7 @@ Rails.application.config.supported_components =
21
21
  content: %w(content)
22
22
  },
23
23
  singlequestion: {
24
- input: %w(text textarea number date radios checkboxes email upload),
24
+ input: %w(text textarea number date radios checkboxes email upload autocomplete),
25
25
  content: %w()
26
26
  }
27
27
  })
@@ -0,0 +1,7 @@
1
+ {
2
+ "4dc23b9c-9757-4526-813d-b43efbe07dad": [
3
+ { "text": "Afghanistan", "value": "AF"},
4
+ { "text": "Albania", "value": "AL"},
5
+ { "text": "Australia", "value": "AU"}
6
+ ]
7
+ }
@@ -69,6 +69,12 @@
69
69
  }
70
70
  },
71
71
  "2ef7d11e-0307-49e9-9fe2-345dc528dd66": {
72
+ "_type": "flow.page",
73
+ "next": {
74
+ "default": "c7755991-436b-4495-afa6-803db58cefbc"
75
+ }
76
+ },
77
+ "c7755991-436b-4495-afa6-803db58cefbc": {
72
78
  "_type": "flow.page",
73
79
  "next": {
74
80
  "default": "e337070b-f636-49a3-a65c-f506675265f0"
@@ -568,6 +574,33 @@
568
574
  }
569
575
  ]
570
576
  },
577
+ {
578
+ "_id": "page.countries",
579
+ "url": "countries",
580
+ "body": "Body section",
581
+ "lede": "",
582
+ "_type": "page.singlequestion",
583
+ "_uuid": "c7755991-436b-4495-afa6-803db58cefbc",
584
+ "heading": "",
585
+ "components": [
586
+ {
587
+ "_id": "countries_autocomplete_1",
588
+ "hint": "",
589
+ "name": "countries_autocomplete_1",
590
+ "_type": "autocomplete",
591
+ "_uuid": "4dc23b9c-9757-4526-813d-b43efbe07dad",
592
+ "items": [
593
+ ],
594
+ "errors": {
595
+ },
596
+ "legend": "Countries",
597
+ "validation": {
598
+ "required": true
599
+ }
600
+ }
601
+ ],
602
+ "section_heading": ""
603
+ },
571
604
  {
572
605
  "_id": "page.check-answers",
573
606
  "url": "check-answers",
@@ -1,3 +1,3 @@
1
1
  module MetadataPresenter
2
- VERSION = '2.17.9'.freeze
2
+ VERSION = '2.17.12'.freeze
3
3
  end
@@ -4,14 +4,12 @@
4
4
  "title": "Autocomplete",
5
5
  "description": "Let users select one option from an auto-completing list",
6
6
  "type": "object",
7
- "allOf": [
8
- {
9
- "$ref": "definition.select"
10
- }
11
- ],
12
7
  "properties": {
13
8
  "_type": {
14
9
  "const": "autocomplete"
10
+ },
11
+ "items": {
12
+ "$ref": "definition.select"
15
13
  }
16
14
  }
17
15
  }
@@ -2,15 +2,9 @@
2
2
  "$id": "http://gov.uk/schema/v1.0.0/definition/select",
3
3
  "_name": "definition.select",
4
4
  "title": "Select component definition",
5
- "properties": {
6
- "items": {
7
- "title": "Items",
8
- "description": "Items that users can select",
9
- "type": "array",
10
- "items": {
11
- "$ref": "definition.select_item"
12
- }
13
- }
5
+ "type": "array",
6
+ "items": {
7
+ "$ref": "definition.select_item"
14
8
  },
15
9
  "required": [
16
10
  "items"
@@ -17,12 +17,8 @@
17
17
  "type": "string"
18
18
  }
19
19
  },
20
- "allOf": [
21
- {
22
- "$ref": "definition.component"
23
- }
24
- ],
25
20
  "required": [
21
+ "text",
26
22
  "value"
27
23
  ],
28
24
  "category": [
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.9
4
+ version: 2.17.12
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-19 00:00:00.000000000 Z
11
+ date: 2022-07-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: govuk_design_system_formbuilder
@@ -262,6 +262,7 @@ files:
262
262
  - app/helpers/metadata_presenter/application_helper.rb
263
263
  - app/helpers/metadata_presenter/default_text.rb
264
264
  - app/jobs/metadata_presenter/application_job.rb
265
+ - app/models/metadata_presenter/autocomplete_item.rb
265
266
  - app/models/metadata_presenter/branch_destinations.rb
266
267
  - app/models/metadata_presenter/column_number.rb
267
268
  - app/models/metadata_presenter/component.rb
@@ -434,6 +435,7 @@ files:
434
435
  - fixtures/branching_8.png
435
436
  - fixtures/branching_9.json
436
437
  - fixtures/branching_9.png
438
+ - fixtures/countries.json
437
439
  - fixtures/exit_only_service.json
438
440
  - fixtures/invalid_content_page.json
439
441
  - fixtures/no_component_page.json