@ukhomeoffice/cop-react-form-renderer 3.17.2 → 3.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/FormPage/FormPage.js +4 -3
- package/dist/components/FormRenderer/FormRenderer.js +30 -13
- package/dist/components/FormRenderer/helpers/getUpdatedSectionStates.js +52 -6
- package/dist/components/FormRenderer/helpers/getUpdatedSectionStates.test.js +168 -110
- package/dist/utils/Component/getComponent.js +5 -1
- package/package.json +1 -1
|
@@ -51,7 +51,7 @@ var DEFAULT_CLASS = 'hods-form';
|
|
|
51
51
|
exports.DEFAULT_CLASS = DEFAULT_CLASS;
|
|
52
52
|
|
|
53
53
|
var FormPage = function FormPage(_ref) {
|
|
54
|
-
var _page$actions;
|
|
54
|
+
var _page$actions, _page$actions2;
|
|
55
55
|
|
|
56
56
|
var page = _ref.page,
|
|
57
57
|
_onAction = _ref.onAction,
|
|
@@ -88,6 +88,7 @@ var FormPage = function FormPage(_ref) {
|
|
|
88
88
|
label: _utils.default.interpolateString(action.label, page.formData)
|
|
89
89
|
}) : action;
|
|
90
90
|
});
|
|
91
|
+
page.formData = _objectSpread(_objectSpread({}, page.formData), patch);
|
|
91
92
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
92
93
|
className: classes('page'),
|
|
93
94
|
key: page.id
|
|
@@ -101,10 +102,10 @@ var FormPage = function FormPage(_ref) {
|
|
|
101
102
|
component: component,
|
|
102
103
|
onChange: onPageChange,
|
|
103
104
|
value: page.formData[component.fieldId] || patch[component.fieldId],
|
|
104
|
-
formData:
|
|
105
|
+
formData: page.formData
|
|
105
106
|
});
|
|
106
107
|
}), /*#__PURE__*/_react.default.createElement(_PageActions.default, {
|
|
107
|
-
actions: page.actions.filter(function (action) {
|
|
108
|
+
actions: (_page$actions2 = page.actions) === null || _page$actions2 === void 0 ? void 0 : _page$actions2.filter(function (action) {
|
|
108
109
|
return _utils.default.Component.show(action, page.formData);
|
|
109
110
|
}),
|
|
110
111
|
onAction: function onAction(action) {
|
|
@@ -74,7 +74,8 @@ var FormRenderer = function FormRenderer(_ref) {
|
|
|
74
74
|
hide_title = _ref.hide_title,
|
|
75
75
|
summaryListClassModifiers = _ref.summaryListClassModifiers,
|
|
76
76
|
noChangeAction = _ref.noChangeAction,
|
|
77
|
-
newPageId = _ref.newPageId
|
|
77
|
+
newPageId = _ref.newPageId,
|
|
78
|
+
viewOnly = _ref.viewOnly;
|
|
78
79
|
return /*#__PURE__*/_react.default.createElement(_context.HooksContextProvider, {
|
|
79
80
|
overrides: hooks
|
|
80
81
|
}, /*#__PURE__*/_react.default.createElement(_context.ValidationContextProvider, null, /*#__PURE__*/_react.default.createElement(InternalFormRenderer, {
|
|
@@ -91,7 +92,8 @@ var FormRenderer = function FormRenderer(_ref) {
|
|
|
91
92
|
hide_title: hide_title,
|
|
92
93
|
summaryListClassModifiers: summaryListClassModifiers,
|
|
93
94
|
noChangeAction: noChangeAction,
|
|
94
|
-
newPageId: newPageId
|
|
95
|
+
newPageId: newPageId,
|
|
96
|
+
viewOnly: viewOnly
|
|
95
97
|
})));
|
|
96
98
|
};
|
|
97
99
|
|
|
@@ -112,7 +114,8 @@ var InternalFormRenderer = function InternalFormRenderer(_ref2) {
|
|
|
112
114
|
hide_title = _ref2.hide_title,
|
|
113
115
|
summaryListClassModifiers = _ref2.summaryListClassModifiers,
|
|
114
116
|
noChangeAction = _ref2.noChangeAction,
|
|
115
|
-
newPageId = _ref2.newPageId
|
|
117
|
+
newPageId = _ref2.newPageId,
|
|
118
|
+
viewOnly = _ref2.viewOnly;
|
|
116
119
|
|
|
117
120
|
// Set up the initial states.
|
|
118
121
|
var _useState = (0, _react.useState)({}),
|
|
@@ -153,7 +156,12 @@ var InternalFormRenderer = function InternalFormRenderer(_ref2) {
|
|
|
153
156
|
var _useState15 = (0, _react.useState)({}),
|
|
154
157
|
_useState16 = _slicedToArray(_useState15, 2),
|
|
155
158
|
hubDetails = _useState16[0],
|
|
156
|
-
setHubDetails = _useState16[1];
|
|
159
|
+
setHubDetails = _useState16[1];
|
|
160
|
+
|
|
161
|
+
var _useState17 = (0, _react.useState)('start'),
|
|
162
|
+
_useState18 = _slicedToArray(_useState17, 2),
|
|
163
|
+
pagePoint = _useState18[0],
|
|
164
|
+
setPagePoint = _useState18[1]; // Set up hooks.
|
|
157
165
|
|
|
158
166
|
|
|
159
167
|
var _useHooks = (0, _hooks.useHooks)(),
|
|
@@ -167,7 +175,7 @@ var InternalFormRenderer = function InternalFormRenderer(_ref2) {
|
|
|
167
175
|
|
|
168
176
|
|
|
169
177
|
(0, _react.useEffect)(function () {
|
|
170
|
-
if (components && _pages && _data) {
|
|
178
|
+
if (components && _pages && _data && (['start', 'end'].includes(pagePoint) || viewOnly)) {
|
|
171
179
|
var _data$formStatus;
|
|
172
180
|
|
|
173
181
|
setData(_utils.default.Data.setupForm(_pages, components, _data));
|
|
@@ -176,7 +184,7 @@ var InternalFormRenderer = function InternalFormRenderer(_ref2) {
|
|
|
176
184
|
setPageId(_data.formStatus.page);
|
|
177
185
|
}
|
|
178
186
|
}
|
|
179
|
-
}, [components, _pages, _data, setData]); // Setup pages.
|
|
187
|
+
}, [components, _pages, _data, setData, pagePoint, viewOnly]); // Setup pages.
|
|
180
188
|
|
|
181
189
|
(0, _react.useEffect)(function () {
|
|
182
190
|
setPages(_utils.default.FormPage.getAll(_pages, components, _objectSpread({}, data)));
|
|
@@ -197,6 +205,7 @@ var InternalFormRenderer = function InternalFormRenderer(_ref2) {
|
|
|
197
205
|
}, [pages, hub, pageId, setFormState]); // Call the onFormLoad hook just when this component first renders.
|
|
198
206
|
|
|
199
207
|
(0, _react.useEffect)(function () {
|
|
208
|
+
setPagePoint(undefined);
|
|
200
209
|
hooks.onFormLoad();
|
|
201
210
|
}, [hooks]);
|
|
202
211
|
(0, _react.useEffect)(function () {
|
|
@@ -229,15 +238,15 @@ var InternalFormRenderer = function InternalFormRenderer(_ref2) {
|
|
|
229
238
|
if (hubDetails !== null && hubDetails !== void 0 && hubDetails.sections) {
|
|
230
239
|
var _data$formStatus2;
|
|
231
240
|
|
|
232
|
-
var tasks = data
|
|
241
|
+
var tasks = (data === null || data === void 0 ? void 0 : (_data$formStatus2 = data.formStatus) === null || _data$formStatus2 === void 0 ? void 0 : _data$formStatus2.tasks) || {};
|
|
233
242
|
|
|
234
|
-
var updatedSections = _helpers.default.getUpdatedSectionStates(hubDetails.sections, tasks);
|
|
243
|
+
var updatedSections = _helpers.default.getUpdatedSectionStates(hubDetails.sections, tasks, hubDetails.nonSequential);
|
|
235
244
|
|
|
236
245
|
setHubDetails(function (prev) {
|
|
237
246
|
return _objectSpread(_objectSpread({}, prev), updatedSections);
|
|
238
247
|
});
|
|
239
248
|
}
|
|
240
|
-
}, [currentTask.fullPages, data, hubDetails === null || hubDetails === void 0 ? void 0 : hubDetails.sections]);
|
|
249
|
+
}, [currentTask.fullPages, data, hubDetails === null || hubDetails === void 0 ? void 0 : hubDetails.sections, hubDetails === null || hubDetails === void 0 ? void 0 : hubDetails.nonSequential]);
|
|
241
250
|
|
|
242
251
|
var onPageChange = function onPageChange(newPageId) {
|
|
243
252
|
clearErrors();
|
|
@@ -267,11 +276,15 @@ var InternalFormRenderer = function InternalFormRenderer(_ref2) {
|
|
|
267
276
|
if (action.type === _models.PageAction.TYPES.NAVIGATE) {
|
|
268
277
|
_handlers.default.navigate(action, pageId, onPageChange);
|
|
269
278
|
} else {
|
|
270
|
-
|
|
279
|
+
if (action.type === 'submit') {
|
|
280
|
+
setPagePoint('end');
|
|
281
|
+
} // Save draft or submit.
|
|
282
|
+
|
|
283
|
+
|
|
271
284
|
var submissionData = _utils.default.Format.form({
|
|
272
285
|
pages: pages,
|
|
273
286
|
components: components
|
|
274
|
-
}, _objectSpread(_objectSpread({}, data), patch), _models.EventTypes.SUBMIT);
|
|
287
|
+
}, _objectSpread(_objectSpread(_objectSpread({}, data), patch), formState.page.formData), _models.EventTypes.SUBMIT);
|
|
275
288
|
|
|
276
289
|
submissionData.formStatus = _helpers.default.getSubmissionStatus(type, pages, pageId, action, submissionData, currentTask, true);
|
|
277
290
|
|
|
@@ -343,6 +356,8 @@ var InternalFormRenderer = function InternalFormRenderer(_ref2) {
|
|
|
343
356
|
// Check to see whether the action is able to proceed, which in
|
|
344
357
|
// in the case of a submission will validate the fields in the page.
|
|
345
358
|
if (action.type === _models.PageAction.TYPES.SUBMIT) {
|
|
359
|
+
setPagePoint('end');
|
|
360
|
+
|
|
346
361
|
if (_helpers.default.canCYASubmit(pages, validate.pages)) {
|
|
347
362
|
// Submit.
|
|
348
363
|
var submissionData = _utils.default.Format.form({
|
|
@@ -449,7 +464,8 @@ FormRenderer.propTypes = InternalFormRenderer.propTypes = {
|
|
|
449
464
|
className: _propTypes.default.string,
|
|
450
465
|
hide_title: _propTypes.default.bool,
|
|
451
466
|
summaryListClassModifiers: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.arrayOf(_propTypes.default.string)]),
|
|
452
|
-
noChangeAction: _propTypes.default.bool
|
|
467
|
+
noChangeAction: _propTypes.default.bool,
|
|
468
|
+
viewOnly: _propTypes.default.bool
|
|
453
469
|
};
|
|
454
470
|
FormRenderer.defaultProps = InternalFormRenderer.defaultProps = {
|
|
455
471
|
type: _models.FormTypes.HUB,
|
|
@@ -459,7 +475,8 @@ FormRenderer.defaultProps = InternalFormRenderer.defaultProps = {
|
|
|
459
475
|
classModifiers: [],
|
|
460
476
|
hide_title: false,
|
|
461
477
|
summaryListClassModifiers: [],
|
|
462
|
-
noChangeAction: false
|
|
478
|
+
noChangeAction: false,
|
|
479
|
+
viewOnly: true
|
|
463
480
|
};
|
|
464
481
|
var _default = FormRenderer;
|
|
465
482
|
exports.default = _default;
|
|
@@ -7,6 +7,28 @@ exports.default = void 0;
|
|
|
7
7
|
|
|
8
8
|
var _models = require("../../../models");
|
|
9
9
|
|
|
10
|
+
var getCurrentTaskState = function getCurrentTaskState(_ref, defaultState) {
|
|
11
|
+
var complete = _ref.complete,
|
|
12
|
+
currentPage = _ref.currentPage;
|
|
13
|
+
|
|
14
|
+
if (complete) {
|
|
15
|
+
return _models.TaskStates.TYPES.COMPLETE;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
if (currentPage) {
|
|
19
|
+
return _models.TaskStates.TYPES.IN_PROGRESS;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
return defaultState;
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
var allDependentTasksComplete = function allDependentTasksComplete(tasks, mustBeComplete) {
|
|
26
|
+
return mustBeComplete.reduce(function (allComplete, taskName) {
|
|
27
|
+
var _tasks$taskName;
|
|
28
|
+
|
|
29
|
+
return allComplete && ((_tasks$taskName = tasks[taskName]) === null || _tasks$taskName === void 0 ? void 0 : _tasks$taskName.complete);
|
|
30
|
+
}, true);
|
|
31
|
+
};
|
|
10
32
|
/**
|
|
11
33
|
* Updates the given task list sections with the latest states
|
|
12
34
|
* @param {object} sections The JSON defining the sections in the task list
|
|
@@ -19,15 +41,13 @@ var _models = require("../../../models");
|
|
|
19
41
|
}
|
|
20
42
|
* @returns An JSON representation of the task list sections with up to date states
|
|
21
43
|
*/
|
|
22
|
-
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
var getUpdatedSequentialStates = function getUpdatedSequentialStates(sections, tasks) {
|
|
23
47
|
return sections.map(function (section, sectionIndex, sectionArray) {
|
|
24
48
|
return section.tasks.map(function (task, taskIndex, taskArray) {
|
|
25
49
|
if (tasks[task.name]) {
|
|
26
|
-
|
|
27
|
-
task.state = _models.TaskStates.TYPES.COMPLETE;
|
|
28
|
-
} else if (tasks[task.name].currentPage) {
|
|
29
|
-
task.state = _models.TaskStates.TYPES.IN_PROGRESS;
|
|
30
|
-
}
|
|
50
|
+
task.state = getCurrentTaskState(tasks[task.name], task.state);
|
|
31
51
|
} else {
|
|
32
52
|
var _taskArray, _sectionArray, _sectionArray$tasks$s;
|
|
33
53
|
|
|
@@ -46,5 +66,31 @@ var getUpdatedSectionStates = function getUpdatedSectionStates(sections, tasks)
|
|
|
46
66
|
});
|
|
47
67
|
};
|
|
48
68
|
|
|
69
|
+
var getUpdatedNonSequentialStates = function getUpdatedNonSequentialStates(sections, tasks) {
|
|
70
|
+
return sections.map(function (section) {
|
|
71
|
+
return section.tasks.map(function (task) {
|
|
72
|
+
if (tasks[task.name]) {
|
|
73
|
+
task.state = getCurrentTaskState(tasks[task.name], task.state);
|
|
74
|
+
} else if (task.depends_on && !allDependentTasksComplete(tasks, task.depends_on)) {
|
|
75
|
+
task.state = _models.TaskStates.TYPES.CANNOT_START_YET;
|
|
76
|
+
} else {
|
|
77
|
+
task.state = _models.TaskStates.TYPES.NOT_STARTED;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
return task;
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
var getUpdatedSectionStates = function getUpdatedSectionStates(sections, tasks) {
|
|
86
|
+
var nonSequential = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
87
|
+
|
|
88
|
+
if (nonSequential === true) {
|
|
89
|
+
return getUpdatedNonSequentialStates(sections, tasks);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
return getUpdatedSequentialStates(sections, tasks);
|
|
93
|
+
};
|
|
94
|
+
|
|
49
95
|
var _default = getUpdatedSectionStates;
|
|
50
96
|
exports.default = _default;
|
|
@@ -7,116 +7,174 @@ var _models = require("../../../models");
|
|
|
7
7
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
8
8
|
|
|
9
9
|
// Local imports
|
|
10
|
-
describe('components', function () {
|
|
11
|
-
describe('
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
10
|
+
describe('components.FormRenderer.helpers.getUpdatedSectionStates', function () {
|
|
11
|
+
describe('sequential tasks', function () {
|
|
12
|
+
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 () {
|
|
13
|
+
var SECTIONS = [{
|
|
14
|
+
name: 'Add event details',
|
|
15
|
+
tasks: [{
|
|
16
|
+
name: 'Date, location and mode details',
|
|
17
|
+
pages: ['eventDate', 'eventMode']
|
|
18
|
+
}, {
|
|
19
|
+
name: 'Officer and agency details',
|
|
20
|
+
pages: ['officeDetails']
|
|
21
|
+
}]
|
|
22
|
+
}, {
|
|
23
|
+
name: 'Add people details',
|
|
24
|
+
tasks: [{
|
|
25
|
+
name: 'People details',
|
|
26
|
+
pages: ['firstName', 'surname']
|
|
27
|
+
}, {
|
|
28
|
+
name: 'Immigration details',
|
|
29
|
+
pages: ['immigrationDate']
|
|
30
|
+
}, {
|
|
31
|
+
name: 'Journey details',
|
|
32
|
+
pages: ['journeyDetails']
|
|
33
|
+
}]
|
|
34
|
+
}];
|
|
35
|
+
var updatedSections = (0, _getUpdatedSectionStates.default)(SECTIONS, {});
|
|
36
|
+
expect(updatedSections[0][0].state).toEqual(_models.TaskStates.TYPES.NOT_STARTED);
|
|
37
|
+
expect(updatedSections[0][1].state).toEqual(_models.TaskStates.TYPES.CANNOT_START_YET);
|
|
38
|
+
expect(updatedSections[1][0].state).toEqual(_models.TaskStates.TYPES.CANNOT_START_YET);
|
|
39
|
+
expect(updatedSections[1][1].state).toEqual(_models.TaskStates.TYPES.CANNOT_START_YET);
|
|
40
|
+
expect(updatedSections[1][2].state).toEqual(_models.TaskStates.TYPES.CANNOT_START_YET);
|
|
41
|
+
});
|
|
42
|
+
it("should set tasks after any '".concat(_models.TaskStates.TYPES.COMPLETE, "' ones to '").concat(_models.TaskStates.TYPES.NOT_STARTED, "'"), function () {
|
|
43
|
+
var SECTIONS = [{
|
|
44
|
+
name: 'Add event details',
|
|
45
|
+
tasks: [{
|
|
46
|
+
name: 'Date, location and mode details',
|
|
47
|
+
pages: ['eventDate', 'eventMode']
|
|
48
|
+
}, {
|
|
49
|
+
name: 'Officer and agency details',
|
|
50
|
+
pages: ['officeDetails']
|
|
51
|
+
}]
|
|
52
|
+
}];
|
|
53
|
+
var TASKS = {
|
|
54
|
+
'Date, location and mode details': {
|
|
55
|
+
complete: true
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
var updatedSections = (0, _getUpdatedSectionStates.default)(SECTIONS, TASKS);
|
|
59
|
+
expect(updatedSections[0][0].state).toEqual(_models.TaskStates.TYPES.COMPLETE);
|
|
60
|
+
expect(updatedSections[0][1].state).toEqual(_models.TaskStates.TYPES.NOT_STARTED);
|
|
61
|
+
});
|
|
62
|
+
it("should set tasks after any '".concat(_models.TaskStates.TYPES.COMPLETE, "' ones to '").concat(_models.TaskStates.TYPES.NOT_STARTED, " across different sections'"), function () {
|
|
63
|
+
var SECTIONS = [{
|
|
64
|
+
name: 'Add event details',
|
|
65
|
+
tasks: [{
|
|
66
|
+
name: 'Date, location and mode details',
|
|
67
|
+
pages: ['eventDate', 'eventMode']
|
|
68
|
+
}, {
|
|
69
|
+
name: 'Officer and agency details',
|
|
70
|
+
pages: ['officeDetails']
|
|
71
|
+
}]
|
|
72
|
+
}, {
|
|
73
|
+
name: 'Add people details',
|
|
74
|
+
tasks: [{
|
|
75
|
+
name: 'People details',
|
|
76
|
+
pages: ['firstName', 'surname']
|
|
77
|
+
}, {
|
|
78
|
+
name: 'Immigration details',
|
|
79
|
+
pages: ['immigrationDate']
|
|
80
|
+
}]
|
|
81
|
+
}];
|
|
82
|
+
var TASKS = {
|
|
83
|
+
'Date, location and mode details': {
|
|
84
|
+
complete: true
|
|
85
|
+
},
|
|
86
|
+
'Officer and agency details': {
|
|
87
|
+
complete: true
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
var updatedSections = (0, _getUpdatedSectionStates.default)(SECTIONS, TASKS);
|
|
91
|
+
expect(updatedSections[0][0].state).toEqual(_models.TaskStates.TYPES.COMPLETE);
|
|
92
|
+
expect(updatedSections[0][1].state).toEqual(_models.TaskStates.TYPES.COMPLETE);
|
|
93
|
+
expect(updatedSections[1][0].state).toEqual(_models.TaskStates.TYPES.NOT_STARTED);
|
|
94
|
+
expect(updatedSections[1][1].state).toEqual(_models.TaskStates.TYPES.CANNOT_START_YET);
|
|
95
|
+
});
|
|
96
|
+
it("should set tasks to '".concat(_models.TaskStates.TYPES.IN_PROGRESS, "' if they have a current page but are not complete"), function () {
|
|
97
|
+
var SECTIONS = [{
|
|
98
|
+
name: 'Add event details',
|
|
99
|
+
tasks: [{
|
|
100
|
+
name: 'Date, location and mode details',
|
|
101
|
+
pages: ['eventDate', 'eventMode']
|
|
102
|
+
}, {
|
|
103
|
+
name: 'Officer and agency details',
|
|
104
|
+
pages: ['officeDetails']
|
|
105
|
+
}]
|
|
106
|
+
}];
|
|
107
|
+
var TASKS = {
|
|
108
|
+
'Date, location and mode details': {
|
|
109
|
+
complete: false,
|
|
110
|
+
currentPage: 'eventMode'
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
var updatedSections = (0, _getUpdatedSectionStates.default)(SECTIONS, TASKS);
|
|
114
|
+
expect(updatedSections[0][0].state).toEqual(_models.TaskStates.TYPES.IN_PROGRESS);
|
|
115
|
+
expect(updatedSections[0][1].state).toEqual(_models.TaskStates.TYPES.CANNOT_START_YET);
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
describe('non-sequential tasks', function () {
|
|
119
|
+
var NON_SEQUENTIAL = true;
|
|
120
|
+
var SECTIONS = [{
|
|
121
|
+
name: 'First',
|
|
122
|
+
tasks: [{
|
|
123
|
+
name: 'Alpha'
|
|
124
|
+
}, {
|
|
125
|
+
name: 'Bravo'
|
|
126
|
+
}]
|
|
127
|
+
}, {
|
|
128
|
+
name: 'Second',
|
|
129
|
+
tasks: [{
|
|
130
|
+
name: 'Charlie',
|
|
131
|
+
depends_on: ['Alpha', 'Bravo']
|
|
132
|
+
}]
|
|
133
|
+
}, {
|
|
134
|
+
name: 'Third',
|
|
135
|
+
tasks: [{
|
|
136
|
+
name: 'Delta'
|
|
137
|
+
}]
|
|
138
|
+
}];
|
|
139
|
+
it("should set all states to '".concat(_models.TaskStates.TYPES.NOT_STARTED, "', except any that depend on others"), function () {
|
|
140
|
+
var RESULT = (0, _getUpdatedSectionStates.default)(SECTIONS, {}, NON_SEQUENTIAL);
|
|
141
|
+
expect(RESULT[0][0].state).toEqual(_models.TaskStates.TYPES.NOT_STARTED); // Alpha
|
|
142
|
+
|
|
143
|
+
expect(RESULT[0][1].state).toEqual(_models.TaskStates.TYPES.NOT_STARTED); // Bravo
|
|
144
|
+
|
|
145
|
+
expect(RESULT[1][0].state).toEqual(_models.TaskStates.TYPES.CANNOT_START_YET); // Charlie
|
|
146
|
+
|
|
147
|
+
expect(RESULT[2][0].state).toEqual(_models.TaskStates.TYPES.NOT_STARTED); // Delta
|
|
148
|
+
});
|
|
149
|
+
it('should keep dependent state unable to start if any dependencies are not complete', function () {
|
|
150
|
+
var ALPHA_COMPLETE = (0, _getUpdatedSectionStates.default)(SECTIONS, {
|
|
151
|
+
Alpha: {
|
|
152
|
+
complete: true
|
|
153
|
+
}
|
|
154
|
+
}, NON_SEQUENTIAL);
|
|
155
|
+
expect(ALPHA_COMPLETE[1][0].state).toEqual(_models.TaskStates.TYPES.CANNOT_START_YET); // Charlie
|
|
156
|
+
|
|
157
|
+
var BRAVO_COMPLETE = (0, _getUpdatedSectionStates.default)(SECTIONS, {
|
|
158
|
+
Bravo: {
|
|
159
|
+
complete: true
|
|
160
|
+
}
|
|
161
|
+
}, NON_SEQUENTIAL);
|
|
162
|
+
expect(BRAVO_COMPLETE[1][0].state).toEqual(_models.TaskStates.TYPES.CANNOT_START_YET); // Charlie
|
|
163
|
+
});
|
|
164
|
+
it('should allow dependent state to start if all dependencies are complete', function () {
|
|
165
|
+
var TASKS = {
|
|
166
|
+
'Alpha': {
|
|
167
|
+
complete: true
|
|
168
|
+
},
|
|
169
|
+
'Bravo': {
|
|
170
|
+
complete: true
|
|
171
|
+
},
|
|
172
|
+
'Delta': {}
|
|
173
|
+
};
|
|
174
|
+
var RESULT = (0, _getUpdatedSectionStates.default)(SECTIONS, TASKS, NON_SEQUENTIAL);
|
|
175
|
+
expect(RESULT[1][0].state).toEqual(_models.TaskStates.TYPES.NOT_STARTED); // Charlie
|
|
176
|
+
|
|
177
|
+
expect(RESULT[2][0].state).toEqual(_models.TaskStates.TYPES.NOT_STARTED); // Delta
|
|
120
178
|
});
|
|
121
179
|
});
|
|
122
180
|
});
|
|
@@ -57,9 +57,13 @@ var getCheckboxes = function getCheckboxes(config) {
|
|
|
57
57
|
var getCalculation = function getCalculation(config) {
|
|
58
58
|
var calculatedValue = _Data.default.applyFormula(config);
|
|
59
59
|
|
|
60
|
+
if (!!calculatedValue) {
|
|
61
|
+
config.value = calculatedValue;
|
|
62
|
+
config.formData[config.fieldId] = "" + calculatedValue;
|
|
63
|
+
}
|
|
64
|
+
|
|
60
65
|
var attrs = (0, _cleanAttributes.default)(config, ['formula']);
|
|
61
66
|
return /*#__PURE__*/_react.default.createElement(_copReactComponents.TextInput, _extends({}, attrs, {
|
|
62
|
-
value: calculatedValue,
|
|
63
67
|
readOnly: true
|
|
64
68
|
}));
|
|
65
69
|
};
|