@ukhomeoffice/cop-react-form-renderer 4.29.0-alpha → 4.29.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.
@@ -69,9 +69,7 @@ var CheckYourAnswers = function CheckYourAnswers(_ref) {
69
69
  noChangeAction = _ref.noChangeAction,
70
70
  groups = _ref.groups,
71
71
  sections = _ref.sections,
72
- type = _ref.type,
73
- cysa = _ref.cysa,
74
- currentPage = _ref.currentPage;
72
+ type = _ref.type;
75
73
 
76
74
  var _useState = (0, _react.useState)([]),
77
75
  _useState2 = _slicedToArray(_useState, 2),
@@ -88,7 +86,7 @@ var CheckYourAnswers = function CheckYourAnswers(_ref) {
88
86
 
89
87
  (0, _react.useEffect)(function () {
90
88
  var getRows = function getRows(page, pageIndex) {
91
- var rows = _utils.default.CheckYourAnswers.getRows(page, onRowAction, currentPage);
89
+ var rows = _utils.default.CheckYourAnswers.getRows(page, onRowAction);
92
90
 
93
91
  return rows.map(function (row, index) {
94
92
  return _objectSpread(_objectSpread({}, row), {}, {
@@ -111,23 +109,8 @@ var CheckYourAnswers = function CheckYourAnswers(_ref) {
111
109
  }).filter(function (p) {
112
110
  return !!p;
113
111
  });
114
-
115
- if (cysa) {
116
- var indexOfCurrentPage = pagesWithRows.map(function (object) {
117
- return object.id;
118
- }).indexOf(currentPage);
119
-
120
- if (indexOfCurrentPage === 0) {
121
- setPages(pagesWithRows.slice(0, 1));
122
- } else {
123
- setPages(pagesWithRows.slice(0, indexOfCurrentPage));
124
- }
125
- } else {
126
- setPages(pagesWithRows);
127
- }
128
-
129
- ;
130
- }, [_pages, onRowAction, setPages, currentPage, cysa]);
112
+ setPages(pagesWithRows);
113
+ }, [_pages, onRowAction, setPages]);
131
114
  var listMarginBottom = hide_page_titles ? 0 : DEFAULT_MARGIN_BOTTOM;
132
115
 
133
116
  var isLastPage = function isLastPage(index) {
@@ -161,12 +144,11 @@ var CheckYourAnswers = function CheckYourAnswers(_ref) {
161
144
  return groupAnswer;
162
145
  };
163
146
 
164
- var cysaTitle = 'Check your saved answers';
165
147
  return /*#__PURE__*/_react.default.createElement("div", {
166
148
  className: DEFAULT_CLASS
167
149
  }, title && !hide_title && /*#__PURE__*/_react.default.createElement(_copReactComponents.LargeHeading, {
168
150
  key: "heading"
169
- }, cysa ? cysaTitle : title), errors && errors.length > 0 && /*#__PURE__*/_react.default.createElement(_copReactComponents.ErrorSummary, {
151
+ }, title), errors && errors.length > 0 && /*#__PURE__*/_react.default.createElement(_copReactComponents.ErrorSummary, {
170
152
  errors: errors
171
153
  }), type === 'task-list-cya' && pages.length > 0 && sections && sections.map(function (section) {
172
154
  return section.tasks.map(function (task) {
@@ -170,17 +170,7 @@ var InternalFormRenderer = function InternalFormRenderer(_ref2) {
170
170
  var _useState19 = (0, _react.useState)(false),
171
171
  _useState20 = _slicedToArray(_useState19, 2),
172
172
  goingBack = _useState20[0],
173
- setGoingBack = _useState20[1];
174
-
175
- var _useState21 = (0, _react.useState)(false),
176
- _useState22 = _slicedToArray(_useState21, 2),
177
- continueOnly = _useState22[0],
178
- setContinueOnly = _useState22[1];
179
-
180
- var _useState23 = (0, _react.useState)(),
181
- _useState24 = _slicedToArray(_useState23, 2),
182
- currentTaskListPage = _useState24[0],
183
- setCurrentTaskListPage = _useState24[1]; // Set up hooks.
173
+ setGoingBack = _useState20[1]; // Set up hooks.
184
174
 
185
175
 
186
176
  var _useHooks = (0, _hooks.useHooks)(),
@@ -193,29 +183,13 @@ var InternalFormRenderer = function InternalFormRenderer(_ref2) {
193
183
  validate = _useValidation.validate; // Need to set submission data when going back
194
184
 
195
185
 
196
- window.onpopstate = function (e) {
186
+ window.onpopstate = function () {
197
187
  var _formState$page;
198
188
 
199
189
  if (document.location.hash) {
200
190
  return;
201
191
  }
202
192
 
203
- if (e.state && e.state.continueOnly !== undefined) {
204
- var _e$state;
205
-
206
- setContinueOnly((_e$state = e.state) === null || _e$state === void 0 ? void 0 : _e$state.continueOnly);
207
- }
208
-
209
- if (e.state && e.state.fullPages !== undefined) {
210
- setCurrentTask(function (prev) {
211
- var _e$state2;
212
-
213
- return _objectSpread(_objectSpread({}, prev), {}, {
214
- fullPages: (_e$state2 = e.state) === null || _e$state2 === void 0 ? void 0 : _e$state2.fullPages
215
- });
216
- });
217
- }
218
-
219
193
  setGoingBack(true);
220
194
  hooks.onGoingBack();
221
195
  clearErrors();
@@ -318,10 +292,9 @@ var InternalFormRenderer = function InternalFormRenderer(_ref2) {
318
292
  }, [currentTask.fullPages, data, hubDetails === null || hubDetails === void 0 ? void 0 : hubDetails.sections, hubDetails === null || hubDetails === void 0 ? void 0 : hubDetails.nonSequential]);
319
293
 
320
294
  var onPageChange = function onPageChange(newPageId) {
321
- var state = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
322
295
  clearErrors();
323
296
  setPageId(newPageId);
324
- hooks.onPageChange(newPageId, state);
297
+ hooks.onPageChange(newPageId);
325
298
  };
326
299
 
327
300
  (0, _react.useEffect)(function () {
@@ -363,13 +336,8 @@ var InternalFormRenderer = function InternalFormRenderer(_ref2) {
363
336
  break;
364
337
 
365
338
  case _models.PageAction.TYPES.SAVE_AND_NAVIGATE:
366
- var state = {
367
- 'continueOnly': false,
368
- 'fullPages': currentTask.fullPages
369
- };
370
-
371
339
  pageUpdate = function pageUpdate() {
372
- return _handlers.default.navigate(action, pageId, onPageChange, state);
340
+ return _handlers.default.navigate(action, pageId, onPageChange);
373
341
  };
374
342
 
375
343
  break;
@@ -482,8 +450,6 @@ var InternalFormRenderer = function InternalFormRenderer(_ref2) {
482
450
  }
483
451
 
484
452
  if (page) {
485
- setContinueOnly(false);
486
-
487
453
  _handlers.default.cyaAction(page, pageId, onPageChange);
488
454
  }
489
455
  }; //Kick off a task, gather required pages and move to the correct point
@@ -506,18 +472,7 @@ var InternalFormRenderer = function InternalFormRenderer(_ref2) {
506
472
  }
507
473
  } else if (currentTask.state === _models.TaskStates.TYPES.IN_PROGRESS) {
508
474
  var _currentPage = data.formStatus.tasks[currentTask.name].currentPage;
509
-
510
- if (currentTask.pages.length > 1 && _currentPage !== _models.FormPages.CYA && _currentPage !== currentTask.pages[0]) {
511
- setContinueOnly(true);
512
- setCurrentTaskListPage(_currentPage);
513
- var state = {
514
- 'continueOnly': true,
515
- 'fullPages': currentTask.fullPages
516
- };
517
- onPageChange(_models.FormPages.CYA, state);
518
- } else {
519
- onPageChange(_currentPage);
520
- }
475
+ onPageChange(_currentPage || currentTask.pages[0]);
521
476
  } else if (currentTask.firstPage) {
522
477
  var _currentPage2 = currentTask.firstPage;
523
478
  onPageChange(_currentPage2 || currentTask.pages[0]);
@@ -620,12 +575,6 @@ var InternalFormRenderer = function InternalFormRenderer(_ref2) {
620
575
  onPageChange(_helpers.default.getNextPageId(type, pages, pageId, action, (_formState$page4 = formState.page) === null || _formState$page4 === void 0 ? void 0 : _formState$page4.formData));
621
576
  }
622
577
 
623
- if (action.type === _models.PageAction.TYPES.CONTINUE) {
624
- var currentPage = data.formStatus.tasks[currentTask.name].currentPage;
625
- onPageChange(currentPage || currentTask.pages[0]);
626
- setContinueOnly(false);
627
- }
628
-
629
578
  if (action.type === _models.PageAction.TYPES.CANCEL) {
630
579
  hooks.onCancel();
631
580
  }
@@ -634,11 +583,7 @@ var InternalFormRenderer = function InternalFormRenderer(_ref2) {
634
583
  var classes = _utils.default.classBuilder(classBlock, classModifiers, className);
635
584
 
636
585
  if (hub === _models.HubFormats.TASK) {
637
- if (continueOnly) {
638
- cya.actions = [_models.PageAction.TYPES.CONTINUE];
639
- } else {
640
- cya.actions = [_models.PageAction.TYPES.SAVE_AND_CONTINUE, _models.PageAction.TYPES.SAVE_AND_RETURN];
641
- }
586
+ cya.actions = [_models.PageAction.TYPES.SAVE_AND_CONTINUE, _models.PageAction.TYPES.SAVE_AND_RETURN];
642
587
  }
643
588
 
644
589
  return /*#__PURE__*/_react.default.createElement("div", {
@@ -654,9 +599,7 @@ var InternalFormRenderer = function InternalFormRenderer(_ref2) {
654
599
  hide_title: hide_title,
655
600
  noChangeAction: noChangeAction,
656
601
  sections: typeof hubDetails !== 'undefined' ? hubDetails.sections : [],
657
- type: type,
658
- cysa: continueOnly,
659
- currentPage: currentTaskListPage
602
+ type: type
660
603
  })), hub === _models.HubFormats.TASK && formState.pageId === _models.FormPages.HUB && /*#__PURE__*/_react.default.createElement(_TaskList.default, _extends({}, hubDetails, {
661
604
  refNumber: data.businessKey,
662
605
  onTaskAction: onTaskAction
@@ -36,10 +36,6 @@ var _taskList = _interopRequireDefault(require("../../json/taskList.json"));
36
36
 
37
37
  var _firstForm = _interopRequireDefault(require("../../json/firstForm.json"));
38
38
 
39
- var _multiQuestionTaskListData = _interopRequireDefault(require("../../json/multiQuestionTaskListData.json"));
40
-
41
- var _multiQuestionTaskList = _interopRequireDefault(require("../../json/multiQuestionTaskList.json"));
42
-
43
39
  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); }
44
40
 
45
41
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
@@ -1006,59 +1002,5 @@ describe('components', function () {
1006
1002
  }
1007
1003
  }, _callee28);
1008
1004
  })));
1009
- it('should display CYSA page when resuming an in-progress form, with Action buttons replaced with a single Continue button', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee30() {
1010
- var ON_SUBMIT, HOOKS, taskList;
1011
- return regeneratorRuntime.wrap(function _callee30$(_context30) {
1012
- while (1) {
1013
- switch (_context30.prev = _context30.next) {
1014
- case 0:
1015
- ON_SUBMIT = function ON_SUBMIT(type, payload, onSuccess, onError) {
1016
- onSuccess();
1017
- };
1018
-
1019
- HOOKS = {
1020
- onSubmit: ON_SUBMIT
1021
- };
1022
- _context30.next = 4;
1023
- return (0, _testUtils.act)( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee29() {
1024
- return regeneratorRuntime.wrap(function _callee29$(_context29) {
1025
- while (1) {
1026
- switch (_context29.prev = _context29.next) {
1027
- case 0:
1028
- (0, _reactDom.render)( /*#__PURE__*/_react2.default.createElement(_FormRenderer.default, _extends({}, _multiQuestionTaskList.default, {
1029
- data: _multiQuestionTaskListData.default,
1030
- hooks: HOOKS
1031
- })), container);
1032
-
1033
- case 1:
1034
- case "end":
1035
- return _context29.stop();
1036
- }
1037
- }
1038
- }, _callee29);
1039
- })));
1040
-
1041
- case 4:
1042
- taskList = container.childNodes[0].childNodes[1]; //Resume the first task
1043
-
1044
- _react.fireEvent.click(taskList.childNodes[5].childNodes[1].childNodes[0].childNodes[0], {}); // Verify the correct title has been rendered, and the Action buttons have been changed to Continue Only
1045
-
1046
-
1047
- expect(container.childNodes[0].childNodes[0].childNodes[0].textContent).toEqual('Check your saved answers');
1048
- expect(container.childNodes[0].childNodes[0].childNodes[5].childNodes[0].childNodes[0].textContent).toEqual('Continue'); // Click Continue
1049
-
1050
- _react.fireEvent.click(container.childNodes[0].childNodes[0].childNodes[5].childNodes[0].childNodes[0], {}); // Verify that Save & Continue / Save and Return Later buttons are restored on the next screen
1051
-
1052
-
1053
- expect(container.childNodes[0].childNodes[0].childNodes[6].childNodes[0].textContent).toEqual('Save and continue');
1054
- expect(container.childNodes[0].childNodes[0].childNodes[6].childNodes[1].textContent).toEqual('Save and return later');
1055
-
1056
- case 11:
1057
- case "end":
1058
- return _context30.stop();
1059
- }
1060
- }
1061
- }, _callee30);
1062
- })));
1063
1005
  });
1064
1006
  });
@@ -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, state) {
19
+ var navigate = function navigate(action, currentPageId, onNavigate) {
20
20
  var pageId = (0, _getPageId.default)(action, currentPageId);
21
21
 
22
22
  if (pageId !== currentPageId) {
23
- onNavigate(pageId, state);
23
+ onNavigate(pageId);
24
24
  }
25
25
  };
26
26
 
@@ -14,7 +14,6 @@ var TYPE_COLLECTION_ADD = 'collectionAdd';
14
14
  var TYPE_COLLECTION_DUPLICATE = 'collectionDuplicate';
15
15
  var TYPE_COLLECTION_REMOVE = 'collectionRemove';
16
16
  var TYPE_NAVIGATE = 'navigate';
17
- var TYPE_CONTINUE = 'continue';
18
17
  var TYPE_SAVE_AND_CONTINUE = 'saveAndContinue';
19
18
  var TYPE_SAVE_AND_NAVIGATE = 'saveAndNavigate';
20
19
  var TYPE_SAVE_AND_RETURN = 'saveAndReturn';
@@ -25,7 +24,6 @@ var PageActionTypes = {
25
24
  COLLECTION_DUPLICATE: TYPE_COLLECTION_DUPLICATE,
26
25
  COLLECTION_REMOVE: TYPE_COLLECTION_REMOVE,
27
26
  NAVIGATE: TYPE_NAVIGATE,
28
- CONTINUE: TYPE_CONTINUE,
29
27
  SAVE_AND_CONTINUE: TYPE_SAVE_AND_CONTINUE,
30
28
  SAVE_AND_NAVIGATE: TYPE_SAVE_AND_NAVIGATE,
31
29
  SAVE_AND_RETURN: TYPE_SAVE_AND_RETURN,
@@ -37,11 +35,7 @@ var DefaultPageActions = (_DefaultPageActions = {}, _defineProperty(_DefaultPage
37
35
  validate: false,
38
36
  label: 'Cancel',
39
37
  classModifiers: 'secondary'
40
- }), _defineProperty(_DefaultPageActions, TYPE_COLLECTION_ADD, undefined), _defineProperty(_DefaultPageActions, TYPE_COLLECTION_DUPLICATE, undefined), _defineProperty(_DefaultPageActions, TYPE_COLLECTION_REMOVE, undefined), _defineProperty(_DefaultPageActions, TYPE_NAVIGATE, undefined), _defineProperty(_DefaultPageActions, TYPE_CONTINUE, {
41
- type: TYPE_CONTINUE,
42
- validate: true,
43
- label: 'Continue'
44
- }), _defineProperty(_DefaultPageActions, TYPE_SAVE_AND_CONTINUE, {
38
+ }), _defineProperty(_DefaultPageActions, TYPE_COLLECTION_ADD, undefined), _defineProperty(_DefaultPageActions, TYPE_COLLECTION_DUPLICATE, undefined), _defineProperty(_DefaultPageActions, TYPE_COLLECTION_REMOVE, undefined), _defineProperty(_DefaultPageActions, TYPE_NAVIGATE, undefined), _defineProperty(_DefaultPageActions, TYPE_SAVE_AND_CONTINUE, {
45
39
  type: TYPE_SAVE_AND_CONTINUE,
46
40
  validate: true,
47
41
  label: 'Save and continue'
@@ -37,7 +37,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" =
37
37
  * @returns The first encountered error with the component.
38
38
  */
39
39
  var validateComponent = function validateComponent(component, outerData, formData) {
40
- var _component$data$optio;
40
+ var _fd$keycloakContext, _component$data$optio;
41
41
 
42
42
  var fd = formData || outerData;
43
43
 
@@ -64,7 +64,8 @@ var validateComponent = function validateComponent(component, outerData, formDat
64
64
  return (0, _validateCollection.default)(component, value, fd);
65
65
 
66
66
  case _models.ComponentTypes.EMAIL:
67
- error = (0, _validateEmail.default)(value, component.label);
67
+ var userEmail = fd === null ? '' : (_fd$keycloakContext = fd.keycloakContext) === null || _fd$keycloakContext === void 0 ? void 0 : _fd$keycloakContext.email;
68
+ error = (0, _validateEmail.default)(value, component.label, userEmail);
68
69
  break;
69
70
 
70
71
  case _models.ComponentTypes.DATE:
@@ -15,20 +15,28 @@ var HODS_EMAIL_REGEX = /^[a-z0-9._-]+@(digital\.)?homeoffice.gov.uk$/i;
15
15
  * validateRequired (Validate.required) for that sort of validation.
16
16
  * @param {*} value The value to validate.
17
17
  * @param {string} label The label to use in any error message.
18
+ * @param {string} userEmail The user email to use for validation.
18
19
  * @returns An error if the email address is invalid.
19
20
  */
20
21
 
21
22
  var validateEmail = function validateEmail(value) {
22
23
  var label = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
24
+ var userEmail = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
23
25
 
24
26
  if (!!value) {
27
+ var name = label ? label.toLowerCase() : 'email address';
28
+
25
29
  if (typeof value === 'string') {
30
+ // The following is an interim fix pending a mechanism for validating against specific values
31
+ if (['Line manager email', 'Delegate email address'].includes(label) && value === userEmail) {
32
+ return "".concat(label, " cannot be the same as the user email address");
33
+ }
34
+
26
35
  if (HODS_EMAIL_REGEX.test(value)) {
27
36
  return undefined;
28
37
  }
29
38
  }
30
39
 
31
- var name = label ? label.toLowerCase() : 'email address';
32
40
  return "Enter ".concat(name, " in the correct format, like jane.doe@homeoffice.gov.uk");
33
41
  }
34
42
 
@@ -52,6 +52,14 @@ describe('utils', function () {
52
52
  var DEFAULT_ERROR = 'Enter email address in the correct format, like jane.doe@homeoffice.gov.uk';
53
53
  expect((0, _validateEmail.default)(['bob'], undefined)).toEqual(DEFAULT_ERROR);
54
54
  });
55
+ it('should return an error when line manager email is same as user email', function () {
56
+ var USER_EMAIL_ERROR = 'Line manager email cannot be the same as the user email address';
57
+ expect((0, _validateEmail.default)('joe.bloggs@digital.homeoffice.gov.uk', 'Line manager email', 'joe.bloggs@digital.homeoffice.gov.uk')).toEqual(USER_EMAIL_ERROR);
58
+ });
59
+ it('should return an error when delegate email is same as user email', function () {
60
+ var USER_EMAIL_ERROR = 'Delegate email address cannot be the same as the user email address';
61
+ expect((0, _validateEmail.default)('joe.bloggs@digital.homeoffice.gov.uk', 'Delegate email address', 'joe.bloggs@digital.homeoffice.gov.uk')).toEqual(USER_EMAIL_ERROR);
62
+ });
55
63
  });
56
64
  });
57
65
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ukhomeoffice/cop-react-form-renderer",
3
- "version": "4.29.0-alpha",
3
+ "version": "4.29.0",
4
4
  "private": false,
5
5
  "scripts": {
6
6
  "clean": "rimraf dist",
@@ -1,275 +0,0 @@
1
- {
2
- "id": "cop-multiTaskList",
3
- "cya": {
4
- "actions": [
5
- { "type": "saveAndContinue", "label": "save cont", "validate": true }
6
- ],
7
- "hide_page_titles": false
8
- },
9
- "hub": {
10
- "format": "CYA",
11
- "refTitle": "COP reference number",
12
- "sections": [
13
- {
14
- "name": "Add passenger details",
15
- "tasks": [
16
- {
17
- "name": "Passenger 1",
18
- "pages": ["officer", "p1Name", "p1details"],
19
- "state": "complete"
20
- },
21
- {
22
- "name": "Passenger 2",
23
- "pages": ["relationship", "p2Name", "p2details"],
24
- "state": "inProgress"
25
- }
26
- ]
27
- },
28
- {
29
- "name": "Submit form",
30
- "tasks": [
31
- {
32
- "name": "Accept and submit",
33
- "pages": ["submitForm"],
34
- "state": "inProgress"
35
- }
36
- ]
37
- }
38
- ]
39
- },
40
- "name": "cop-multiTaskList",
41
- "type": "task-list",
42
- "pages": [
43
- {
44
- "id": "officer",
45
- "name": "officer",
46
- "title": "Officer Details",
47
- "actions": [
48
- { "page": "p1Name", "type": "saveAndNavigate" },
49
- "saveAndReturn"
50
- ],
51
- "cya_link": { "page": "officer", "aria_suffix": "Officer Details" },
52
- "components": [{ "use": "officerName" }]
53
- },
54
- {
55
- "id": "p1Name",
56
- "name": "p1Name",
57
- "title": "Passenger 1 Names",
58
- "actions": [
59
- { "page": "p1details", "type": "saveAndNavigate" },
60
- "saveAndReturn"
61
- ],
62
- "cya_link": { "page": "p1Name", "aria_suffix": "Passenger 1 name" },
63
- "components": [
64
- { "use": "passenger1firstname" },
65
- { "use": "passenger1surname" }
66
- ]
67
- },
68
- {
69
- "id": "p1details",
70
- "name": "p1details",
71
- "title": "Passenger 1 Details",
72
- "actions": [
73
- { "page": "cya", "type": "saveAndNavigate" },
74
- "saveAndReturn"
75
- ],
76
- "cya_link": { "page": "p1details", "aria_suffix": "Passenger 1 Details" },
77
- "components": [
78
- { "use": "dateofarrivalp1" },
79
- { "use": "dateofdeparturep1" },
80
- { "use": "doesp1havevisa" },
81
- { "use": "p1flightNo" },
82
- { "use": "p1extraDetails" }
83
- ]
84
- },
85
- {
86
- "id": "relationship",
87
- "name": "relationship",
88
- "title": "Passenger relationship",
89
- "actions": [
90
- { "page": "p2Name", "type": "saveAndNavigate" },
91
- "saveAndReturn"
92
- ],
93
- "cya_link": {
94
- "page": "relationship",
95
- "aria_suffix": "Passenger Relationship"
96
- },
97
- "components": [{ "use": "p2relationship" }]
98
- },
99
- {
100
- "id": "p2Name",
101
- "name": "p2Name",
102
- "title": "Passenger 2 Names",
103
- "actions": [
104
- { "page": "p2details", "type": "saveAndNavigate" },
105
- "saveAndReturn"
106
- ],
107
- "cya_link": { "page": "p2Name", "aria_suffix": "Passenger 2 name" },
108
- "components": [
109
- { "use": "passenger2firstname" },
110
- { "use": "passenger2surname" }
111
- ]
112
- },
113
- {
114
- "id": "p2details",
115
- "name": "p2details",
116
- "title": "Passenger 2 Details",
117
- "actions": [
118
- { "page": "cya", "type": "saveAndNavigate" },
119
- "saveAndReturn"
120
- ],
121
- "cya_link": { "page": "p2details", "aria_suffix": "Passenger 2 Details" },
122
- "components": [
123
- { "use": "dateofarrivalp2" },
124
- { "use": "dateofdeparturep2" },
125
- { "use": "doesp2havevisa" },
126
- { "use": "p2flightNo" },
127
- { "use": "p2extraDetails" }
128
- ]
129
- },
130
- {
131
- "id": "submitForm",
132
- "name": "submitForm",
133
- "title": "Submit",
134
- "actions": [
135
- { "type": "submit", "label": "Submit", "validate": true },
136
- "saveAndReturn"
137
- ],
138
- "components": []
139
- }
140
- ],
141
- "title": "Task List Multi Question Form",
142
- "version": "1",
143
- "components": [
144
- {
145
- "id": "officerName",
146
- "type": "text",
147
- "label": "Officer name",
148
- "fieldId": "officerName",
149
- "required": true
150
- },
151
- {
152
- "id": "passenger1firstname",
153
- "type": "text",
154
- "label": "Passenger 1 first name",
155
- "fieldId": "passenger1firstname",
156
- "required": true
157
- },
158
- {
159
- "id": "passenger1surname",
160
- "type": "text",
161
- "label": "Passenger 1 last name",
162
- "fieldId": "passenger1surname",
163
- "required": true
164
- },
165
- {
166
- "id": "dateofarrivalp1",
167
- "type": "date",
168
- "label": "Date of Arrival for passenger 1",
169
- "fieldId": "dateofarrivalp1",
170
- "required": true
171
- },
172
- {
173
- "id": "dateofdeparturep1",
174
- "type": "date",
175
- "label": "Date of Departure for passenger 1",
176
- "fieldId": "dateofdeparturep1",
177
- "required": true
178
- },
179
- {
180
- "id": "doesp1havevisa",
181
- "data": {
182
- "options": [
183
- { "label": "Yes, passenger 1 has a valid visa", "value": "yes" },
184
- {
185
- "label": "No, passenger 1 does not have a valid visa",
186
- "value": "no"
187
- }
188
- ]
189
- },
190
- "type": "radios",
191
- "label": "Valid visa",
192
- "fieldId": "doesp1havevisa",
193
- "required": true
194
- },
195
- {
196
- "id": "p1flightNo",
197
- "type": "text",
198
- "label": "Passenger 1 outbound flight number",
199
- "fieldId": "p1flightNo",
200
- "required": true
201
- },
202
- {
203
- "id": "p2relationship",
204
- "type": "text",
205
- "label": "What is the relationship of passenger 2 to passenger 1",
206
- "fieldId": "p2relationship",
207
- "required": true
208
- },
209
- {
210
- "id": "p1extraDetails",
211
- "type": "textarea",
212
- "label": "Enter any extra details about journey for passenger 1",
213
- "fieldId": "p1extraDetails",
214
- "required": true
215
- },
216
- {
217
- "id": "passenger2firstname",
218
- "type": "text",
219
- "label": "Passenger 2 first name",
220
- "fieldId": "passenger2firstname",
221
- "required": true
222
- },
223
- {
224
- "id": "passenger2surname",
225
- "type": "text",
226
- "label": "Passenger 2 last name",
227
- "fieldId": "passenger2surname",
228
- "required": true
229
- },
230
- {
231
- "id": "dateofarrivalp2",
232
- "type": "date",
233
- "label": "Date of Arrival for passenger 2",
234
- "fieldId": "dateofarrivalp2",
235
- "required": true
236
- },
237
- {
238
- "id": "dateofdeparturep2",
239
- "type": "date",
240
- "label": "Date of Departure for passenger 2",
241
- "fieldId": "dateofdeparturep2",
242
- "required": true
243
- },
244
- {
245
- "id": "doesp2havevisa",
246
- "data": {
247
- "options": [
248
- { "label": "Yes, passenger 2 has a valid visa", "value": "yes" },
249
- {
250
- "label": "No, passenger 2 does not have a valid visa",
251
- "value": "no"
252
- }
253
- ]
254
- },
255
- "type": "radios",
256
- "label": "Valid visa",
257
- "fieldId": "doesp2havevisa",
258
- "required": true
259
- },
260
- {
261
- "id": "p2flightNo",
262
- "type": "text",
263
- "label": "Passenger 2 outbound flight number",
264
- "fieldId": "p2flightNo",
265
- "required": true
266
- },
267
- {
268
- "id": "p2extraDetails",
269
- "type": "textarea",
270
- "label": "Enter any extra details about journey for passenger 2",
271
- "fieldId": "p2extraDetails",
272
- "required": true
273
- }
274
- ]
275
- }
@@ -1,39 +0,0 @@
1
- {
2
- "id": "695735b6-7187-11ed-a74f-4a1f833894ff",
3
- "businessKey": "DEV-20221201-1250",
4
- "officerName": "Bob Smith",
5
- "formStatus": {
6
- "tasks": {
7
- "Passenger 1": { "complete": false, "currentPage": "p1details" }
8
- },
9
- "taskPage": "p1details"
10
- },
11
- "links": [
12
- {
13
- "method": "GET",
14
- "href": "https://workflow-service-green.dev.cop.homeoffice.gov.uk/camunda/engine-rest/process-instance/695735b6-7187-11ed-a74f-4a1f833894ff",
15
- "rel": "self"
16
- }
17
- ],
18
- "definitionId": "cop-multiTaskList:2:04acd47e-6a95-11ed-89dc-8e447b30f638",
19
- "caseInstanceId": null,
20
- "ended": false,
21
- "suspended": false,
22
- "tenantId": null,
23
- "passenger1firstname": "James",
24
- "passenger1surname": "Jones",
25
- "dateofarrivalp1": "1-1-2022",
26
- "dateofdeparturep1": "3-2-2022",
27
- "doesp1havevisa": "yes",
28
- "p1flightNo": "564131946",
29
- "p1extraDetails": "N/A",
30
- "form": {
31
- "formId": "cop-multiTaskList",
32
- "formVersionId": "1",
33
- "title": "Task List Multi Question Form",
34
- "name": "cop-multiTaskList",
35
- "submissionDate": "2022-12-01T14:50:58.363Z",
36
- "submittedBy": "james.bowers@digital.homeoffice.gov.uk",
37
- "draftForm": true
38
- }
39
- }