@ukhomeoffice/cop-react-form-renderer 6.14.9 → 6.15.2-alpha

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.
Files changed (97) hide show
  1. package/dist/components/CollectionSummary/BannerStrip.scss +0 -4
  2. package/dist/components/FormPage/FormPage.js +10 -8
  3. package/dist/components/FormRenderer/FormRenderer.js +10 -5
  4. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-chained-component-show-whens-containerised.json +119 -0
  5. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-chained-component-show-whens-dependent-component-nested-block.json +112 -0
  6. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-chained-component-show-whens-dependent-component-nested.json +105 -0
  7. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-chained-component-show-whens-refdata.json +105 -0
  8. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-chained-component-show-whens-target-component-nested.json +98 -0
  9. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-chained-component-show-whens.json +105 -0
  10. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-chained-show-whens-page-hidden.json +112 -0
  11. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-cop-airpax.json +26407 -0
  12. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-cop-mandec.json +9404 -0
  13. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-collection-component-dependent-on-external-data.json +157 -0
  14. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-collection-component.json +85 -0
  15. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-component-referring-to-collection.json +172 -0
  16. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-component-referring-to-hidden-collection.json +201 -0
  17. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-component-with-nested-questions.json +111 -0
  18. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-component.json +57 -0
  19. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-containerised-component.json +96 -0
  20. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-embedded-collection-component.json +82 -0
  21. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-embedded-component.json +54 -0
  22. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-multilevel-containerised-component-leaf-hidden.json +105 -0
  23. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-multilevel-containerised-component.json +105 -0
  24. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-options.json +98 -0
  25. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-page-collection.json +127 -0
  26. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-page-component-used-elsewhere.json +108 -0
  27. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-page.json +95 -0
  28. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-nested-answers-hidden-by-option.json +111 -0
  29. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/cop-airpax-remove-photos-before.json +384 -0
  30. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/cop-mandec-remove-business-interests-before.json +140 -0
  31. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/cop-mandec-remove-criminality-before.json +186 -0
  32. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-chained-component-show-whens-containerised.json +11 -0
  33. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-chained-component-show-whens-dependent-component-nested-block.json +10 -0
  34. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-chained-component-show-whens-dependent-component-nested.json +9 -0
  35. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-chained-component-show-whens-refdata.json +11 -0
  36. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-chained-component-show-whens-target-component-nested.json +9 -0
  37. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-chained-component-show-whens.json +9 -0
  38. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-chained-show-whens-page-hidden.json +9 -0
  39. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-collection-component-dependent-on-external-data.json +26 -0
  40. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-collection-component.json +15 -0
  41. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-component-referring-to-collection.json +25 -0
  42. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-component-referring-to-hidden-collection.json +26 -0
  43. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-component-with-nested-questions.json +12 -0
  44. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-component.json +5 -0
  45. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-containerised-component.json +11 -0
  46. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-embedded-collection-component.json +15 -0
  47. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-embedded-component.json +5 -0
  48. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-multilevel-containerised-component-leaf-hidden.json +14 -0
  49. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-multilevel-containerised-component.json +14 -0
  50. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-options.json +10 -0
  51. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-page-collection.json +18 -0
  52. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-page-component-used-elsewhere.json +9 -0
  53. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-page.json +9 -0
  54. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-nested-answers-hidden-by-option.json +12 -0
  55. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/cop-airpax-remove-photos-after.json +355 -0
  56. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/cop-mandec-base-file.json +80 -0
  57. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/cop-mandec-remove-business-interests-after.json +122 -0
  58. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/cop-mandec-remove-criminality-after.json +86 -0
  59. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-chained-component-show-whens-containerised-removed.json +11 -0
  60. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-chained-component-show-whens-dependent-component-nested-block-removed.json +7 -0
  61. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-chained-component-show-whens-dependent-component-nested-removed.json +7 -0
  62. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-chained-component-show-whens-refdata-removed.json +7 -0
  63. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-chained-component-show-whens-removed.json +7 -0
  64. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-chained-component-show-whens-target-component-nested-removed.json +6 -0
  65. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-chained-show-whens-page-hidden-removed.json +6 -0
  66. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-collection-component-dependent-on-external-data-removed.json +23 -0
  67. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-collection-component-removed.json +4 -0
  68. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-component-referring-to-collection-removed.json +21 -0
  69. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-component-referring-to-hidden-collection-removed.json +6 -0
  70. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-component-removed.json +4 -0
  71. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-component-with-nested-questions-removed.json +10 -0
  72. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-containerised-component-removed.json +10 -0
  73. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-embedded-collection-component-removed.json +4 -0
  74. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-embedded-component-removed.json +4 -0
  75. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-multilevel-containerised-component-leaf-hidden-removed.json +13 -0
  76. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-multilevel-containerised-component-removed.json +10 -0
  77. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-options-removed.json +8 -0
  78. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-page-collection-removed.json +15 -0
  79. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-page-component-used-elsewhere-removed.json +5 -0
  80. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-page-removed.json +4 -0
  81. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-nested-answers-hidden-by-option-removed.json +11 -0
  82. package/dist/components/FormRenderer/helpers/clearOutUncompletedRoutes.js +346 -0
  83. package/dist/components/FormRenderer/helpers/clearOutUncompletedRoutes.test.js +298 -0
  84. package/dist/components/FormRenderer/helpers/deleteNodeByPath.js +26 -0
  85. package/dist/components/FormRenderer/helpers/deleteNodeByPath.test.js +56 -0
  86. package/dist/components/FormRenderer/helpers/index.js +3 -1
  87. package/dist/components/FormRenderer/onPageAction.js +7 -0
  88. package/dist/components/FormRenderer/onPageAction.test.js +5 -0
  89. package/dist/utils/CollectionPage/mergeCollectionPages.js +1 -0
  90. package/dist/utils/Component/getDefaultValueFromConfig.js +1 -2
  91. package/dist/utils/Condition/meetsCondition.js +12 -26
  92. package/dist/utils/Condition/meetsCondition.test.js +0 -21
  93. package/dist/utils/Data/getAutocompleteSource.js +51 -68
  94. package/dist/utils/Data/getAutocompleteSource.test.js +18 -31
  95. package/package.json +2 -2
  96. package/dist/utils/Validate/validateOnPageLoad.js +0 -23
  97. package/dist/utils/Validate/validateOnPageLoad.test.js +0 -88
