@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.
- package/dist/components/CollectionSummary/BannerStrip.scss +0 -4
- package/dist/components/FormPage/FormPage.js +10 -8
- package/dist/components/FormRenderer/FormRenderer.js +10 -5
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-chained-component-show-whens-containerised.json +119 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-chained-component-show-whens-dependent-component-nested-block.json +112 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-chained-component-show-whens-dependent-component-nested.json +105 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-chained-component-show-whens-refdata.json +105 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-chained-component-show-whens-target-component-nested.json +98 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-chained-component-show-whens.json +105 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-chained-show-whens-page-hidden.json +112 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-cop-airpax.json +26407 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-cop-mandec.json +9404 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-collection-component-dependent-on-external-data.json +157 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-collection-component.json +85 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-component-referring-to-collection.json +172 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-component-referring-to-hidden-collection.json +201 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-component-with-nested-questions.json +111 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-component.json +57 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-containerised-component.json +96 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-embedded-collection-component.json +82 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-embedded-component.json +54 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-multilevel-containerised-component-leaf-hidden.json +105 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-multilevel-containerised-component.json +105 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-options.json +98 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-page-collection.json +127 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-page-component-used-elsewhere.json +108 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-page.json +95 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-nested-answers-hidden-by-option.json +111 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/cop-airpax-remove-photos-before.json +384 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/cop-mandec-remove-business-interests-before.json +140 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/cop-mandec-remove-criminality-before.json +186 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-chained-component-show-whens-containerised.json +11 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-chained-component-show-whens-dependent-component-nested-block.json +10 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-chained-component-show-whens-dependent-component-nested.json +9 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-chained-component-show-whens-refdata.json +11 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-chained-component-show-whens-target-component-nested.json +9 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-chained-component-show-whens.json +9 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-chained-show-whens-page-hidden.json +9 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-collection-component-dependent-on-external-data.json +26 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-collection-component.json +15 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-component-referring-to-collection.json +25 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-component-referring-to-hidden-collection.json +26 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-component-with-nested-questions.json +12 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-component.json +5 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-containerised-component.json +11 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-embedded-collection-component.json +15 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-embedded-component.json +5 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-multilevel-containerised-component-leaf-hidden.json +14 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-multilevel-containerised-component.json +14 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-options.json +10 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-page-collection.json +18 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-page-component-used-elsewhere.json +9 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-page.json +9 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-nested-answers-hidden-by-option.json +12 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/cop-airpax-remove-photos-after.json +355 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/cop-mandec-base-file.json +80 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/cop-mandec-remove-business-interests-after.json +122 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/cop-mandec-remove-criminality-after.json +86 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-chained-component-show-whens-containerised-removed.json +11 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-chained-component-show-whens-dependent-component-nested-block-removed.json +7 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-chained-component-show-whens-dependent-component-nested-removed.json +7 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-chained-component-show-whens-refdata-removed.json +7 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-chained-component-show-whens-removed.json +7 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-chained-component-show-whens-target-component-nested-removed.json +6 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-chained-show-whens-page-hidden-removed.json +6 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-collection-component-dependent-on-external-data-removed.json +23 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-collection-component-removed.json +4 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-component-referring-to-collection-removed.json +21 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-component-referring-to-hidden-collection-removed.json +6 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-component-removed.json +4 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-component-with-nested-questions-removed.json +10 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-containerised-component-removed.json +10 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-embedded-collection-component-removed.json +4 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-embedded-component-removed.json +4 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-multilevel-containerised-component-leaf-hidden-removed.json +13 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-multilevel-containerised-component-removed.json +10 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-options-removed.json +8 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-page-collection-removed.json +15 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-page-component-used-elsewhere-removed.json +5 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-page-removed.json +4 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-nested-answers-hidden-by-option-removed.json +11 -0
- package/dist/components/FormRenderer/helpers/clearOutUncompletedRoutes.js +346 -0
- package/dist/components/FormRenderer/helpers/clearOutUncompletedRoutes.test.js +298 -0
- package/dist/components/FormRenderer/helpers/deleteNodeByPath.js +26 -0
- package/dist/components/FormRenderer/helpers/deleteNodeByPath.test.js +56 -0
- package/dist/components/FormRenderer/helpers/index.js +3 -1
- package/dist/components/FormRenderer/onPageAction.js +7 -0
- package/dist/components/FormRenderer/onPageAction.test.js +5 -0
- package/dist/utils/CollectionPage/mergeCollectionPages.js +1 -0
- package/dist/utils/Component/getDefaultValueFromConfig.js +1 -2
- package/dist/utils/Condition/meetsCondition.js +12 -26
- package/dist/utils/Condition/meetsCondition.test.js +0 -21
- package/dist/utils/Data/getAutocompleteSource.js +51 -68
- package/dist/utils/Data/getAutocompleteSource.test.js +18 -31
- package/package.json +2 -2
- package/dist/utils/Validate/validateOnPageLoad.js +0 -23
- 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
|
-
|
|
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
|
|
80
|
-
return (query,
|
|
81
|
-
const
|
|
82
|
-
|
|
83
|
-
|
|
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'
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
318
|
-
|
|
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.
|
|
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.
|
|
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
|
-
});
|