@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.
@@ -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 actions from pages.
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
- onPageChange(_currentPage || currentTask.pages[0]);
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 the last page of a complete task if noTaskCYAs specified', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee28() {
935
- var ON_SUBMIT, HOOKS, TASK_LIST_WITH_NO_TASK_CYAS, taskList, newPage;
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
- _context28.next = 7;
954
- return (0, _testUtils.act)( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee27() {
955
- return regeneratorRuntime.wrap(function _callee27$(_context27) {
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 (_context27.prev = _context27.next) {
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 _context27.stop();
1024
+ return _context29.stop();
966
1025
  }
967
1026
  }
968
- }, _callee27);
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 _context28.stop();
1076
+ return _context30.stop();
1018
1077
  }
1019
1078
  }
1020
- }, _callee28);
1079
+ }, _callee30);
1021
1080
  })));
1022
- it('should handle cancellation from a page', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee30() {
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 _callee30$(_context30) {
1084
+ return regeneratorRuntime.wrap(function _callee32$(_context32) {
1026
1085
  while (1) {
1027
- switch (_context30.prev = _context30.next) {
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
- _context30.next = 5;
1039
- return (0, _testUtils.act)( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee29() {
1040
- return regeneratorRuntime.wrap(function _callee29$(_context29) {
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 (_context29.prev = _context29.next) {
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 _context29.stop();
1110
+ return _context31.stop();
1052
1111
  }
1053
1112
  }
1054
- }, _callee29);
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 _context30.stop();
1137
+ return _context32.stop();
1079
1138
  }
1080
1139
  }
1081
- }, _callee30);
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 _callee32() {
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 _callee32$(_context32) {
1144
+ return regeneratorRuntime.wrap(function _callee34$(_context34) {
1086
1145
  while (1) {
1087
- switch (_context32.prev = _context32.next) {
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
- _context32.next = 7;
1102
- return (0, _testUtils.act)( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee31() {
1103
- return regeneratorRuntime.wrap(function _callee31$(_context31) {
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 (_context31.prev = _context31.next) {
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 _context31.stop();
1172
+ return _context33.stop();
1114
1173
  }
1115
1174
  }
1116
- }, _callee31);
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 _context32.stop();
1192
+ return _context34.stop();
1134
1193
  }
1135
1194
  }
1136
- }, _callee32);
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: currentPage.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
- }), isGroup && /*#__PURE__*/_react.default.createElement("div", {
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 _render4 = (0, _react.render)( /*#__PURE__*/_react2.default.createElement(_SummaryList.default, {
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 = _render4.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 _render5 = (0, _react.render)( /*#__PURE__*/_react2.default.createElement(_SummaryList.default, {
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 = _render5.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 _render6 = (0, _react.render)( /*#__PURE__*/_react2.default.createElement(_SummaryList.default, {
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 = _render6.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 _render7 = (0, _react.render)( /*#__PURE__*/_react2.default.createElement(_SummaryList.default, {
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 = _render7.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
- onGoingBack: function onGoingBack() {},
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
- onGoingBack: (overrides === null || overrides === void 0 ? void 0 : overrides.onGoingBack) || DEFAULT_HOOKS.onGoingBack,
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 lcLabel = opt.label ? opt.label.toLowerCase() : '';
22
- return lcLabel.includes(lcQuery);
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
- it('should get any specified options from the config', function () {
20
- var CONFIG = {
21
- data: {
22
- options: [{
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
- var SOURCE = (0, _getAutocompleteSource.default)(CONFIG);
32
- expect(typeof SOURCE === 'function').toBeTruthy();
33
- SOURCE('a', function (results) {
34
- expect(results.length).toEqual(2);
35
- expect(results).toEqual([{
36
- value: 'a',
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
- it('should handle an empty query', function () {
52
- var CONFIG = {
53
- data: {
54
- options: [{
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
- it('should handle an undefined query', function () {
76
- var CONFIG = {
77
- data: {
78
- options: [{
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
- it('should handle a null query', function () {
100
- var CONFIG = {
101
- data: {
102
- options: [{
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
- it('should handle a missing label on an option', function () {
124
- var CONFIG = {
125
- data: {
126
- options: [{
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
- value: 'b'
131
- }]
132
- }
133
- };
134
- var SOURCE = (0, _getAutocompleteSource.default)(CONFIG);
135
- expect(typeof SOURCE === 'function').toBeTruthy();
136
- SOURCE('a', function (results) {
137
- expect(results.length).toEqual(1);
138
- expect(results).toEqual([{
139
- value: 'a',
140
- label: 'Alpha'
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,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ukhomeoffice/cop-react-form-renderer",
3
- "version": "4.53.0",
3
+ "version": "4.55.0",
4
4
  "private": false,
5
5
  "scripts": {
6
6
  "clean": "rimraf dist",