@@ -7,80 +7,63 @@ exports.default = void 0;
7
7
  var _copReactComponents = require("@ukhomeoffice/cop-react-components");
8
8
  var _getOptions = _interopRequireDefault(require("./getOptions"));
9
9
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
- const MAX_NUMBER_RESULTS = 6000; // lower is better for performance, this still includes all ports
10
+ // Global Imports
11
+
12
+ // Local imports
11
13
 
12
- const assignFullMatchScore = (subStringMatchIndex, label) => {
13
- const matchAtBeginning = subStringMatchIndex === 0;
14
- let score = 0;
15
- if (matchAtBeginning) {
16
- score = 1;
17
- }
18
- if (!matchAtBeginning) {
19
- const isCompleteWord = label.substring(subStringMatchIndex - 1).startsWith(" ");
20
- score = isCompleteWord ? 2 : 3;
21
- }
22
- return score;
23
- };
24
- const noMatch = score => score === 0;
25
- const lowerCaseMatch = (searchTerm, query) => typeof searchTerm !== 'string' ? false : searchTerm.toLowerCase().includes(query);
26
- const assignSynonymsScore = (option, searchQuery) => {
27
- let score = 0;
28
- const isMatch = option.synonyms.some(synonym => lowerCaseMatch(synonym, searchQuery));
29
- if (isMatch) {
30
- score = 4;
31
- }
32
- return score;
33
- };
34
- const assignExtraFieldsScore = (config, option, searchQuery) => {
35
- let score = 0;
36
- const isMatch = config.item.extraFieldsToSearch.some(field => {
37
- const fieldToSearch = option[field];
38
- return lowerCaseMatch(fieldToSearch, searchQuery);
39
- });
40
- if (isMatch) {
41
- score = 5;
42
- }
43
- return score;
44
- };
45
- const mapToScoreAndLabel = (option, searchQuery, labelMapper, config) => {
46
- var _config$item;
47
- const label = labelMapper ? labelMapper(option).toLowerCase() : option.label.toLowerCase() || '';
48
- let score = 0;
49
- const subStringMatchIndex = label.indexOf(searchQuery);
50
- const isFullMatch = subStringMatchIndex !== -1;
51
- if (isFullMatch) {
52
- score = assignFullMatchScore(subStringMatchIndex, label);
53
- }
54
- if (noMatch(score) && option.synonyms) {
55
- score = assignSynonymsScore(option, searchQuery);
56
- }
57
- if (noMatch(score) && (_config$item = config.item) !== null && _config$item !== void 0 && _config$item.extraFieldsToSearch) {
58
- score = assignExtraFieldsScore(config, option, searchQuery);
59
- }
60
- return {
61
- score,
62
- label,
63
- option
64
- };
65
- };
66
- const scoreOptions = (searchQuery, labelMapper, config) => (scoredOptions, option) => {
67
- const scoredOption = mapToScoreAndLabel(option, searchQuery, labelMapper, config);
68
- if (scoredOption.score > 0) {
69
- scoredOptions.push(scoredOption);
70
- }
71
- return scoredOptions;
72
- };
73
- const compareByScoreAndLabel = (r1, r2) => (r1.score - r2.score) * 16 + r1.label.localeCompare(r2.label);
74
14
  const getAutocompleteSource = config => {
75
15
  let options = [];
76
16
  (0, _getOptions.default)(config, val => {
77
17
  options = val;
78
18
  });
79
- const labelMapper = config !== null && config !== void 0 && config.item ? _copReactComponents.Utils.itemLabel(config.item) : null;
80
- return (query, renderResult) => {
81
- const searchQuery = typeof query === 'string' ? query.toLowerCase() : '';
82
- const result = options.reduce(scoreOptions(searchQuery, labelMapper, config), []).sort(compareByScoreAndLabel).slice(0, MAX_NUMBER_RESULTS).map(scoredOptions => scoredOptions.option);
83
- renderResult(result);
19
+ const labelMaker = config !== null && config !== void 0 && config.item ? _copReactComponents.Utils.itemLabel(config.item) : null;
20
+ return (query, populateResults) => {
21
+ const lcQuery = query ? query.toLowerCase() : '';
22
+
23
+ // go through all options and give them a grade
24
+
25
+ const results = options.map(opt => {
26
+ const label = labelMaker ? labelMaker(opt) : opt.label || '';
27
+ const lcLabel = label.toLowerCase();
28
+
29
+ // result 'score'
30
+ let grade = 0;
31
+
32
+ // highest result - match at start of string
33
+ const index = lcLabel.indexOf(lcQuery);
34
+ if (index === 0) {
35
+ grade = 1;
36
+ } else if (index > 0) {
37
+ grade = lcLabel.substring(index - 1).startsWith(" ") ? 2 : 3;
38
+ } else {
39
+ var _config$item;
40
+ if (opt.synonyms) {
41
+ const match = opt.synonyms.some(synonym => synonym.toLowerCase().includes(lcQuery));
42
+ if (match) {
43
+ grade = 4;
44
+ }
45
+ }
46
+ if (!grade && (_config$item = config.item) !== null && _config$item !== void 0 && _config$item.extraFieldsToSearch) {
47
+ const found = config.item.extraFieldsToSearch.some(field => {
48
+ if (typeof opt[field] !== 'string') {
49
+ return false;
50
+ }
51
+ return opt[field].toLowerCase().includes(lcQuery);
52
+ });
53
+ if (found) grade = 5;
54
+ }
55
+ }
56
+ return {
57
+ grade,
58
+ label,
59
+ opt
60
+ };
61
+ }).filter(result => result.grade > 0);
62
+
63
+ // sort results and then map to just opts
64
+ populateResults(results
65
+ // the sort prioritises grade but also sorts by string value
66
+ .sort((r1, r2) => (r1.grade - r2.grade) * 16 + r1.label.localeCompare(r2.label)).map(r => r.opt));
84
67
  };
85
68
  };
86
69
  var _default = exports.default = getAutocompleteSource;
@@ -6,9 +6,10 @@ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbol
6
6
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
7
7
  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
8
8
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
9
- function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
9
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } // Local imports
10
10
  describe('utils', () => {
11
11
  describe('Data', () => {
12
+ // test data
12
13
  const gbCurrency = {
13
14
  currencyName: 'Great British Pounds',
14
15
  currencyCode: 'GBP',
@@ -24,7 +25,7 @@ describe('utils', () => {
24
25
  value: 'USD',
25
26
  label: 'USD',
26
27
  slangTerm: 'bucks',
27
- synonyms: ['greenbacks', 11]
28
+ synonyms: ['greenbacks']
28
29
  };
29
30
  const options = {
30
31
  alpha: {
@@ -80,15 +81,6 @@ describe('utils', () => {
80
81
  }]);
81
82
  });
82
83
  });
83
- it('should only return first 6000 results that have some type of match', () => {
84
- const moreThanMaxNumberOfOptions = Array(6001).fill(options.alpha);
85
- const config = {
86
- data: {
87
- options: moreThanMaxNumberOfOptions
88
- }
89
- };
90
- (0, _getAutocompleteSource.default)(config)(options.alpha.label, results => expect(results.length).toEqual(6000));
91
- });
92
84
  it('should handle an empty query', () => {
93
85
  const CONFIG = {
94
86
  data: {
@@ -125,18 +117,6 @@ describe('utils', () => {
125
117
  expect(results).toEqual([options.alpha, options.bravo]);
126
118
  });
127
119
  });
128
- it('should handle a non string query', () => {
129
- const CONFIG = {
130
- data: {
131
- options: [options.alpha, options.bravo]
132
- }
133
- };
134
- const SOURCE = (0, _getAutocompleteSource.default)(CONFIG);
135
- SOURCE(1, results => {
136
- expect(results.length).toEqual(2);
137
- expect(results).toEqual([options.alpha, options.bravo]);
138
- });
139
- });
140
120
  it('should handle a missing label on an option', () => {
141
121
  const CONFIG = {
142
122
  data: {
@@ -191,7 +171,8 @@ describe('utils', () => {
191
171
  item: {
192
172
  value: 'currencyCode',
193
173
  label: 'currencyCode',
194
- format: "${currencyName} (${currencyCode})"
174
+ // eslint-disable-next-line no-template-curly-in-string
175
+ format: '${currencyName} (${currencyCode})'
195
176
  },
196
177
  data: {
197
178
  options: testCurrencies
@@ -213,7 +194,8 @@ describe('utils', () => {
213
194
  item: {
214
195
  value: 'currencyCode',
215
196
  label: 'currencyCode',
216
- format: "${currencyName} (${currencyCode})"
197
+ // eslint-disable-next-line no-template-curly-in-string
198
+ format: '${currencyName} (${currencyCode})'
217
199
  },
218
200
  data: {
219
201
  options: testCurrencies
@@ -230,7 +212,8 @@ describe('utils', () => {
230
212
  item: {
231
213
  value: 'currencyCode',
232
214
  label: 'currencyCode',
233
- format: "${currencyName} (${currencyCode})"
215
+ // eslint-disable-next-line no-template-curly-in-string
216
+ format: '${currencyName} (${currencyCode})'
234
217
  },
235
218
  data: {
236
219
  options: testCurrencies
@@ -247,7 +230,8 @@ describe('utils', () => {
247
230
  item: {
248
231
  value: 'currencyCode',
249
232
  label: 'currencyCode',
250
- format: "${currencyName} (${currencyCode})"
233
+ // eslint-disable-next-line no-template-curly-in-string
234
+ format: '${currencyName} (${currencyCode})'
251
235
  },
252
236
  data: {
253
237
  options: testCurrencies
@@ -264,7 +248,8 @@ describe('utils', () => {
264
248
  item: {
265
249
  value: 'currencyCode',
266
250
  label: 'currencyCode',
267
- format: "${currencyName} (${currencyCode})"
251
+ // eslint-disable-next-line no-template-curly-in-string
252
+ format: '${currencyName} (${currencyCode})'
268
253
  },
269
254
  data: {
270
255
  options: [gbCurrency, {
@@ -296,7 +281,8 @@ describe('utils', () => {
296
281
  item: {
297
282
  value: 'currencyCode',
298
283
  label: 'currencyCode',
299
- format: "${currencyName} (${currencyCode})"
284
+ // eslint-disable-next-line no-template-curly-in-string
285
+ format: '${currencyName} (${currencyCode})'
300
286
  },
301
287
  data: {
302
288
  options: testCurrencies
@@ -314,8 +300,9 @@ describe('utils', () => {
314
300
  item: {
315
301
  value: 'currencyCode',
316
302
  label: 'currencyCode',
317
- format: "${currencyName} (${currencyCode})",
318
- extraFieldsToSearch: ['slangTerm', null]
303
+ // eslint-disable-next-line no-template-curly-in-string
304
+ format: '${currencyName} (${currencyCode})',
305
+ extraFieldsToSearch: ['slangTerm']
319
306
  },
320
307
  data: {
321
308
  options: testCurrencies
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ukhomeoffice/cop-react-form-renderer",
3
- "version": "6.14.9",
3
+ "version": "6.15.2-alpha",
4
4
  "private": false,
5
5
  "scripts": {
6
6
  "clean": "rimraf dist",
@@ -16,7 +16,7 @@
16
16
  "yalc-publish": "yarn compile-with-maps && cp -r src dist/src && yalc publish --push"
17
17
  },
18
18
  "dependencies": {
19
- "@ukhomeoffice/cop-react-components": "4.7.11",
19
+ "@ukhomeoffice/cop-react-components": "4.7.4",
20
20
  "axios": "^0.23.0",
21
21
  "dayjs": "^1.11.0",
22
22
  "govuk-frontend": "^5.0.0",
@@ -1,23 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.doValidateOnPageLoad = void 0;
7
- var _Condition = _interopRequireDefault(require("../Condition"));
8
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
- const doValidateOnPageLoad = page => {
10
- var _validation$runWhen, _validation$runWhen2;
11
- if (!(page !== null && page !== void 0 && page.customValidation)) return false;
12
-
13
- // Find the validation with `onLoad` set to true
14
- const validation = page === null || page === void 0 ? void 0 : page.customValidation.find(item => {
15
- var _item$runWhen;
16
- return ((_item$runWhen = item.runWhen) === null || _item$runWhen === void 0 ? void 0 : _item$runWhen.onLoad) === true;
17
- });
18
- if (!validation) return false;
19
-
20
- // Check if the constraint is met using the condition
21
- return (_validation$runWhen = validation.runWhen) !== null && _validation$runWhen !== void 0 && _validation$runWhen.constraint ? _Condition.default.meetsOne((_validation$runWhen2 = validation.runWhen) === null || _validation$runWhen2 === void 0 ? void 0 : _validation$runWhen2.constraint, page.formData) : false;
22
- };
23
- exports.doValidateOnPageLoad = doValidateOnPageLoad;
@@ -1,88 +0,0 @@
1
- "use strict";
2
-
3
- var _Condition = _interopRequireDefault(require("../Condition"));
4
- var _validateOnPageLoad = require("./validateOnPageLoad");
5
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
6
- describe('doValidateOnPageLoad', () => {
7
- const formData = {
8
- people: [{
9
- name: 'John Doe'
10
- }, {
11
- name: 'Jane Doe'
12
- }]
13
- };
14
- it('should return false if page.customValidation is not defined', () => {
15
- const page = {
16
- formData
17
- };
18
- const result = (0, _validateOnPageLoad.doValidateOnPageLoad)(page);
19
- expect(result).toBe(false);
20
- });
21
- it('should return false if no validation item has onLoad set to true', () => {
22
- const page = {
23
- customValidation: [{
24
- message: "Validation without onLoad",
25
- runWhen: {
26
- onLoad: false
27
- }
28
- }],
29
- formData
30
- };
31
- const result = (0, _validateOnPageLoad.doValidateOnPageLoad)(page);
32
- expect(result).toBe(false);
33
- });
34
- it('should return false if validation constraint is not met', () => {
35
- const page = {
36
- customValidation: [{
37
- message: "Update all people details before continuing",
38
- runWhen: {
39
- onLoad: true,
40
- constraint: [{
41
- field: 'people',
42
- op: _Condition.default.GREATER_THAN,
43
- value: 3 // Condition that will fail
44
- }]
45
- }
46
- }],
47
- formData
48
- };
49
- jest.spyOn(_Condition.default, 'meetsOne').mockImplementation(() => false);
50
- const result = (0, _validateOnPageLoad.doValidateOnPageLoad)(page);
51
- expect(result).toBe(false);
52
- expect(_Condition.default.meetsOne).toHaveBeenCalledWith(page.customValidation[0].runWhen.constraint, formData);
53
- });
54
- it('should return true if validation constraint is met', () => {
55
- const page = {
56
- customValidation: [{
57
- message: "Update all people details before continuing",
58
- runWhen: {
59
- onLoad: true,
60
- constraint: [{
61
- field: 'people',
62
- op: _Condition.default.GREATER_THAN,
63
- value: 0 // Condition that will pass
64
- }]
65
- }
66
- }],
67
- formData
68
- };
69
- jest.spyOn(_Condition.default, 'meetsOne').mockImplementation(() => true);
70
- const result = (0, _validateOnPageLoad.doValidateOnPageLoad)(page);
71
- expect(result).toBe(true);
72
- expect(_Condition.default.meetsOne).toHaveBeenCalledWith(page.customValidation[0].runWhen.constraint, formData);
73
- });
74
- it('should return false if no matching validation is found', () => {
75
- const page = {
76
- customValidation: [{
77
- message: "Validation without constraint",
78
- runWhen: {
79
- onLoad: true,
80
- constraint: null
81
- }
82
- }],
83
- formData
84
- };
85
- const result = (0, _validateOnPageLoad.doValidateOnPageLoad)(page);
86
- expect(result).toBe(false);
87
- });
88
- });