@ukhomeoffice/cop-react-form-renderer 4.76.0 → 4.77.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.
@@ -20,6 +20,7 @@ var _handlers = _interopRequireDefault(require("./handlers"));
20
20
  var _helpers = _interopRequireDefault(require("./helpers"));
21
21
  var _onCYAAction = _interopRequireDefault(require("./onCYAAction"));
22
22
  var _onPageAction = _interopRequireDefault(require("./onPageAction"));
23
+ var _onTaskAction2 = _interopRequireDefault(require("./onTaskAction"));
23
24
  require("./FormRenderer.scss");
24
25
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
25
26
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
@@ -278,38 +279,6 @@ var InternalFormRenderer = function InternalFormRenderer(_ref2) {
278
279
  hooks.onChange(data);
279
280
  };
280
281
 
281
- // Kick off a task, gather required pages and move to the correct point
282
- var onTaskAction = function onTaskAction(currentTask) {
283
- if (currentTask) {
284
- var task = currentTask;
285
- task.fullPages = [];
286
- task.pages.forEach(function (page) {
287
- task.fullPages.push(_helpers.default.getPage(page, pages));
288
- });
289
- setCurrentTask(task);
290
- var state = _objectSpread({}, task);
291
- if (task.state === _models.TaskStates.TYPES.COMPLETE) {
292
- if (hubDetails !== null && hubDetails !== void 0 && hubDetails.noTaskCYAs) {
293
- // If the task is complete and there are no CYA's then show user first page
294
- var currentPage = data.formStatus.tasks[task.name].currentPage;
295
- onPageChange(task.pages[0] || currentPage);
296
- } else if (task.customCYA) {
297
- onPageChange(task.customCYA);
298
- } else {
299
- onPageChange(_models.FormPages.CYA, state);
300
- }
301
- } else if (task.state === _models.TaskStates.TYPES.IN_PROGRESS) {
302
- var _currentPage = data.formStatus.tasks[task.name].currentPage;
303
- onPageChange(_currentPage || task.pages[0], state);
304
- } else if (task.firstPage) {
305
- var _currentPage2 = task.firstPage;
306
- onPageChange(_currentPage2 || task.pages[0], state);
307
- } else {
308
- onPageChange(task.pages[0], state);
309
- }
310
- }
311
- };
312
-
313
282
  // Handle navigation from "Check your answers".
314
283
  // Passing a dataCallback allows changes to formData from the
315
284
  // CYA screen. This is necessary to allow changing the active
