@ukhomeoffice/cop-react-form-renderer 4.53.0 → 4.55.0
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/CheckYourAnswers/CheckYourAnswers.js +4 -0
- package/dist/components/FormPage/FormPage.js +8 -0
- package/dist/components/FormRenderer/FormRenderer.js +31 -7
- package/dist/components/FormRenderer/FormRenderer.test.js +91 -32
- package/dist/components/FormRenderer/handlers/navigate.js +2 -2
- package/dist/components/FormRenderer/helpers/getCYA.js +9 -1
- package/dist/components/SummaryList/SummaryList.js +6 -3
- package/dist/components/SummaryList/SummaryList.test.js +94 -8
- package/dist/context/HooksContext/HooksContext.js +6 -2
- package/dist/utils/Data/getAutocompleteSource.js +5 -2
- package/dist/utils/Data/getAutocompleteSource.test.js +298 -96
- package/dist/utils/FormPage/applyConditionalProperties.js +42 -0
- package/dist/utils/FormPage/applyConditionalProperties.test.js +63 -0
- package/dist/utils/FormPage/index.js +3 -0
- package/package.json +1 -1
|
@@ -67,6 +67,7 @@ var CheckYourAnswers = function CheckYourAnswers(_ref) {
|
|
|
67
67
|
hide_title = _ref.hide_title,
|
|
68
68
|
summaryListClassModifiers = _ref.summaryListClassModifiers,
|
|
69
69
|
noChangeAction = _ref.noChangeAction,
|
|
70
|
+
noGroupAction = _ref.noGroupAction,
|
|
70
71
|
groups = _ref.groups,
|
|
71
72
|
sections = _ref.sections,
|
|
72
73
|
type = _ref.type;
|
|
@@ -170,6 +171,7 @@ var CheckYourAnswers = function CheckYourAnswers(_ref) {
|
|
|
170
171
|
rows: page.rows,
|
|
171
172
|
classModifiers: summaryListClassModifiers,
|
|
172
173
|
noChangeAction: hideActionButtons,
|
|
174
|
+
noGroupAction: noGroupAction,
|
|
173
175
|
isGroup: isGroup(page.id)
|
|
174
176
|
}));
|
|
175
177
|
}));
|
|
@@ -190,6 +192,7 @@ var CheckYourAnswers = function CheckYourAnswers(_ref) {
|
|
|
190
192
|
rows: page.rows,
|
|
191
193
|
classModifiers: summaryListClassModifiers,
|
|
192
194
|
noChangeAction: hideActionButtons,
|
|
195
|
+
noGroupAction: noGroupAction,
|
|
193
196
|
isGroup: isGroup(page.id)
|
|
194
197
|
}));
|
|
195
198
|
}), !hide_actions && /*#__PURE__*/_react.default.createElement(_PageActions.default, {
|
|
@@ -211,6 +214,7 @@ CheckYourAnswers.propTypes = {
|
|
|
211
214
|
hide_title: _propTypes.default.bool,
|
|
212
215
|
summaryListClassModifiers: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.arrayOf(_propTypes.default.string)]),
|
|
213
216
|
noChangeAction: _propTypes.default.bool,
|
|
217
|
+
noGroupAction: _propTypes.default.bool,
|
|
214
218
|
sections: _propTypes.default.arrayOf(_propTypes.default.shape({
|
|
215
219
|
name: _propTypes.default.string.isRequired,
|
|
216
220
|
tasks: _propTypes.default.arrayOf(_propTypes.default.shape({
|
|
@@ -57,6 +57,7 @@ var FormPage = function FormPage(_ref) {
|
|
|
57
57
|
_onAction = _ref.onAction,
|
|
58
58
|
onWrapperChange = _ref.onWrapperChange,
|
|
59
59
|
onTopLevelChange = _ref.onTopLevelChange,
|
|
60
|
+
onChange = _ref.onChange,
|
|
60
61
|
classBlock = _ref.classBlock,
|
|
61
62
|
classModifiers = _ref.classModifiers,
|
|
62
63
|
className = _ref.className;
|
|
@@ -89,6 +90,12 @@ var FormPage = function FormPage(_ref) {
|
|
|
89
90
|
setPatchLabel(function (prev) {
|
|
90
91
|
return _objectSpread(_objectSpread({}, prev), {}, _defineProperty({}, target.component, target.label));
|
|
91
92
|
});
|
|
93
|
+
|
|
94
|
+
if (typeof onChange === 'function') {
|
|
95
|
+
onChange(page.formData);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
;
|
|
92
99
|
};
|
|
93
100
|
|
|
94
101
|
(0, _react.useEffect)(function () {
|
|
@@ -143,6 +150,7 @@ FormPage.propTypes = {
|
|
|
143
150
|
// onPageChange functionality. Useful for anything that
|
|
144
151
|
// wants to wrap FormPage.
|
|
145
152
|
onWrapperChange: _propTypes.default.func,
|
|
153
|
+
onChange: _propTypes.default.func,
|
|
146
154
|
classBlock: _propTypes.default.string,
|
|
147
155
|
classModifiers: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.arrayOf(_propTypes.default.string)]),
|
|
148
156
|
className: _propTypes.default.string
|
|
@@ -103,7 +103,7 @@ var DEFAULT_CLASS = 'hods-form';
|
|
|
103
103
|
exports.DEFAULT_CLASS = DEFAULT_CLASS;
|
|
104
104
|
|
|
105
105
|
var InternalFormRenderer = function InternalFormRenderer(_ref2) {
|
|
106
|
-
var _formState$page5, _formState$page$actio;
|
|
106
|
+
var _formState$page5, _formState$page$actio, _formState$cya$hideCh, _formState$cya$hideGr;
|
|
107
107
|
|
|
108
108
|
var title = _ref2.title,
|
|
109
109
|
type = _ref2.type,
|
|
@@ -183,13 +183,23 @@ var InternalFormRenderer = function InternalFormRenderer(_ref2) {
|
|
|
183
183
|
validate = _useValidation.validate; // Need to set submission data when going back
|
|
184
184
|
|
|
185
185
|
|
|
186
|
-
window.onpopstate = function () {
|
|
186
|
+
window.onpopstate = function (e) {
|
|
187
187
|
var _formState$page;
|
|
188
188
|
|
|
189
189
|
if (document.location.hash) {
|
|
190
190
|
return;
|
|
191
191
|
}
|
|
192
192
|
|
|
193
|
+
if (e.state && e.state.fullPages !== undefined) {
|
|
194
|
+
setCurrentTask(function (prev) {
|
|
195
|
+
var _e$state;
|
|
196
|
+
|
|
197
|
+
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
198
|
+
fullPages: (_e$state = e.state) === null || _e$state === void 0 ? void 0 : _e$state.fullPages
|
|
199
|
+
});
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
|
|
193
203
|
setGoingBack(true);
|
|
194
204
|
hooks.onGoingBack();
|
|
195
205
|
clearErrors();
|
|
@@ -302,11 +312,16 @@ var InternalFormRenderer = function InternalFormRenderer(_ref2) {
|
|
|
302
312
|
|
|
303
313
|
(0, _react.useEffect)(function () {
|
|
304
314
|
if (newPageId !== undefined) setPageId(newPageId);
|
|
305
|
-
}, [newPageId]); // Handle
|
|
315
|
+
}, [newPageId]); // Handle change to form data in pages.
|
|
316
|
+
|
|
317
|
+
var onChange = function onChange(data) {
|
|
318
|
+
hooks.onChange(data);
|
|
319
|
+
}; // Handle actions from pages.
|
|
306
320
|
// (patch captures payload-ready field name and value,
|
|
307
321
|
// patchLabel captures non-ID values
|
|
308
322
|
// for display purposes after submission.)
|
|
309
323
|
|
|
324
|
+
|
|
310
325
|
var onPageAction = function onPageAction(action, patch, patchLabel) {
|
|
311
326
|
if (action.type === _models.PageAction.TYPES.CANCEL) {
|
|
312
327
|
hooks.onCancel();
|
|
@@ -342,8 +357,12 @@ var InternalFormRenderer = function InternalFormRenderer(_ref2) {
|
|
|
342
357
|
break;
|
|
343
358
|
|
|
344
359
|
case _models.PageAction.TYPES.SAVE_AND_NAVIGATE:
|
|
360
|
+
var state = {
|
|
361
|
+
'fullPages': currentTask.fullPages
|
|
362
|
+
};
|
|
363
|
+
|
|
345
364
|
pageUpdate = function pageUpdate() {
|
|
346
|
-
return _handlers.default.navigate(action, pageId, onPageChange);
|
|
365
|
+
return _handlers.default.navigate(action, pageId, onPageChange, state);
|
|
347
366
|
};
|
|
348
367
|
|
|
349
368
|
break;
|
|
@@ -482,7 +501,10 @@ var InternalFormRenderer = function InternalFormRenderer(_ref2) {
|
|
|
482
501
|
}
|
|
483
502
|
} else if (currentTask.state === _models.TaskStates.TYPES.IN_PROGRESS) {
|
|
484
503
|
var _currentPage = data.formStatus.tasks[currentTask.name].currentPage;
|
|
485
|
-
|
|
504
|
+
var state = {
|
|
505
|
+
'fullPages': currentTask.fullPages
|
|
506
|
+
};
|
|
507
|
+
onPageChange(_currentPage || currentTask.pages[0], state);
|
|
486
508
|
} else if (currentTask.firstPage) {
|
|
487
509
|
var _currentPage2 = currentTask.firstPage;
|
|
488
510
|
onPageChange(_currentPage2 || currentTask.pages[0]);
|
|
@@ -613,7 +635,8 @@ var InternalFormRenderer = function InternalFormRenderer(_ref2) {
|
|
|
613
635
|
onRowAction: onCYARowAction,
|
|
614
636
|
summaryListClassModifiers: summaryListClassModifiers,
|
|
615
637
|
hide_title: hide_title,
|
|
616
|
-
noChangeAction: noChangeAction,
|
|
638
|
+
noChangeAction: (_formState$cya$hideCh = formState.cya.hideChangeActions) !== null && _formState$cya$hideCh !== void 0 ? _formState$cya$hideCh : noChangeAction,
|
|
639
|
+
noGroupAction: (_formState$cya$hideGr = formState.cya.hideGroupActions) !== null && _formState$cya$hideGr !== void 0 ? _formState$cya$hideGr : false,
|
|
617
640
|
sections: typeof hubDetails !== 'undefined' ? hubDetails.sections : [],
|
|
618
641
|
type: type
|
|
619
642
|
})), hub === _models.HubFormats.TASK && formState.pageId === _models.FormPages.HUB && /*#__PURE__*/_react.default.createElement(_TaskList.default, _extends({}, hubDetails, {
|
|
@@ -622,7 +645,8 @@ var InternalFormRenderer = function InternalFormRenderer(_ref2) {
|
|
|
622
645
|
formData: data
|
|
623
646
|
})), formState.page && !formState.cya && !formState.page.collection && /*#__PURE__*/_react.default.createElement(_FormPage.default, {
|
|
624
647
|
page: formState.page,
|
|
625
|
-
onAction: onPageAction
|
|
648
|
+
onAction: onPageAction,
|
|
649
|
+
onChange: onChange
|
|
626
650
|
}), formState.page && !formState.cya && formState.page.collection && /*#__PURE__*/_react.default.createElement(_CollectionPage.default, {
|
|
627
651
|
page: formState.page,
|
|
628
652
|
onAction: onPageAction
|
|
@@ -931,11 +931,70 @@ describe('components', function () {
|
|
|
931
931
|
}
|
|
932
932
|
}, _callee26);
|
|
933
933
|
})));
|
|
934
|
-
it('should go to
|
|
935
|
-
var ON_SUBMIT, HOOKS,
|
|
934
|
+
it('should go to incomplete page when selecting in-progress task', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee28() {
|
|
935
|
+
var ON_SUBMIT, HOOKS, DATA, taskList;
|
|
936
936
|
return regeneratorRuntime.wrap(function _callee28$(_context28) {
|
|
937
937
|
while (1) {
|
|
938
938
|
switch (_context28.prev = _context28.next) {
|
|
939
|
+
case 0:
|
|
940
|
+
ON_SUBMIT = function ON_SUBMIT(type, payload, onSuccess, onError) {
|
|
941
|
+
onSuccess();
|
|
942
|
+
};
|
|
943
|
+
|
|
944
|
+
HOOKS = {
|
|
945
|
+
onSubmit: ON_SUBMIT
|
|
946
|
+
};
|
|
947
|
+
DATA = {
|
|
948
|
+
"date": "7-7-2022",
|
|
949
|
+
"formStatus": {
|
|
950
|
+
"tasks": {
|
|
951
|
+
"Date, location and mode details": {
|
|
952
|
+
"complete": false,
|
|
953
|
+
"currentPage": "eventMode"
|
|
954
|
+
}
|
|
955
|
+
},
|
|
956
|
+
"taskPage": "eventMode"
|
|
957
|
+
}
|
|
958
|
+
};
|
|
959
|
+
_context28.next = 5;
|
|
960
|
+
return (0, _testUtils.act)( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee27() {
|
|
961
|
+
return regeneratorRuntime.wrap(function _callee27$(_context27) {
|
|
962
|
+
while (1) {
|
|
963
|
+
switch (_context27.prev = _context27.next) {
|
|
964
|
+
case 0:
|
|
965
|
+
(0, _reactDom.render)( /*#__PURE__*/_react2.default.createElement(_FormRenderer.default, _extends({}, _taskList.default, {
|
|
966
|
+
hooks: HOOKS,
|
|
967
|
+
data: DATA
|
|
968
|
+
})), container);
|
|
969
|
+
|
|
970
|
+
case 1:
|
|
971
|
+
case "end":
|
|
972
|
+
return _context27.stop();
|
|
973
|
+
}
|
|
974
|
+
}
|
|
975
|
+
}, _callee27);
|
|
976
|
+
})));
|
|
977
|
+
|
|
978
|
+
case 5:
|
|
979
|
+
taskList = container.childNodes[0].childNodes[1]; //Launch first task
|
|
980
|
+
|
|
981
|
+
_react.fireEvent.click(taskList.childNodes[3].childNodes[1].childNodes[0].childNodes[0], {}); //Should be at Event Mode page
|
|
982
|
+
|
|
983
|
+
|
|
984
|
+
expect(container.childNodes[0].childNodes[0].childNodes[0].textContent).toEqual('Event Mode');
|
|
985
|
+
|
|
986
|
+
case 8:
|
|
987
|
+
case "end":
|
|
988
|
+
return _context28.stop();
|
|
989
|
+
}
|
|
990
|
+
}
|
|
991
|
+
}, _callee28);
|
|
992
|
+
})));
|
|
993
|
+
it('should go to the last page of a complete task if noTaskCYAs specified', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee30() {
|
|
994
|
+
var ON_SUBMIT, HOOKS, TASK_LIST_WITH_NO_TASK_CYAS, taskList, newPage;
|
|
995
|
+
return regeneratorRuntime.wrap(function _callee30$(_context30) {
|
|
996
|
+
while (1) {
|
|
997
|
+
switch (_context30.prev = _context30.next) {
|
|
939
998
|
case 0:
|
|
940
999
|
ON_SUBMIT = function ON_SUBMIT(type, payload, onSuccess, onError) {
|
|
941
1000
|
onSuccess();
|
|
@@ -950,11 +1009,11 @@ describe('components', function () {
|
|
|
950
1009
|
type: 'save',
|
|
951
1010
|
complete: true
|
|
952
1011
|
};
|
|
953
|
-
|
|
954
|
-
return (0, _testUtils.act)( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function
|
|
955
|
-
return regeneratorRuntime.wrap(function
|
|
1012
|
+
_context30.next = 7;
|
|
1013
|
+
return (0, _testUtils.act)( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee29() {
|
|
1014
|
+
return regeneratorRuntime.wrap(function _callee29$(_context29) {
|
|
956
1015
|
while (1) {
|
|
957
|
-
switch (
|
|
1016
|
+
switch (_context29.prev = _context29.next) {
|
|
958
1017
|
case 0:
|
|
959
1018
|
(0, _reactDom.render)( /*#__PURE__*/_react2.default.createElement(_FormRenderer.default, _extends({}, TASK_LIST_WITH_NO_TASK_CYAS, {
|
|
960
1019
|
hooks: HOOKS
|
|
@@ -962,10 +1021,10 @@ describe('components', function () {
|
|
|
962
1021
|
|
|
963
1022
|
case 1:
|
|
964
1023
|
case "end":
|
|
965
|
-
return
|
|
1024
|
+
return _context29.stop();
|
|
966
1025
|
}
|
|
967
1026
|
}
|
|
968
|
-
},
|
|
1027
|
+
}, _callee29);
|
|
969
1028
|
})));
|
|
970
1029
|
|
|
971
1030
|
case 7:
|
|
@@ -1014,17 +1073,17 @@ describe('components', function () {
|
|
|
1014
1073
|
|
|
1015
1074
|
case 19:
|
|
1016
1075
|
case "end":
|
|
1017
|
-
return
|
|
1076
|
+
return _context30.stop();
|
|
1018
1077
|
}
|
|
1019
1078
|
}
|
|
1020
|
-
},
|
|
1079
|
+
}, _callee30);
|
|
1021
1080
|
})));
|
|
1022
|
-
it('should handle cancellation from a page', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function
|
|
1081
|
+
it('should handle cancellation from a page', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee32() {
|
|
1023
1082
|
var ON_CANCEL_CALLS, ON_CANCEL, HOOKS, form, hub, _hub$childNodes5, civilServantList, link, page, cancel;
|
|
1024
1083
|
|
|
1025
|
-
return regeneratorRuntime.wrap(function
|
|
1084
|
+
return regeneratorRuntime.wrap(function _callee32$(_context32) {
|
|
1026
1085
|
while (1) {
|
|
1027
|
-
switch (
|
|
1086
|
+
switch (_context32.prev = _context32.next) {
|
|
1028
1087
|
case 0:
|
|
1029
1088
|
ON_CANCEL_CALLS = [];
|
|
1030
1089
|
|
|
@@ -1035,11 +1094,11 @@ describe('components', function () {
|
|
|
1035
1094
|
HOOKS = {
|
|
1036
1095
|
onCancel: ON_CANCEL
|
|
1037
1096
|
};
|
|
1038
|
-
|
|
1039
|
-
return (0, _testUtils.act)( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function
|
|
1040
|
-
return regeneratorRuntime.wrap(function
|
|
1097
|
+
_context32.next = 5;
|
|
1098
|
+
return (0, _testUtils.act)( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee31() {
|
|
1099
|
+
return regeneratorRuntime.wrap(function _callee31$(_context31) {
|
|
1041
1100
|
while (1) {
|
|
1042
|
-
switch (
|
|
1101
|
+
switch (_context31.prev = _context31.next) {
|
|
1043
1102
|
case 0:
|
|
1044
1103
|
(0, _reactDom.render)( /*#__PURE__*/_react2.default.createElement(_FormRenderer.default, _extends({}, _userProfile.default, {
|
|
1045
1104
|
data: _userProfileData.default,
|
|
@@ -1048,10 +1107,10 @@ describe('components', function () {
|
|
|
1048
1107
|
|
|
1049
1108
|
case 1:
|
|
1050
1109
|
case "end":
|
|
1051
|
-
return
|
|
1110
|
+
return _context31.stop();
|
|
1052
1111
|
}
|
|
1053
1112
|
}
|
|
1054
|
-
},
|
|
1113
|
+
}, _callee31);
|
|
1055
1114
|
})));
|
|
1056
1115
|
|
|
1057
1116
|
case 5:
|
|
@@ -1075,16 +1134,16 @@ describe('components', function () {
|
|
|
1075
1134
|
|
|
1076
1135
|
case 15:
|
|
1077
1136
|
case "end":
|
|
1078
|
-
return
|
|
1137
|
+
return _context32.stop();
|
|
1079
1138
|
}
|
|
1080
1139
|
}
|
|
1081
|
-
},
|
|
1140
|
+
}, _callee32);
|
|
1082
1141
|
})));
|
|
1083
|
-
it('should navigate to a specific page at the beginning of a task if it is set as the firstPage of a task', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function
|
|
1142
|
+
it('should navigate to a specific page at the beginning of a task if it is set as the firstPage of a task', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee34() {
|
|
1084
1143
|
var ON_SUBMIT_CALLS, ON_SUBMIT, HOOKS, TASK_LIST_NON_SEQUENTIAL, taskList, firstTask, newPage;
|
|
1085
|
-
return regeneratorRuntime.wrap(function
|
|
1144
|
+
return regeneratorRuntime.wrap(function _callee34$(_context34) {
|
|
1086
1145
|
while (1) {
|
|
1087
|
-
switch (
|
|
1146
|
+
switch (_context34.prev = _context34.next) {
|
|
1088
1147
|
case 0:
|
|
1089
1148
|
ON_SUBMIT_CALLS = [];
|
|
1090
1149
|
|
|
@@ -1098,11 +1157,11 @@ describe('components', function () {
|
|
|
1098
1157
|
};
|
|
1099
1158
|
TASK_LIST_NON_SEQUENTIAL = JSON.parse(JSON.stringify(_taskList.default));
|
|
1100
1159
|
TASK_LIST_NON_SEQUENTIAL.hub.nonSequential = true;
|
|
1101
|
-
|
|
1102
|
-
return (0, _testUtils.act)( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function
|
|
1103
|
-
return regeneratorRuntime.wrap(function
|
|
1160
|
+
_context34.next = 7;
|
|
1161
|
+
return (0, _testUtils.act)( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee33() {
|
|
1162
|
+
return regeneratorRuntime.wrap(function _callee33$(_context33) {
|
|
1104
1163
|
while (1) {
|
|
1105
|
-
switch (
|
|
1164
|
+
switch (_context33.prev = _context33.next) {
|
|
1106
1165
|
case 0:
|
|
1107
1166
|
(0, _reactDom.render)( /*#__PURE__*/_react2.default.createElement(_FormRenderer.default, _extends({}, TASK_LIST_NON_SEQUENTIAL, {
|
|
1108
1167
|
hooks: HOOKS
|
|
@@ -1110,10 +1169,10 @@ describe('components', function () {
|
|
|
1110
1169
|
|
|
1111
1170
|
case 1:
|
|
1112
1171
|
case "end":
|
|
1113
|
-
return
|
|
1172
|
+
return _context33.stop();
|
|
1114
1173
|
}
|
|
1115
1174
|
}
|
|
1116
|
-
},
|
|
1175
|
+
}, _callee33);
|
|
1117
1176
|
})));
|
|
1118
1177
|
|
|
1119
1178
|
case 7:
|
|
@@ -1130,10 +1189,10 @@ describe('components', function () {
|
|
|
1130
1189
|
|
|
1131
1190
|
case 13:
|
|
1132
1191
|
case "end":
|
|
1133
|
-
return
|
|
1192
|
+
return _context34.stop();
|
|
1134
1193
|
}
|
|
1135
1194
|
}
|
|
1136
|
-
},
|
|
1195
|
+
}, _callee34);
|
|
1137
1196
|
})));
|
|
1138
1197
|
});
|
|
1139
1198
|
});
|
|
@@ -16,11 +16,11 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
16
16
|
* @param {string} currentPageId The current pageId.
|
|
17
17
|
* @param {Function} onNavigate The handler to call if the pageId is different to the currentPageId.
|
|
18
18
|
*/
|
|
19
|
-
var navigate = function navigate(action, currentPageId, onNavigate) {
|
|
19
|
+
var navigate = function navigate(action, currentPageId, onNavigate, state) {
|
|
20
20
|
var pageId = (0, _getPageId.default)(action, currentPageId);
|
|
21
21
|
|
|
22
22
|
if (pageId !== currentPageId) {
|
|
23
|
-
onNavigate(pageId);
|
|
23
|
+
onNavigate(pageId, state);
|
|
24
24
|
}
|
|
25
25
|
};
|
|
26
26
|
|
|
@@ -7,6 +7,10 @@ exports.default = void 0;
|
|
|
7
7
|
|
|
8
8
|
var _models = require("../../../models");
|
|
9
9
|
|
|
10
|
+
var _utils = _interopRequireDefault(require("../../../utils"));
|
|
11
|
+
|
|
12
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
|
+
|
|
10
14
|
// Local imports
|
|
11
15
|
|
|
12
16
|
/**
|
|
@@ -29,8 +33,12 @@ var getCYA = function getCYA(pageId, pages, hub) {
|
|
|
29
33
|
});
|
|
30
34
|
|
|
31
35
|
if ((currentPage === null || currentPage === void 0 ? void 0 : currentPage.type) === _models.FormPages.PARTIAL_CYA) {
|
|
36
|
+
var pageWithConditionals = _utils.default.FormPage.applyConditionalProperties(currentPage);
|
|
37
|
+
|
|
32
38
|
return {
|
|
33
|
-
title:
|
|
39
|
+
title: pageWithConditionals.title,
|
|
40
|
+
hideChangeActions: pageWithConditionals.hideChangeActions,
|
|
41
|
+
hideGroupActions: pageWithConditionals.hideGroupActions
|
|
34
42
|
};
|
|
35
43
|
}
|
|
36
44
|
|
|
@@ -21,7 +21,7 @@ var _SummaryListTitleRow = _interopRequireDefault(require("./SummaryListTitleRow
|
|
|
21
21
|
|
|
22
22
|
require("./SummaryList.scss");
|
|
23
23
|
|
|
24
|
-
var _excluded = ["rows", "noChangeAction", "isGroup", "classBlock", "classModifiers", "className"];
|
|
24
|
+
var _excluded = ["rows", "noChangeAction", "noGroupAction", "isGroup", "classBlock", "classModifiers", "className"];
|
|
25
25
|
|
|
26
26
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
27
27
|
|
|
@@ -37,6 +37,7 @@ exports.DEFAULT_CLASS = DEFAULT_CLASS;
|
|
|
37
37
|
var SummaryList = function SummaryList(_ref) {
|
|
38
38
|
var rows = _ref.rows,
|
|
39
39
|
noChangeAction = _ref.noChangeAction,
|
|
40
|
+
noGroupAction = _ref.noGroupAction,
|
|
40
41
|
isGroup = _ref.isGroup,
|
|
41
42
|
classBlock = _ref.classBlock,
|
|
42
43
|
classModifiers = _ref.classModifiers,
|
|
@@ -79,7 +80,7 @@ var SummaryList = function SummaryList(_ref) {
|
|
|
79
80
|
}
|
|
80
81
|
|
|
81
82
|
if (row.type === 'action') {
|
|
82
|
-
return /*#__PURE__*/_react.default.createElement("div", {
|
|
83
|
+
return noChangeAction ? null : /*#__PURE__*/_react.default.createElement("div", {
|
|
83
84
|
key: "".concat(key, "-actions")
|
|
84
85
|
}, /*#__PURE__*/_react.default.createElement(_GroupAction.default, {
|
|
85
86
|
group: row
|
|
@@ -92,7 +93,9 @@ var SummaryList = function SummaryList(_ref) {
|
|
|
92
93
|
classes: classes,
|
|
93
94
|
showAction: !noChangeAction
|
|
94
95
|
});
|
|
95
|
-
})
|
|
96
|
+
}).filter(function (r) {
|
|
97
|
+
return !!r;
|
|
98
|
+
}), isGroup && !noGroupAction && /*#__PURE__*/_react.default.createElement("div", {
|
|
96
99
|
className: "change-group-button"
|
|
97
100
|
}, /*#__PURE__*/_react.default.createElement(_GroupAction.default, {
|
|
98
101
|
group: groupActionRow
|
|
@@ -49,6 +49,14 @@ describe('components', function () {
|
|
|
49
49
|
return heading;
|
|
50
50
|
};
|
|
51
51
|
|
|
52
|
+
var checkActionRow = function checkActionRow(summaryList, index) {
|
|
53
|
+
var row = summaryList.childNodes[index];
|
|
54
|
+
expect(row.tagName).toEqual('DIV');
|
|
55
|
+
expect(row.childNodes.length).toEqual(1);
|
|
56
|
+
var link = row.childNodes[0];
|
|
57
|
+
return link;
|
|
58
|
+
};
|
|
59
|
+
|
|
52
60
|
var checkRow = function checkRow(summaryList, index) {
|
|
53
61
|
var row = summaryList.childNodes[index];
|
|
54
62
|
expect(row.tagName).toEqual('DIV');
|
|
@@ -185,6 +193,84 @@ describe('components', function () {
|
|
|
185
193
|
}
|
|
186
194
|
});
|
|
187
195
|
});
|
|
196
|
+
it('should handle action rows', function () {
|
|
197
|
+
var ID = 'test-id';
|
|
198
|
+
var ROWS = [{
|
|
199
|
+
pageId: 'p1',
|
|
200
|
+
fieldId: 'a',
|
|
201
|
+
type: 'action',
|
|
202
|
+
action: {
|
|
203
|
+
label: 'Do action'
|
|
204
|
+
}
|
|
205
|
+
}, {
|
|
206
|
+
pageId: 'p2',
|
|
207
|
+
fieldId: 'b',
|
|
208
|
+
type: 'action',
|
|
209
|
+
action: {
|
|
210
|
+
label: 'Do action'
|
|
211
|
+
}
|
|
212
|
+
}, {
|
|
213
|
+
pageId: 'p3',
|
|
214
|
+
fieldId: 'c',
|
|
215
|
+
type: 'action',
|
|
216
|
+
action: {
|
|
217
|
+
label: 'Do action'
|
|
218
|
+
}
|
|
219
|
+
}];
|
|
220
|
+
|
|
221
|
+
var _render4 = (0, _react.render)( /*#__PURE__*/_react2.default.createElement(_SummaryList.default, {
|
|
222
|
+
"data-testid": ID,
|
|
223
|
+
rows: ROWS
|
|
224
|
+
})),
|
|
225
|
+
container = _render4.container;
|
|
226
|
+
|
|
227
|
+
var summaryList = checkSummaryList(container, ID);
|
|
228
|
+
expect(summaryList.childNodes.length).toEqual(ROWS.length);
|
|
229
|
+
|
|
230
|
+
var assessActionRow = function assessActionRow(row, index) {
|
|
231
|
+
var link = checkActionRow(summaryList, index);
|
|
232
|
+
expect(link.textContent).toEqual(row.action.label);
|
|
233
|
+
};
|
|
234
|
+
|
|
235
|
+
ROWS.forEach(function (row, index) {
|
|
236
|
+
assessActionRow(row, index);
|
|
237
|
+
});
|
|
238
|
+
});
|
|
239
|
+
it('should hide actions rows if flag is given', function () {
|
|
240
|
+
var ID = 'test-id';
|
|
241
|
+
var ROWS = [{
|
|
242
|
+
pageId: 'p1',
|
|
243
|
+
fieldId: 'a',
|
|
244
|
+
type: 'action',
|
|
245
|
+
action: {
|
|
246
|
+
label: 'Do action'
|
|
247
|
+
}
|
|
248
|
+
}, {
|
|
249
|
+
pageId: 'p2',
|
|
250
|
+
fieldId: 'b',
|
|
251
|
+
type: 'action',
|
|
252
|
+
action: {
|
|
253
|
+
label: 'Do action'
|
|
254
|
+
}
|
|
255
|
+
}, {
|
|
256
|
+
pageId: 'p3',
|
|
257
|
+
fieldId: 'c',
|
|
258
|
+
type: 'action',
|
|
259
|
+
action: {
|
|
260
|
+
label: 'Do action'
|
|
261
|
+
}
|
|
262
|
+
}];
|
|
263
|
+
|
|
264
|
+
var _render5 = (0, _react.render)( /*#__PURE__*/_react2.default.createElement(_SummaryList.default, {
|
|
265
|
+
"data-testid": ID,
|
|
266
|
+
rows: ROWS,
|
|
267
|
+
noChangeAction: true
|
|
268
|
+
})),
|
|
269
|
+
container = _render5.container;
|
|
270
|
+
|
|
271
|
+
var summaryList = checkSummaryList(container, ID);
|
|
272
|
+
expect(summaryList.childNodes.length).toEqual(0);
|
|
273
|
+
});
|
|
188
274
|
it('should handle rows with no actions and component values', function () {
|
|
189
275
|
var ID = 'test-id';
|
|
190
276
|
var VALUES = ['Alpha component value', 'Bravo component value'];
|
|
@@ -200,11 +286,11 @@ describe('components', function () {
|
|
|
200
286
|
value: /*#__PURE__*/_react2.default.createElement("div", null, VALUES[1])
|
|
201
287
|
}];
|
|
202
288
|
|
|
203
|
-
var
|
|
289
|
+
var _render6 = (0, _react.render)( /*#__PURE__*/_react2.default.createElement(_SummaryList.default, {
|
|
204
290
|
"data-testid": ID,
|
|
205
291
|
rows: ROWS
|
|
206
292
|
})),
|
|
207
|
-
container =
|
|
293
|
+
container = _render6.container;
|
|
208
294
|
|
|
209
295
|
var summaryList = checkSummaryList(container, ID);
|
|
210
296
|
expect(summaryList.childNodes.length).toEqual(ROWS.length);
|
|
@@ -251,11 +337,11 @@ describe('components', function () {
|
|
|
251
337
|
}
|
|
252
338
|
}];
|
|
253
339
|
|
|
254
|
-
var
|
|
340
|
+
var _render7 = (0, _react.render)( /*#__PURE__*/_react2.default.createElement(_SummaryList.default, {
|
|
255
341
|
"data-testid": ID,
|
|
256
342
|
rows: ROWS
|
|
257
343
|
})),
|
|
258
|
-
container =
|
|
344
|
+
container = _render7.container;
|
|
259
345
|
|
|
260
346
|
var summaryList = checkSummaryList(container, ID);
|
|
261
347
|
expect(summaryList.childNodes.length).toEqual(ROWS.length);
|
|
@@ -292,12 +378,12 @@ describe('components', function () {
|
|
|
292
378
|
value: /*#__PURE__*/_react2.default.createElement("div", null, VALUES[1])
|
|
293
379
|
}];
|
|
294
380
|
|
|
295
|
-
var
|
|
381
|
+
var _render8 = (0, _react.render)( /*#__PURE__*/_react2.default.createElement(_SummaryList.default, {
|
|
296
382
|
"data-testid": ID,
|
|
297
383
|
rows: ROWS,
|
|
298
384
|
noChangeAction: true
|
|
299
385
|
})),
|
|
300
|
-
container =
|
|
386
|
+
container = _render8.container;
|
|
301
387
|
|
|
302
388
|
var summaryList = checkSummaryList(container, ID);
|
|
303
389
|
expect(summaryList.childNodes.length).toEqual(ROWS.length);
|
|
@@ -335,12 +421,12 @@ describe('components', function () {
|
|
|
335
421
|
value: /*#__PURE__*/_react2.default.createElement("div", null, VALUES[2])
|
|
336
422
|
}];
|
|
337
423
|
|
|
338
|
-
var
|
|
424
|
+
var _render9 = (0, _react.render)( /*#__PURE__*/_react2.default.createElement(_SummaryList.default, {
|
|
339
425
|
"data-testid": ID,
|
|
340
426
|
rows: ROWS,
|
|
341
427
|
isGroup: ISGROUP
|
|
342
428
|
})),
|
|
343
|
-
container =
|
|
429
|
+
container = _render9.container;
|
|
344
430
|
|
|
345
431
|
var summaryList = checkSummaryList(container, ID);
|
|
346
432
|
expect(summaryList.childNodes.length).toEqual(ROWS.length + 1);
|
|
@@ -32,12 +32,15 @@ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Sy
|
|
|
32
32
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
33
33
|
|
|
34
34
|
var DEFAULT_HOOKS = {
|
|
35
|
-
|
|
35
|
+
onChange: function onChange(data) {
|
|
36
|
+
return data;
|
|
37
|
+
},
|
|
36
38
|
onFormComplete: function onFormComplete() {},
|
|
37
39
|
onFormLoad: function onFormLoad() {},
|
|
38
40
|
onGetComponent: function onGetComponent(config, wrap) {
|
|
39
41
|
return null;
|
|
40
42
|
},
|
|
43
|
+
onGoingBack: function onGoingBack() {},
|
|
41
44
|
onPageChange: function onPageChange(pageId) {
|
|
42
45
|
return pageId;
|
|
43
46
|
},
|
|
@@ -60,10 +63,11 @@ var HooksContextProvider = function HooksContextProvider(_ref) {
|
|
|
60
63
|
children = _ref.children;
|
|
61
64
|
|
|
62
65
|
var _useState = (0, _react.useState)({
|
|
63
|
-
|
|
66
|
+
onChange: (overrides === null || overrides === void 0 ? void 0 : overrides.onChange) || DEFAULT_HOOKS.onChange,
|
|
64
67
|
onFormComplete: (overrides === null || overrides === void 0 ? void 0 : overrides.onFormComplete) || DEFAULT_HOOKS.onFormComplete,
|
|
65
68
|
onFormLoad: (overrides === null || overrides === void 0 ? void 0 : overrides.onFormLoad) || DEFAULT_HOOKS.onFormLoad,
|
|
66
69
|
onGetComponent: (overrides === null || overrides === void 0 ? void 0 : overrides.onGetComponent) || DEFAULT_HOOKS.onGetComponent,
|
|
70
|
+
onGoingBack: (overrides === null || overrides === void 0 ? void 0 : overrides.onGoingBack) || DEFAULT_HOOKS.onGoingBack,
|
|
67
71
|
onPageChange: (overrides === null || overrides === void 0 ? void 0 : overrides.onPageChange) || DEFAULT_HOOKS.onPageChange,
|
|
68
72
|
onRequest: (overrides === null || overrides === void 0 ? void 0 : overrides.onRequest) || DEFAULT_HOOKS.onRequest,
|
|
69
73
|
onSubmit: (overrides === null || overrides === void 0 ? void 0 : overrides.onSubmit) || DEFAULT_HOOKS.onSubmit,
|
|
@@ -7,6 +7,8 @@ exports.default = void 0;
|
|
|
7
7
|
|
|
8
8
|
var _getOptions = _interopRequireDefault(require("./getOptions"));
|
|
9
9
|
|
|
10
|
+
var _copReactComponents = require("@ukhomeoffice/cop-react-components");
|
|
11
|
+
|
|
10
12
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
11
13
|
|
|
12
14
|
// Local imports
|
|
@@ -15,11 +17,12 @@ var getAutocompleteSource = function getAutocompleteSource(config) {
|
|
|
15
17
|
(0, _getOptions.default)(config, function (val) {
|
|
16
18
|
options = val;
|
|
17
19
|
});
|
|
20
|
+
var labelMaker = config !== null && config !== void 0 && config.item ? _copReactComponents.Utils.itemLabel(config.item) : null;
|
|
18
21
|
return function (query, populateResults) {
|
|
19
22
|
var lcQuery = query ? query.toLowerCase() : '';
|
|
20
23
|
populateResults(options.filter(function (opt) {
|
|
21
|
-
var
|
|
22
|
-
return
|
|
24
|
+
var label = labelMaker ? labelMaker(opt) : opt.label || '';
|
|
25
|
+
return label.toLowerCase().includes(lcQuery);
|
|
23
26
|
}));
|
|
24
27
|
};
|
|
25
28
|
};
|
|
@@ -16,129 +16,331 @@ describe('utils', function () {
|
|
|
16
16
|
expect(results.length).toEqual(0);
|
|
17
17
|
});
|
|
18
18
|
});
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
19
|
+
describe('without custom item labels', function () {
|
|
20
|
+
it('should get any specified options from the config', function () {
|
|
21
|
+
var CONFIG = {
|
|
22
|
+
data: {
|
|
23
|
+
options: [{
|
|
24
|
+
value: 'a',
|
|
25
|
+
label: 'Alpha'
|
|
26
|
+
}, {
|
|
27
|
+
value: 'b',
|
|
28
|
+
label: 'Bravo'
|
|
29
|
+
}]
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
var SOURCE = (0, _getAutocompleteSource.default)(CONFIG);
|
|
33
|
+
expect(typeof SOURCE === 'function').toBeTruthy();
|
|
34
|
+
SOURCE('a', function (results) {
|
|
35
|
+
expect(results.length).toEqual(2);
|
|
36
|
+
expect(results).toEqual([{
|
|
23
37
|
value: 'a',
|
|
24
38
|
label: 'Alpha'
|
|
25
39
|
}, {
|
|
26
40
|
value: 'b',
|
|
27
41
|
label: 'Bravo'
|
|
28
|
-
}]
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
label: 'Alpha'
|
|
38
|
-
}, {
|
|
39
|
-
value: 'b',
|
|
40
|
-
label: 'Bravo'
|
|
41
|
-
}]);
|
|
42
|
-
});
|
|
43
|
-
SOURCE('al', function (results) {
|
|
44
|
-
expect(results.length).toEqual(1);
|
|
45
|
-
expect(results).toEqual([{
|
|
46
|
-
value: 'a',
|
|
47
|
-
label: 'Alpha'
|
|
48
|
-
}]);
|
|
42
|
+
}]);
|
|
43
|
+
});
|
|
44
|
+
SOURCE('al', function (results) {
|
|
45
|
+
expect(results.length).toEqual(1);
|
|
46
|
+
expect(results).toEqual([{
|
|
47
|
+
value: 'a',
|
|
48
|
+
label: 'Alpha'
|
|
49
|
+
}]);
|
|
50
|
+
});
|
|
49
51
|
});
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
52
|
+
it('should handle an empty query', function () {
|
|
53
|
+
var CONFIG = {
|
|
54
|
+
data: {
|
|
55
|
+
options: [{
|
|
56
|
+
value: 'a',
|
|
57
|
+
label: 'Alpha'
|
|
58
|
+
}, {
|
|
59
|
+
value: 'b',
|
|
60
|
+
label: 'Bravo'
|
|
61
|
+
}]
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
var SOURCE = (0, _getAutocompleteSource.default)(CONFIG);
|
|
65
|
+
SOURCE('', function (results) {
|
|
66
|
+
expect(results.length).toEqual(2);
|
|
67
|
+
expect(results).toEqual([{
|
|
55
68
|
value: 'a',
|
|
56
69
|
label: 'Alpha'
|
|
57
70
|
}, {
|
|
58
71
|
value: 'b',
|
|
59
72
|
label: 'Bravo'
|
|
60
|
-
}]
|
|
61
|
-
}
|
|
62
|
-
};
|
|
63
|
-
var SOURCE = (0, _getAutocompleteSource.default)(CONFIG);
|
|
64
|
-
SOURCE('', function (results) {
|
|
65
|
-
expect(results.length).toEqual(2);
|
|
66
|
-
expect(results).toEqual([{
|
|
67
|
-
value: 'a',
|
|
68
|
-
label: 'Alpha'
|
|
69
|
-
}, {
|
|
70
|
-
value: 'b',
|
|
71
|
-
label: 'Bravo'
|
|
72
|
-
}]);
|
|
73
|
+
}]);
|
|
74
|
+
});
|
|
73
75
|
});
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
76
|
+
it('should handle an undefined query', function () {
|
|
77
|
+
var CONFIG = {
|
|
78
|
+
data: {
|
|
79
|
+
options: [{
|
|
80
|
+
value: 'a',
|
|
81
|
+
label: 'Alpha'
|
|
82
|
+
}, {
|
|
83
|
+
value: 'b',
|
|
84
|
+
label: 'Bravo'
|
|
85
|
+
}]
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
var SOURCE = (0, _getAutocompleteSource.default)(CONFIG);
|
|
89
|
+
SOURCE(undefined, function (results) {
|
|
90
|
+
expect(results.length).toEqual(2);
|
|
91
|
+
expect(results).toEqual([{
|
|
79
92
|
value: 'a',
|
|
80
93
|
label: 'Alpha'
|
|
81
94
|
}, {
|
|
82
95
|
value: 'b',
|
|
83
96
|
label: 'Bravo'
|
|
84
|
-
}]
|
|
85
|
-
}
|
|
86
|
-
};
|
|
87
|
-
var SOURCE = (0, _getAutocompleteSource.default)(CONFIG);
|
|
88
|
-
SOURCE(undefined, function (results) {
|
|
89
|
-
expect(results.length).toEqual(2);
|
|
90
|
-
expect(results).toEqual([{
|
|
91
|
-
value: 'a',
|
|
92
|
-
label: 'Alpha'
|
|
93
|
-
}, {
|
|
94
|
-
value: 'b',
|
|
95
|
-
label: 'Bravo'
|
|
96
|
-
}]);
|
|
97
|
+
}]);
|
|
98
|
+
});
|
|
97
99
|
});
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
100
|
+
it('should handle a null query', function () {
|
|
101
|
+
var CONFIG = {
|
|
102
|
+
data: {
|
|
103
|
+
options: [{
|
|
104
|
+
value: 'a',
|
|
105
|
+
label: 'Alpha'
|
|
106
|
+
}, {
|
|
107
|
+
value: 'b',
|
|
108
|
+
label: 'Bravo'
|
|
109
|
+
}]
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
var SOURCE = (0, _getAutocompleteSource.default)(CONFIG);
|
|
113
|
+
SOURCE(null, function (results) {
|
|
114
|
+
expect(results.length).toEqual(2);
|
|
115
|
+
expect(results).toEqual([{
|
|
103
116
|
value: 'a',
|
|
104
117
|
label: 'Alpha'
|
|
105
118
|
}, {
|
|
106
119
|
value: 'b',
|
|
107
120
|
label: 'Bravo'
|
|
108
|
-
}]
|
|
109
|
-
}
|
|
110
|
-
};
|
|
111
|
-
var SOURCE = (0, _getAutocompleteSource.default)(CONFIG);
|
|
112
|
-
SOURCE(null, function (results) {
|
|
113
|
-
expect(results.length).toEqual(2);
|
|
114
|
-
expect(results).toEqual([{
|
|
115
|
-
value: 'a',
|
|
116
|
-
label: 'Alpha'
|
|
117
|
-
}, {
|
|
118
|
-
value: 'b',
|
|
119
|
-
label: 'Bravo'
|
|
120
|
-
}]);
|
|
121
|
+
}]);
|
|
122
|
+
});
|
|
121
123
|
});
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
124
|
+
it('should handle a missing label on an option', function () {
|
|
125
|
+
var CONFIG = {
|
|
126
|
+
data: {
|
|
127
|
+
options: [{
|
|
128
|
+
value: 'a',
|
|
129
|
+
label: 'Alpha'
|
|
130
|
+
}, {
|
|
131
|
+
value: 'b'
|
|
132
|
+
}]
|
|
133
|
+
}
|
|
134
|
+
};
|
|
135
|
+
var SOURCE = (0, _getAutocompleteSource.default)(CONFIG);
|
|
136
|
+
expect(typeof SOURCE === 'function').toBeTruthy();
|
|
137
|
+
SOURCE('a', function (results) {
|
|
138
|
+
expect(results.length).toEqual(1);
|
|
139
|
+
expect(results).toEqual([{
|
|
127
140
|
value: 'a',
|
|
128
141
|
label: 'Alpha'
|
|
142
|
+
}]);
|
|
143
|
+
});
|
|
144
|
+
});
|
|
145
|
+
});
|
|
146
|
+
describe('with custom item labels', function () {
|
|
147
|
+
it('should get any specified options from the config', function () {
|
|
148
|
+
var CONFIG = {
|
|
149
|
+
item: {
|
|
150
|
+
value: 'currencyCode',
|
|
151
|
+
label: 'currencyCode',
|
|
152
|
+
format: '${currencyName} (${currencyCode})'
|
|
153
|
+
},
|
|
154
|
+
data: {
|
|
155
|
+
options: [{
|
|
156
|
+
currencyName: 'Great British Pounds',
|
|
157
|
+
currencyCode: 'GBP',
|
|
158
|
+
value: 'GBP',
|
|
159
|
+
label: 'GBP'
|
|
160
|
+
}, {
|
|
161
|
+
currencyName: 'United States Dollars',
|
|
162
|
+
currencyCode: 'USD',
|
|
163
|
+
value: 'USD',
|
|
164
|
+
label: 'USD'
|
|
165
|
+
}]
|
|
166
|
+
}
|
|
167
|
+
};
|
|
168
|
+
var SOURCE = (0, _getAutocompleteSource.default)(CONFIG);
|
|
169
|
+
expect(typeof SOURCE === 'function').toBeTruthy();
|
|
170
|
+
SOURCE('GB', function (results) {
|
|
171
|
+
expect(results.length).toEqual(1);
|
|
172
|
+
expect(results).toEqual([{
|
|
173
|
+
currencyName: 'Great British Pounds',
|
|
174
|
+
currencyCode: 'GBP',
|
|
175
|
+
value: 'GBP',
|
|
176
|
+
label: 'GBP'
|
|
177
|
+
}]);
|
|
178
|
+
});
|
|
179
|
+
SOURCE(' (', function (results) {
|
|
180
|
+
expect(results.length).toEqual(2);
|
|
181
|
+
expect(results).toEqual([{
|
|
182
|
+
currencyName: 'Great British Pounds',
|
|
183
|
+
currencyCode: 'GBP',
|
|
184
|
+
value: 'GBP',
|
|
185
|
+
label: 'GBP'
|
|
129
186
|
}, {
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
187
|
+
currencyName: 'United States Dollars',
|
|
188
|
+
currencyCode: 'USD',
|
|
189
|
+
value: 'USD',
|
|
190
|
+
label: 'USD'
|
|
191
|
+
}]);
|
|
192
|
+
});
|
|
193
|
+
});
|
|
194
|
+
it('should handle an empty query', function () {
|
|
195
|
+
var CONFIG = {
|
|
196
|
+
item: {
|
|
197
|
+
value: 'currencyCode',
|
|
198
|
+
label: 'currencyCode',
|
|
199
|
+
format: '${currencyName} (${currencyCode})'
|
|
200
|
+
},
|
|
201
|
+
data: {
|
|
202
|
+
options: [{
|
|
203
|
+
currencyName: 'Great British Pounds',
|
|
204
|
+
currencyCode: 'GBP',
|
|
205
|
+
value: 'GBP',
|
|
206
|
+
label: 'GBP'
|
|
207
|
+
}, {
|
|
208
|
+
currencyName: 'United States Dollars',
|
|
209
|
+
currencyCode: 'USD',
|
|
210
|
+
value: 'USD',
|
|
211
|
+
label: 'USD'
|
|
212
|
+
}]
|
|
213
|
+
}
|
|
214
|
+
};
|
|
215
|
+
var SOURCE = (0, _getAutocompleteSource.default)(CONFIG);
|
|
216
|
+
SOURCE('', function (results) {
|
|
217
|
+
expect(results.length).toEqual(2);
|
|
218
|
+
expect(results).toEqual([{
|
|
219
|
+
currencyName: 'Great British Pounds',
|
|
220
|
+
currencyCode: 'GBP',
|
|
221
|
+
value: 'GBP',
|
|
222
|
+
label: 'GBP'
|
|
223
|
+
}, {
|
|
224
|
+
currencyName: 'United States Dollars',
|
|
225
|
+
currencyCode: 'USD',
|
|
226
|
+
value: 'USD',
|
|
227
|
+
label: 'USD'
|
|
228
|
+
}]);
|
|
229
|
+
});
|
|
230
|
+
});
|
|
231
|
+
it('should handle an undefined query', function () {
|
|
232
|
+
var CONFIG = {
|
|
233
|
+
item: {
|
|
234
|
+
value: 'currencyCode',
|
|
235
|
+
label: 'currencyCode',
|
|
236
|
+
format: '${currencyName} (${currencyCode})'
|
|
237
|
+
},
|
|
238
|
+
data: {
|
|
239
|
+
options: [{
|
|
240
|
+
currencyName: 'Great British Pounds',
|
|
241
|
+
currencyCode: 'GBP',
|
|
242
|
+
value: 'GBP',
|
|
243
|
+
label: 'GBP'
|
|
244
|
+
}, {
|
|
245
|
+
currencyName: 'United States Dollars',
|
|
246
|
+
currencyCode: 'USD',
|
|
247
|
+
value: 'USD',
|
|
248
|
+
label: 'USD'
|
|
249
|
+
}]
|
|
250
|
+
}
|
|
251
|
+
};
|
|
252
|
+
var SOURCE = (0, _getAutocompleteSource.default)(CONFIG);
|
|
253
|
+
SOURCE(undefined, function (results) {
|
|
254
|
+
expect(results.length).toEqual(2);
|
|
255
|
+
expect(results).toEqual([{
|
|
256
|
+
currencyName: 'Great British Pounds',
|
|
257
|
+
currencyCode: 'GBP',
|
|
258
|
+
value: 'GBP',
|
|
259
|
+
label: 'GBP'
|
|
260
|
+
}, {
|
|
261
|
+
currencyName: 'United States Dollars',
|
|
262
|
+
currencyCode: 'USD',
|
|
263
|
+
value: 'USD',
|
|
264
|
+
label: 'USD'
|
|
265
|
+
}]);
|
|
266
|
+
});
|
|
267
|
+
});
|
|
268
|
+
it('should handle a null query', function () {
|
|
269
|
+
var CONFIG = {
|
|
270
|
+
item: {
|
|
271
|
+
value: 'currencyCode',
|
|
272
|
+
label: 'currencyCode',
|
|
273
|
+
format: '${currencyName} (${currencyCode})'
|
|
274
|
+
},
|
|
275
|
+
data: {
|
|
276
|
+
options: [{
|
|
277
|
+
currencyName: 'Great British Pounds',
|
|
278
|
+
currencyCode: 'GBP',
|
|
279
|
+
value: 'GBP',
|
|
280
|
+
label: 'GBP'
|
|
281
|
+
}, {
|
|
282
|
+
currencyName: 'United States Dollars',
|
|
283
|
+
currencyCode: 'USD',
|
|
284
|
+
value: 'USD',
|
|
285
|
+
label: 'USD'
|
|
286
|
+
}]
|
|
287
|
+
}
|
|
288
|
+
};
|
|
289
|
+
var SOURCE = (0, _getAutocompleteSource.default)(CONFIG);
|
|
290
|
+
SOURCE(null, function (results) {
|
|
291
|
+
expect(results.length).toEqual(2);
|
|
292
|
+
expect(results).toEqual([{
|
|
293
|
+
currencyName: 'Great British Pounds',
|
|
294
|
+
currencyCode: 'GBP',
|
|
295
|
+
value: 'GBP',
|
|
296
|
+
label: 'GBP'
|
|
297
|
+
}, {
|
|
298
|
+
currencyName: 'United States Dollars',
|
|
299
|
+
currencyCode: 'USD',
|
|
300
|
+
value: 'USD',
|
|
301
|
+
label: 'USD'
|
|
302
|
+
}]);
|
|
303
|
+
});
|
|
304
|
+
});
|
|
305
|
+
it('should handle a missing label on an option', function () {
|
|
306
|
+
var CONFIG = {
|
|
307
|
+
item: {
|
|
308
|
+
value: 'currencyCode',
|
|
309
|
+
label: 'currencyCode',
|
|
310
|
+
format: '${currencyName} (${currencyCode})'
|
|
311
|
+
},
|
|
312
|
+
data: {
|
|
313
|
+
options: [{
|
|
314
|
+
currencyName: 'Great British Pounds',
|
|
315
|
+
currencyCode: 'GBP',
|
|
316
|
+
value: 'GBP',
|
|
317
|
+
label: 'GBP'
|
|
318
|
+
}, {
|
|
319
|
+
currencyName: 'United States Dollars',
|
|
320
|
+
currencyCode: 'USD',
|
|
321
|
+
value: 'USD'
|
|
322
|
+
}]
|
|
323
|
+
}
|
|
324
|
+
};
|
|
325
|
+
var SOURCE = (0, _getAutocompleteSource.default)(CONFIG);
|
|
326
|
+
expect(typeof SOURCE === 'function').toBeTruthy();
|
|
327
|
+
SOURCE('a', function (results) {
|
|
328
|
+
// We expect 2 results here instead of 1 because defining a custom
|
|
329
|
+
// format for item labels means the label is constructed upon processing
|
|
330
|
+
// a query - we're not relying on the 'label' field of the option.
|
|
331
|
+
expect(results.length).toEqual(2);
|
|
332
|
+
expect(results).toEqual([{
|
|
333
|
+
currencyName: 'Great British Pounds',
|
|
334
|
+
currencyCode: 'GBP',
|
|
335
|
+
value: 'GBP',
|
|
336
|
+
label: 'GBP'
|
|
337
|
+
}, {
|
|
338
|
+
currencyName: 'United States Dollars',
|
|
339
|
+
currencyCode: 'USD',
|
|
340
|
+
value: 'USD',
|
|
341
|
+
label: ''
|
|
342
|
+
}]);
|
|
343
|
+
});
|
|
142
344
|
});
|
|
143
345
|
});
|
|
144
346
|
});
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _ = _interopRequireDefault(require(".."));
|
|
9
|
+
|
|
10
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
11
|
+
|
|
12
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
13
|
+
|
|
14
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
15
|
+
|
|
16
|
+
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Apply properties to a page based on whether certain conditions are met.
|
|
20
|
+
* @param {object} page The page object.
|
|
21
|
+
* @returns A copy of the page object with any passing conditional
|
|
22
|
+
* properties applied.
|
|
23
|
+
*/
|
|
24
|
+
var applyConditionalProperties = function applyConditionalProperties(page) {
|
|
25
|
+
if (!page.conditionalProperties) {
|
|
26
|
+
return page;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
var pageWithProperties = _objectSpread({}, page);
|
|
30
|
+
|
|
31
|
+
page.conditionalProperties.forEach(function (entry) {
|
|
32
|
+
if (_.default.Condition.met(entry.condition, page.formData[entry.condition.field])) {
|
|
33
|
+
pageWithProperties = Object.assign(pageWithProperties, entry.properties);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
;
|
|
37
|
+
});
|
|
38
|
+
return pageWithProperties;
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
var _default = applyConditionalProperties;
|
|
42
|
+
exports.default = _default;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _applyConditionalProperties = _interopRequireDefault(require("./applyConditionalProperties"));
|
|
4
|
+
|
|
5
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
6
|
+
|
|
7
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
8
|
+
|
|
9
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
10
|
+
|
|
11
|
+
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
12
|
+
|
|
13
|
+
describe('utils.FormPage.applyConditionalProperties', function () {
|
|
14
|
+
it('should not change the page if there are no conditional properties', function () {
|
|
15
|
+
var PAGE = {
|
|
16
|
+
id: 'testPage'
|
|
17
|
+
};
|
|
18
|
+
var result = (0, _applyConditionalProperties.default)(PAGE);
|
|
19
|
+
expect(result).toEqual(PAGE);
|
|
20
|
+
});
|
|
21
|
+
it('should not apply properties with conditions that have not been met', function () {
|
|
22
|
+
var PAGE = {
|
|
23
|
+
id: 'testPage',
|
|
24
|
+
conditionalProperties: [{
|
|
25
|
+
condition: {
|
|
26
|
+
field: 'alpha',
|
|
27
|
+
op: '=',
|
|
28
|
+
value: '123'
|
|
29
|
+
},
|
|
30
|
+
properties: {
|
|
31
|
+
beta: '456'
|
|
32
|
+
}
|
|
33
|
+
}],
|
|
34
|
+
formData: {
|
|
35
|
+
alpha: '012'
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
var result = (0, _applyConditionalProperties.default)(PAGE);
|
|
39
|
+
expect(result).toEqual(PAGE);
|
|
40
|
+
});
|
|
41
|
+
it('should apply properties with conditions that have been met', function () {
|
|
42
|
+
var PAGE = {
|
|
43
|
+
id: 'testPage',
|
|
44
|
+
conditionalProperties: [{
|
|
45
|
+
condition: {
|
|
46
|
+
field: 'alpha',
|
|
47
|
+
op: '=',
|
|
48
|
+
value: '123'
|
|
49
|
+
},
|
|
50
|
+
properties: {
|
|
51
|
+
beta: '456'
|
|
52
|
+
}
|
|
53
|
+
}],
|
|
54
|
+
formData: {
|
|
55
|
+
alpha: '123'
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
var result = (0, _applyConditionalProperties.default)(PAGE);
|
|
59
|
+
expect(result).toEqual(_objectSpread(_objectSpread({}, PAGE), {}, {
|
|
60
|
+
beta: '456'
|
|
61
|
+
}));
|
|
62
|
+
});
|
|
63
|
+
});
|
|
@@ -5,6 +5,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
|
|
8
|
+
var _applyConditionalProperties = _interopRequireDefault(require("./applyConditionalProperties"));
|
|
9
|
+
|
|
8
10
|
var _getFormPage = _interopRequireDefault(require("./getFormPage"));
|
|
9
11
|
|
|
10
12
|
var _getFormPages = _interopRequireDefault(require("./getFormPages"));
|
|
@@ -16,6 +18,7 @@ var _showFormPageCYA = _interopRequireDefault(require("./showFormPageCYA"));
|
|
|
16
18
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
17
19
|
|
|
18
20
|
var FormPage = {
|
|
21
|
+
applyConditionalProperties: _applyConditionalProperties.default,
|
|
19
22
|
get: _getFormPage.default,
|
|
20
23
|
getAll: _getFormPages.default,
|
|
21
24
|
show: _showFormPage.default,
|