@@ -326,7 +295,7 @@ var InternalFormRenderer = function InternalFormRenderer(_ref2) {
326
295
  hubDetails.sections.every(function (section) {
327
296
  return section.tasks.every(function (task) {
328
297
  if (task.pages.includes(page.pageId) && task.name !== currentTask.name) {
329
- onTaskAction(task);
298
+ (0, _onTaskAction2.default)(task, pages, setCurrentTask, hubDetails, data, onPageChange);
330
299
  return false;
331
300
  }
332
301
  return true;
@@ -364,7 +333,9 @@ var InternalFormRenderer = function InternalFormRenderer(_ref2) {
364
333
  type: type
365
334
  })), hub === _models.HubFormats.TASK && formState.pageId === _models.FormPages.HUB && /*#__PURE__*/_react.default.createElement(_TaskList.default, _extends({}, hubDetails, {
366
335
  refNumber: data.businessKey,
367
- onTaskAction: onTaskAction,
336
+ onTaskAction: function onTaskAction(task) {
337
+ (0, _onTaskAction2.default)(task, pages, setCurrentTask, hubDetails, data, onPageChange);
338
+ },
368
339
  formData: data
369
340
  })), formState.page && !formState.cya && !formState.page.collection && /*#__PURE__*/_react.default.createElement(_FormPage.default, {
370
341
  page: formState.page,
@@ -4,8 +4,8 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
- var _utils = _interopRequireDefault(require("../../../utils"));
8
7
  var _models = require("../../../models");
8
+ var _utils = _interopRequireDefault(require("../../../utils"));
9
9
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
10
  function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
11
11
  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; }
@@ -14,7 +14,6 @@ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key i
14
14
  function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
15
15
  function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
16
16
  /**
17
- *
18
17
  * @param {boolean} complete - true if task complete
19
18
  * @param {boolean} currentPage - true if current page
20
19
  * @param {TaskStates.TYPES|string} defaultState - default state to set task
@@ -35,14 +34,19 @@ var getCurrentTaskState = function getCurrentTaskState(_ref) {
35
34
 
36
35
  /**
37
36
  * check if dependent tasks have been completed
38
- * @param tasks - list of tasks
39
- * @param mustBeComplete - tasks which are depended on
37
+ * @param {object} taskStates - list of tasks
38
+ * @param {array} mustBeComplete - tasks which are depended on
39
+ * @param {boolean} ignoreSkipped - skipped tasks don't need to have been completed
40
40
  * @returns {boolean} true if dependent tasks complete
41
41
  */
42
- var allDependentTasksComplete = function allDependentTasksComplete(tasks, mustBeComplete) {
42
+ var allDependentTasksComplete = function allDependentTasksComplete(taskStates, mustBeComplete) {
43
+ var ignoreSkipped = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
43
44
  return mustBeComplete.reduce(function (allComplete, taskName) {
44
- var _tasks$taskName;
45
- return allComplete && ((_tasks$taskName = tasks[taskName]) === null || _tasks$taskName === void 0 ? void 0 : _tasks$taskName.complete);
45
+ var task = taskStates[taskName];
46
+ if (ignoreSkipped && (task === null || task === void 0 ? void 0 : task.state) === _models.TaskStates.TYPES.SKIPPED) {
47
+ return allComplete;
48
+ }
49
+ return allComplete && (task === null || task === void 0 ? void 0 : task.complete);
46
50
  }, true);
47
51
  };
48
52
  var isPreviousTaskComplete = function isPreviousTaskComplete(tasks, taskIndex) {
@@ -61,20 +65,20 @@ var isPreviousTaskComplete = function isPreviousTaskComplete(tasks, taskIndex) {
61
65
  * @param {object} task - current task object
62
66
  * @param {number} taskIndex - order number of task in list
63
67
  * @param {object[]} taskList - list of tasks (associated with section)
64
- * @param tasks - list of task state
68
+ * @param {object} taskStates - map of task state
65
69
  * @param {boolean} nonSequential - set if tasks can be performed out of order
66
70
  * @param {boolean} allowFirst true if first task in list can be accepted
67
71
  * @returns {TYPES|string} new state
68
72
  */
69
73
 
70
- var updateTaskState = function updateTaskState(task, taskIndex, taskList, tasks) {
74
+ var updateTaskState = function updateTaskState(task, taskIndex, taskList, taskStates) {
71
75
  var nonSequential = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
72
76
  var allowFirst = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : true;
73
- if (tasks[task.name]) {
74
- return getCurrentTaskState(tasks[task.name], task.state);
77
+ if (taskStates[task.name]) {
78
+ return getCurrentTaskState(taskStates[task.name], task.state);
75
79
  }
76
80
  if (nonSequential) {
77
- if (task.depends_on && !allDependentTasksComplete(tasks, task.depends_on)) {
81
+ if (task.depends_on && !allDependentTasksComplete(taskStates, task.depends_on, task.ignoreSkipped)) {
78
82
  return _models.TaskStates.TYPES.CANNOT_START_YET;
79
83
  }
80
84
  return _models.TaskStates.TYPES.NOT_STARTED;
@@ -93,27 +97,20 @@ var updateTaskState = function updateTaskState(task, taskIndex, taskList, tasks)
93
97
  * update all tasks in section with new state.
94
98
  * note use of clone and forEach as some tasks depend on previous update
95
99
  * @param {object} section - section to be processed
96
- * @param tasks - task updates
97
- * @param nonSequential - true if non-sequential task performance allowed
98
- * @param allowFirst - true if first task can be started
100
+ * @param {object} taskStates - task updates
101
+ * @param {boolean} nonSequential - true if non-sequential task performance allowed
102
+ * @param {boolean} allowFirst - true if first task can be started
99
103
  * @returns {object} - updated section
100
104
  */
101
- var updateTasks = function updateTasks(section, tasks, nonSequential, allowFirst, data) {
105
+ var updateTasks = function updateTasks(section, taskStates, nonSequential, allowFirst) {
102
106
  var clone = section.tasks.map(function (a) {
103
107
  return _objectSpread({}, a);
104
108
  });
105
- clone.forEach(function (task, taskIndex, taskList) {
106
- var _currentTask$show_whe;
107
- var currentTask = task;
108
- if (section.skipped) {
109
- currentTask.state = _models.TaskStates.TYPES.SKIPPED;
110
- } else if (data && !_utils.default.Condition.met(currentTask.show_when, data[(_currentTask$show_whe = currentTask.show_when) === null || _currentTask$show_whe === void 0 ? void 0 : _currentTask$show_whe.field])) {
111
- currentTask.state = _models.TaskStates.TYPES.SKIPPED;
112
- } else {
113
- var _task = task;
114
- _task.state = updateTaskState(currentTask, taskIndex, taskList, tasks, nonSequential, allowFirst);
115
- }
116
- ;
109
+ clone.filter(function (t) {
110
+ return t.state !== _models.TaskStates.TYPES.SKIPPED;
111
+ }).forEach(function (t, index) {
112
+ var task = t;
113
+ task.state = updateTaskState(task, index, clone, taskStates, nonSequential, allowFirst);
117
114
  });
118
115
  return clone;
119
116
  };
@@ -142,28 +139,62 @@ var isPreviousSectionComplete = function isPreviousSectionComplete(sections, cur
142
139
  /**
143
140
  * update task states in sections
144
141
  * @param {object[]} sections - array of sections
145
- * @param {object} tasks - update task states
142
+ * @param {object} taskStates - update task states
146
143
  * @param {boolean} nonSequential - true if tasks can be performed non-sequentially
147
144
  * @param {object} data - current form data
148
145
  * @returns {object[]} - updated sections - note this is a clone
149
146
  */
150
- var getUpdatedSectionStates = function getUpdatedSectionStates(sections, tasks) {
147
+ var getUpdatedSectionStates = function getUpdatedSectionStates(sections, taskStates) {
151
148
  var nonSequential = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
152
149
  var data = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
153
- var clone = sections.map(function (a) {
154
- return _objectSpread({}, a);
155
- });
156
- clone.forEach(function (section, sectionIndex, sectionList) {
157
- var _currentSection$show_;
158
- var currentSection = section;
159
- var allowFirst = sectionIndex === 0 || isPreviousSectionComplete(sectionList, sectionIndex);
160
- // Support a single show_when check on a section. Support for an
161
- // array of checks will have to be added if required.
162
- if (data && !_utils.default.Condition.met(currentSection.show_when, data[(_currentSection$show_ = currentSection.show_when) === null || _currentSection$show_ === void 0 ? void 0 : _currentSection$show_.field])) {
163
- currentSection.skipped = true;
150
+ // Make a clone and handle any hidden sections.
151
+ var clone = sections.map(function (section) {
152
+ var showWhen = section.show_when ? [section.show_when].flat() : [];
153
+ if (data && !_utils.default.Condition.meetsAll(showWhen, data)) {
154
+ return _objectSpread(_objectSpread({}, section), {}, {
155
+ skipped: true,
156
+ tasks: section.tasks.map(function (task) {
157
+ return _objectSpread(_objectSpread({}, task), {}, {
158
+ state: _models.TaskStates.TYPES.SKIPPED
159
+ });
160
+ })
161
+ });
164
162
  }
165
163
  ;
166
- currentSection.tasks = updateTasks(currentSection, tasks, nonSequential, allowFirst, data);
164
+ return _objectSpread({}, section);
165
+ });
166
+
167
+ // Now iterate through the clone and handle any hidden tasks.
168
+ clone.forEach(function (s) {
169
+ var section = s;
170
+ section.tasks = section.tasks.map(function (task) {
171
+ var showWhen = task.show_when ? [task.show_when].flat() : [];
172
+ if (data && !_utils.default.Condition.meetsAll(showWhen, data)) {
173
+ return _objectSpread(_objectSpread({}, task), {}, {
174
+ state: _models.TaskStates.TYPES.SKIPPED
175
+ });
176
+ }
177
+ return _objectSpread({}, task);
178
+ });
179
+ });
180
+
181
+ // Update the taskStates to account for skipped tasks.
182
+ var states = _objectSpread({}, taskStates);
183
+ clone.forEach(function (section) {
184
+ section.tasks.filter(function (t) {
185
+ return t.state === _models.TaskStates.TYPES.SKIPPED;
186
+ }).forEach(function (task) {
187
+ states[task.name] = _objectSpread(_objectSpread({}, states[task.name]), {}, {
188
+ state: _models.TaskStates.TYPES.SKIPPED
189
+ });
190
+ });
191
+ });
192
+
193
+ // Now figure out all the task states.
194
+ clone.forEach(function (s, index) {
195
+ var section = s;
196
+ var allowFirst = index === 0 || isPreviousSectionComplete(clone, index);
197
+ section.tasks = updateTasks(section, states, nonSequential, allowFirst);
167
198
  });
168
199
  return clone;
169
200
  };
@@ -1,10 +1,14 @@
1
1
  "use strict";
2
2
 
3
- var _getUpdatedSectionStates = _interopRequireDefault(require("./getUpdatedSectionStates"));
4
3
  var _models = require("../../../models");
4
+ var _getUpdatedSectionStates = _interopRequireDefault(require("./getUpdatedSectionStates"));
5
5
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
6
- // Local imports
7
-
6
+ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
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
+ 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; }
9
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
10
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
11
+ function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
8
12
  describe('components.FormRenderer.helpers.getUpdatedSectionStates', function () {
9
13
  describe('sequential tasks', function () {
10
14
  it("should set all tasks to '".concat(_models.TaskStates.TYPES.CANNOT_START_YET, "' excluding the first which should be '").concat(_models.TaskStates.TYPES.NOT_STARTED, "'"), function () {
@@ -369,5 +373,86 @@ describe('components.FormRenderer.helpers.getUpdatedSectionStates', function ()
369
373
  expect(RESULT[1].tasks[0].state).toEqual(_models.TaskStates.TYPES.NOT_STARTED); // Charlie
370
374
  expect(RESULT[2].tasks[0].state).toEqual(_models.TaskStates.TYPES.NOT_STARTED); // Delta
371
375
  });
376
+
377
+ it('should not allow dependent state to start if incomplete dependencies are skipped, but skipped are not ignored', function () {
378
+ var TASKS = {
379
+ 'Alpha': {
380
+ complete: true
381
+ },
382
+ 'Bravo': {
383
+ complete: false,
384
+ state: _models.TaskStates.TYPES.SKIPPED
385
+ },
386
+ 'Delta': {}
387
+ };
388
+ var RESULT = (0, _getUpdatedSectionStates.default)(SECTIONS, TASKS, NON_SEQUENTIAL);
389
+ expect(RESULT[1].tasks[0].state).toEqual(_models.TaskStates.TYPES.CANNOT_START_YET); // Charlie
390
+ });
391
+
392
+ it('should allow dependent state to start if incomplete dependencies are skipped, and skipped are ignored', function () {
393
+ var SKIPPABLE_SECTIONS = [SECTIONS[0], _objectSpread(_objectSpread({}, SECTIONS[1]), {}, {
394
+ tasks: [_objectSpread(_objectSpread({}, SECTIONS[1].tasks[0]), {}, {
395
+ ignoreSkipped: true
396
+ })]
397
+ }), SECTIONS[2]];
398
+ var TASKS = {
399
+ 'Alpha': {
400
+ complete: true
401
+ },
402
+ 'Bravo': {
403
+ complete: false,
404
+ state: _models.TaskStates.TYPES.SKIPPED
405
+ },
406
+ 'Delta': {}
407
+ };
408
+ var RESULT = (0, _getUpdatedSectionStates.default)(SKIPPABLE_SECTIONS, TASKS, NON_SEQUENTIAL);
409
+ expect(RESULT[1].tasks[0].state).toEqual(_models.TaskStates.TYPES.NOT_STARTED); // Charlie
410
+ });
411
+
412
+ it('should automatically skip tasks that are not shown', function () {
413
+ var SHOW_WHEN_SECTIONS = [{
414
+ name: 'First',
415
+ tasks: [{
416
+ name: 'Alpha'
417
+ }]
418
+ }, {
419
+ name: 'Second',
420
+ tasks: [{
421
+ name: 'Bravo',
422
+ show_when: [{
423
+ field: 'echo',
424
+ op: '=',
425
+ value: 'foxtrot'
426
+ }, {
427
+ field: 'golf',
428
+ op: '=',
429
+ value: 'indigo'
430
+ } // shouldn't be shown
431
+ ]
432
+ }]
433
+ }, {
434
+ name: 'Third',
435
+ tasks: [{
436
+ name: 'Charlie',
437
+ depends_on: ['Alpha', 'Bravo'],
438
+ ignoreSkipped: true
439
+ }]
440
+ }];
441
+ var TASKS = {
442
+ 'Alpha': {
443
+ complete: true
444
+ },
445
+ 'Bravo': {
446
+ complete: false
447
+ },
448
+ 'Delta': {}
449
+ };
450
+ var DATA = {
451
+ echo: 'foxtrot',
452
+ golf: 'hotel'
453
+ };
454
+ var RESULT = (0, _getUpdatedSectionStates.default)(SHOW_WHEN_SECTIONS, TASKS, NON_SEQUENTIAL, DATA);
455
+ expect(RESULT[2].tasks[0].state).toEqual(_models.TaskStates.TYPES.NOT_STARTED); // Charlie
456
+ });
372
457
  });
373
458
  });
@@ -13,7 +13,7 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
13
13
  function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
14
14
  function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
15
15
  function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
16
- var onTaskAction = function onTaskAction(currentTask, pages, setCurrentTask, hubDetails, data, onPageChange, FormPages) {
16
+ var onTaskAction = function onTaskAction(currentTask, pages, setCurrentTask, hubDetails, data, onPageChange) {
17
17
  if (currentTask) {
18
18
  var task = currentTask;
19
19
  task.fullPages = [];
@@ -31,7 +31,7 @@ var onTaskAction = function onTaskAction(currentTask, pages, setCurrentTask, hub
31
31
  } else if (task.customCYA) {
32
32
  onPageChange(task.customCYA);
33
33
  } else {
34
- onPageChange(FormPages.CYA, state);
34
+ onPageChange(_models.FormPages.CYA, state);
35
35
  }
36
36
  } else if (task.state === _models.TaskStates.TYPES.IN_PROGRESS) {
37
37
  var _currentPage = data.formStatus.tasks[currentTask.name].currentPage;
@@ -64,10 +64,7 @@ describe('components.FormRenderer.onTaskAction', function () {
64
64
  setCurrentTask: mockSetCurrentTask,
65
65
  hubDetails: {},
66
66
  data: DATA,
67
- onPageChange: mockOnPageChange,
68
- FormPages: {
69
- CYA: 'cyaPage'
70
- }
67
+ onPageChange: mockOnPageChange
71
68
  };
72
69
  var genericChecks = function genericChecks(currentTask) {
73
70
  expect(_helpers.default.getPageArgs.length).toEqual(currentTask.pages.length);
@@ -136,7 +133,7 @@ describe('components.FormRenderer.onTaskAction', function () {
136
133
  _onTaskAction.default.apply(void 0, Object.values(CUSTOM_ARGS));
137
134
  genericChecks(CUSTOM_ARGS.currentTask);
138
135
  expect(onPageChangeArgs.length).toEqual(1);
139
- expect(onPageChangeArgs[0].page).toEqual(CUSTOM_ARGS.FormPages.CYA);
136
+ expect(onPageChangeArgs[0].page).toEqual(_models.FormPages.CYA);
140
137
  expect(onPageChangeArgs[0].state).toEqual(CUSTOM_ARGS.currentTask);
141
138
  });
142
139
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ukhomeoffice/cop-react-form-renderer",
3
- "version": "4.76.0",
3
+ "version": "4.77.0",
4
4
  "private": false,
5
5
  "scripts": {
6
6
  "clean": "rimraf dist",