@ukhomeoffice/cop-react-form-renderer 2.1.0 → 2.6.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/FormComponent/Container.test.js +250 -0
- package/dist/components/FormComponent/FormComponent.js +105 -21
- package/dist/components/FormComponent/FormComponent.test.js +67 -0
- package/dist/components/FormPage/FormPage.js +2 -1
- package/dist/components/FormRenderer/FormRenderer.js +105 -6
- package/dist/components/FormRenderer/FormRenderer.test.js +235 -0
- package/dist/components/FormRenderer/helpers/getNextPageId.js +3 -0
- package/dist/components/FormRenderer/helpers/getNextPageId.test.js +6 -0
- package/dist/components/FormRenderer/helpers/getPage.js +1 -1
- package/dist/components/FormRenderer/helpers/getSubmissionStatus.js +18 -1
- package/dist/components/FormRenderer/helpers/getSubmissionStatus.test.js +44 -6
- package/dist/components/FormRenderer/helpers/getUpdatedSectionStates.js +50 -0
- package/dist/components/FormRenderer/helpers/getUpdatedSectionStates.test.js +122 -0
- package/dist/components/FormRenderer/helpers/index.js +7 -1
- package/dist/components/TaskList/Task.js +83 -0
- package/dist/components/TaskList/Task.test.js +112 -0
- package/dist/components/TaskList/TaskList.js +112 -0
- package/dist/components/TaskList/TaskList.scss +70 -0
- package/dist/components/TaskList/TaskList.stories.mdx +57 -0
- package/dist/components/TaskList/TaskList.test.js +223 -0
- package/dist/components/TaskList/TaskState.js +42 -0
- package/dist/components/TaskList/TaskState.test.js +99 -0
- package/dist/components/TaskList/index.js +13 -0
- package/dist/hooks/index.js +19 -1
- package/dist/hooks/useHooks.js +5 -1
- package/dist/json/taskList.json +228 -0
- package/dist/json/userProfile.data.json +2 -1
- package/dist/models/ComponentTypes.js +5 -1
- package/dist/models/FormTypes.js +2 -0
- package/dist/models/HubFormats.js +3 -1
- package/dist/models/PageAction.js +5 -0
- package/dist/models/TaskStates.js +41 -0
- package/dist/models/index.js +8 -0
- package/dist/utils/CheckYourAnswers/getCYARowsForContainer.js +40 -0
- package/dist/utils/CheckYourAnswers/getCYARowsForContainer.test.js +257 -0
- package/dist/utils/CheckYourAnswers/getCYARowsForPage.js +9 -1
- package/dist/utils/CheckYourAnswers/getCYARowsForPage.test.js +44 -0
- package/dist/utils/CheckYourAnswers/showComponentCYA.js +6 -0
- package/dist/utils/Component/cleanAttributes.js +1 -1
- package/dist/utils/Component/getComponent.js +26 -0
- package/dist/utils/Component/isEditable.js +1 -1
- package/dist/utils/Component/showComponent.js +2 -20
- package/dist/utils/Condition/index.js +19 -0
- package/dist/utils/Condition/meetsAllConditions.js +40 -0
- package/dist/utils/Condition/meetsAllConditions.test.js +62 -0
- package/dist/utils/{meetsCondition.js → Condition/meetsCondition.js} +0 -0
- package/dist/utils/Condition/meetsCondition.test.js +302 -0
- package/dist/utils/Condition/setupConditions.js +47 -0
- package/dist/utils/Condition/setupConditions.test.js +35 -0
- package/dist/utils/Container/getEditableComponents.js +38 -0
- package/dist/utils/Container/getEditableComponents.test.js +157 -0
- package/dist/utils/Container/index.js +22 -0
- package/dist/utils/Container/setupNesting.js +45 -0
- package/dist/utils/Container/setupNesting.test.js +92 -0
- package/dist/utils/Container/showContainer.js +61 -0
- package/dist/utils/Container/showContainer.test.js +128 -0
- package/dist/utils/Data/getDataPath.js +90 -0
- package/dist/utils/Data/getDataPath.test.js +52 -0
- package/dist/utils/Data/index.js +3 -0
- package/dist/utils/FormPage/getFormPage.js +4 -2
- package/dist/utils/FormPage/getFormPage.test.js +18 -7
- package/dist/utils/FormPage/getFormPages.test.js +5 -2
- package/dist/utils/FormPage/getPageActions.js +6 -0
- package/dist/utils/FormPage/index.js +0 -3
- package/dist/utils/FormPage/showFormPage.js +7 -27
- package/dist/utils/Hub/getFormHub.js +4 -0
- package/dist/utils/Hub/getFormHub.test.js +15 -4
- package/dist/utils/Validate/additional/index.js +55 -0
- package/dist/utils/Validate/additional/index.test.js +69 -0
- package/dist/utils/Validate/additional/mustBeAfter.js +37 -0
- package/dist/utils/Validate/additional/mustBeAfter.test.js +98 -0
- package/dist/utils/Validate/additional/mustBeBefore.js +35 -0
- package/dist/utils/Validate/additional/mustBeBefore.test.js +66 -0
- package/dist/utils/Validate/additional/mustBeInTheFuture.js +42 -0
- package/dist/utils/Validate/additional/mustBeInTheFuture.test.js +34 -0
- package/dist/utils/Validate/additional/mustBeInThePast.js +44 -0
- package/dist/utils/Validate/additional/mustBeInThePast.test.js +34 -0
- package/dist/utils/Validate/additional/utils.js +66 -0
- package/dist/utils/Validate/index.js +7 -1
- package/dist/utils/Validate/validateComponent.js +57 -0
- package/dist/utils/Validate/validateComponent.test.js +92 -2
- package/dist/utils/Validate/validateDate.js +155 -0
- package/dist/utils/Validate/validateDate.test.js +118 -0
- package/dist/utils/Validate/validatePage.js +6 -8
- package/dist/utils/Validate/validateTime.js +95 -0
- package/dist/utils/Validate/validateTime.test.js +61 -0
- package/dist/utils/index.js +6 -3
- package/package.json +3 -2
- package/dist/utils/FormPage/getEditableComponents.js +0 -28
- package/dist/utils/FormPage/getEditableComponents.test.js +0 -75
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
var TYPE_AUTOCOMPLETE = 'autocomplete';
|
|
8
8
|
var TYPE_CHECKBOXES = 'checkboxes';
|
|
9
|
+
var TYPE_CONTAINER = 'container';
|
|
9
10
|
var TYPE_DATE = 'date';
|
|
10
11
|
var TYPE_EMAIL = 'email';
|
|
11
12
|
var TYPE_HEADING = 'heading';
|
|
@@ -15,9 +16,11 @@ var TYPE_PHONE_NUMBER = 'phone-number';
|
|
|
15
16
|
var TYPE_RADIOS = 'radios';
|
|
16
17
|
var TYPE_TEXT = 'text';
|
|
17
18
|
var TYPE_TEXT_AREA = 'textarea';
|
|
19
|
+
var TYPE_TIME = 'time';
|
|
18
20
|
var ComponentTypes = {
|
|
19
21
|
AUTOCOMPLETE: TYPE_AUTOCOMPLETE,
|
|
20
22
|
CHECKBOXES: TYPE_CHECKBOXES,
|
|
23
|
+
CONTAINER: TYPE_CONTAINER,
|
|
21
24
|
DATE: TYPE_DATE,
|
|
22
25
|
EMAIL: TYPE_EMAIL,
|
|
23
26
|
HEADING: TYPE_HEADING,
|
|
@@ -26,7 +29,8 @@ var ComponentTypes = {
|
|
|
26
29
|
PHONE_NUMBER: TYPE_PHONE_NUMBER,
|
|
27
30
|
RADIOS: TYPE_RADIOS,
|
|
28
31
|
TEXT: TYPE_TEXT,
|
|
29
|
-
TEXT_AREA: TYPE_TEXT_AREA
|
|
32
|
+
TEXT_AREA: TYPE_TEXT_AREA,
|
|
33
|
+
TIME: TYPE_TIME
|
|
30
34
|
};
|
|
31
35
|
var _default = ComponentTypes;
|
|
32
36
|
exports.default = _default;
|
package/dist/models/FormTypes.js
CHANGED
|
@@ -7,11 +7,13 @@ exports.default = void 0;
|
|
|
7
7
|
var TYPE_FORM = 'form';
|
|
8
8
|
var TYPE_CHECK_YOUR_ANSWERS = 'cya';
|
|
9
9
|
var TYPE_HUB_AND_SPOKE = 'hub-and-spoke';
|
|
10
|
+
var TYPE_TASK_LIST = 'task-list';
|
|
10
11
|
var TYPE_WIZARD = 'wizard';
|
|
11
12
|
var FormTypes = {
|
|
12
13
|
FORM: TYPE_FORM,
|
|
13
14
|
CYA: TYPE_CHECK_YOUR_ANSWERS,
|
|
14
15
|
HUB: TYPE_HUB_AND_SPOKE,
|
|
16
|
+
TASK: TYPE_TASK_LIST,
|
|
15
17
|
WIZARD: TYPE_WIZARD
|
|
16
18
|
};
|
|
17
19
|
var _default = FormTypes;
|
|
@@ -5,8 +5,10 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
var HUB_FORMAT_CYA = 'CYA';
|
|
8
|
+
var HUB_FORMAT_TASK = 'TASK';
|
|
8
9
|
var HubFormats = {
|
|
9
|
-
CYA: HUB_FORMAT_CYA
|
|
10
|
+
CYA: HUB_FORMAT_CYA,
|
|
11
|
+
TASK: HUB_FORMAT_TASK
|
|
10
12
|
};
|
|
11
13
|
var _default = HubFormats;
|
|
12
14
|
exports.default = _default;
|
|
@@ -11,11 +11,13 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
|
|
|
11
11
|
|
|
12
12
|
var TYPE_NAVIGATE = 'navigate';
|
|
13
13
|
var TYPE_SAVE_AND_CONTINUE = 'saveAndContinue';
|
|
14
|
+
var TYPE_SAVE_AND_NAVIGATE = 'saveAndNavigate';
|
|
14
15
|
var TYPE_SAVE_AND_RETURN = 'saveAndReturn';
|
|
15
16
|
var TYPE_SUBMIT = 'submit';
|
|
16
17
|
var PageActionTypes = {
|
|
17
18
|
NAVIGATE: TYPE_NAVIGATE,
|
|
18
19
|
SAVE_AND_CONTINUE: TYPE_SAVE_AND_CONTINUE,
|
|
20
|
+
SAVE_AND_NAVIGATE: TYPE_SAVE_AND_NAVIGATE,
|
|
19
21
|
SAVE_AND_RETURN: TYPE_SAVE_AND_RETURN,
|
|
20
22
|
SUBMIT: TYPE_SUBMIT
|
|
21
23
|
};
|
|
@@ -24,6 +26,9 @@ var DefaultPageActions = (_DefaultPageActions = {}, _defineProperty(_DefaultPage
|
|
|
24
26
|
type: TYPE_SAVE_AND_CONTINUE,
|
|
25
27
|
validate: true,
|
|
26
28
|
label: 'Save and continue'
|
|
29
|
+
}), _defineProperty(_DefaultPageActions, TYPE_SAVE_AND_NAVIGATE, {
|
|
30
|
+
type: TYPE_SAVE_AND_NAVIGATE,
|
|
31
|
+
validate: true
|
|
27
32
|
}), _defineProperty(_DefaultPageActions, TYPE_SAVE_AND_RETURN, {
|
|
28
33
|
type: TYPE_SAVE_AND_RETURN,
|
|
29
34
|
validate: false,
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = exports.StateTypes = void 0;
|
|
7
|
+
|
|
8
|
+
var _StateDetails;
|
|
9
|
+
|
|
10
|
+
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; }
|
|
11
|
+
|
|
12
|
+
var TYPE_COMPLETE = 'complete';
|
|
13
|
+
var TYPE_IN_PROGRESS = 'inProgress';
|
|
14
|
+
var TYPE_NOT_STARTED = 'notStarted';
|
|
15
|
+
var TYPE_CANNOT_START_YET = 'cannotStartYet';
|
|
16
|
+
var StateTypes = {
|
|
17
|
+
COMPLETE: TYPE_COMPLETE,
|
|
18
|
+
IN_PROGRESS: TYPE_IN_PROGRESS,
|
|
19
|
+
NOT_STARTED: TYPE_NOT_STARTED,
|
|
20
|
+
CANNOT_START_YET: TYPE_CANNOT_START_YET
|
|
21
|
+
};
|
|
22
|
+
exports.StateTypes = StateTypes;
|
|
23
|
+
var StateDetails = (_StateDetails = {}, _defineProperty(_StateDetails, TYPE_COMPLETE, {
|
|
24
|
+
label: 'Completed',
|
|
25
|
+
colour: ''
|
|
26
|
+
}), _defineProperty(_StateDetails, TYPE_IN_PROGRESS, {
|
|
27
|
+
label: 'In Progress',
|
|
28
|
+
colour: 'blue'
|
|
29
|
+
}), _defineProperty(_StateDetails, TYPE_NOT_STARTED, {
|
|
30
|
+
label: 'Not Started',
|
|
31
|
+
colour: 'grey'
|
|
32
|
+
}), _defineProperty(_StateDetails, TYPE_CANNOT_START_YET, {
|
|
33
|
+
label: 'Cannot Start Yet',
|
|
34
|
+
colour: 'grey'
|
|
35
|
+
}), _StateDetails);
|
|
36
|
+
var TaskStates = {
|
|
37
|
+
TYPES: StateTypes,
|
|
38
|
+
DETAILS: StateDetails
|
|
39
|
+
};
|
|
40
|
+
var _default = TaskStates;
|
|
41
|
+
exports.default = _default;
|
package/dist/models/index.js
CHANGED
|
@@ -39,6 +39,12 @@ Object.defineProperty(exports, "PageAction", {
|
|
|
39
39
|
return _PageAction.default;
|
|
40
40
|
}
|
|
41
41
|
});
|
|
42
|
+
Object.defineProperty(exports, "TaskStates", {
|
|
43
|
+
enumerable: true,
|
|
44
|
+
get: function get() {
|
|
45
|
+
return _TaskStates.default;
|
|
46
|
+
}
|
|
47
|
+
});
|
|
42
48
|
|
|
43
49
|
var _ComponentTypes = _interopRequireDefault(require("./ComponentTypes"));
|
|
44
50
|
|
|
@@ -52,4 +58,6 @@ var _HubFormats = _interopRequireDefault(require("./HubFormats"));
|
|
|
52
58
|
|
|
53
59
|
var _PageAction = _interopRequireDefault(require("./PageAction"));
|
|
54
60
|
|
|
61
|
+
var _TaskStates = _interopRequireDefault(require("./TaskStates"));
|
|
62
|
+
|
|
55
63
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _models = require("../../models");
|
|
9
|
+
|
|
10
|
+
var _getCYARow = _interopRequireDefault(require("./getCYARow"));
|
|
11
|
+
|
|
12
|
+
var _showComponentCYA = _interopRequireDefault(require("./showComponentCYA"));
|
|
13
|
+
|
|
14
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
15
|
+
|
|
16
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
|
17
|
+
|
|
18
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
19
|
+
|
|
20
|
+
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; }
|
|
21
|
+
|
|
22
|
+
var getCYARowsForContainer = function getCYARowsForContainer(page, container, formData, onAction) {
|
|
23
|
+
if ((0, _showComponentCYA.default)(container, page.formData)) {
|
|
24
|
+
return container.components.filter(function (c) {
|
|
25
|
+
return (0, _showComponentCYA.default)(c, page.formData);
|
|
26
|
+
}).flatMap(function (component) {
|
|
27
|
+
if (component.type === _models.ComponentTypes.CONTAINER) {
|
|
28
|
+
var fd = formData ? formData[component.fieldId] : undefined;
|
|
29
|
+
return getCYARowsForContainer(page, component, fd, onAction);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
return (0, _getCYARow.default)(_objectSpread(_objectSpread({}, page), {}, {
|
|
33
|
+
formData: formData
|
|
34
|
+
}), component, onAction);
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
var _default = getCYARowsForContainer;
|
|
40
|
+
exports.default = _default;
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _models = require("../../models");
|
|
4
|
+
|
|
5
|
+
var _getCYARowsForContainer = _interopRequireDefault(require("./getCYARowsForContainer"));
|
|
6
|
+
|
|
7
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
8
|
+
|
|
9
|
+
// Local imports
|
|
10
|
+
describe('utils.CheckYourAnswers.getCYARowsForContainer', function () {
|
|
11
|
+
var expectObjectLike = function expectObjectLike(received, expected) {
|
|
12
|
+
Object.keys(expected).forEach(function (key) {
|
|
13
|
+
expect(received[key]).toEqual(expected[key]);
|
|
14
|
+
});
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
it('should get an appropriate row for a container with a single readonly text component', function () {
|
|
18
|
+
var FORM_DATA = {
|
|
19
|
+
container: {
|
|
20
|
+
a: 'Bravo'
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
var PAGE = {
|
|
24
|
+
id: 'page',
|
|
25
|
+
formData: FORM_DATA,
|
|
26
|
+
cya_link: {}
|
|
27
|
+
};
|
|
28
|
+
var COMPONENT = {
|
|
29
|
+
type: 'text',
|
|
30
|
+
readonly: true,
|
|
31
|
+
id: 'a',
|
|
32
|
+
fieldId: 'a',
|
|
33
|
+
label: 'Alpha'
|
|
34
|
+
};
|
|
35
|
+
var CONTAINER = {
|
|
36
|
+
id: 'container',
|
|
37
|
+
fieldId: 'container',
|
|
38
|
+
type: _models.ComponentTypes.CONTAINER,
|
|
39
|
+
components: [COMPONENT],
|
|
40
|
+
value: FORM_DATA.container,
|
|
41
|
+
formData: FORM_DATA
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
var ON_ACTION = function ON_ACTION() {};
|
|
45
|
+
|
|
46
|
+
var ROWS = (0, _getCYARowsForContainer.default)(PAGE, CONTAINER, FORM_DATA.container, ON_ACTION);
|
|
47
|
+
expect(ROWS.length).toEqual(1);
|
|
48
|
+
ROWS.forEach(function (row, index) {
|
|
49
|
+
expectObjectLike(row, {
|
|
50
|
+
pageId: PAGE.id,
|
|
51
|
+
fieldId: CONTAINER.components[index].fieldId,
|
|
52
|
+
key: CONTAINER.components[index].label,
|
|
53
|
+
action: null,
|
|
54
|
+
component: COMPONENT,
|
|
55
|
+
value: 'Bravo'
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
it('should get appropriate rows for a container with two editable text components', function () {
|
|
60
|
+
var FORM_DATA = {
|
|
61
|
+
container: {
|
|
62
|
+
a: 'Alpha Charlie',
|
|
63
|
+
b: 'Bravo Charlie'
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
var PAGE = {
|
|
67
|
+
id: 'page',
|
|
68
|
+
formData: FORM_DATA,
|
|
69
|
+
cya_link: {}
|
|
70
|
+
};
|
|
71
|
+
var COMPONENT_A = {
|
|
72
|
+
type: 'text',
|
|
73
|
+
id: 'a',
|
|
74
|
+
fieldId: 'a',
|
|
75
|
+
label: 'Alpha'
|
|
76
|
+
};
|
|
77
|
+
var COMPONENT_B = {
|
|
78
|
+
type: 'text',
|
|
79
|
+
id: 'b',
|
|
80
|
+
fieldId: 'b',
|
|
81
|
+
label: 'Bravo'
|
|
82
|
+
};
|
|
83
|
+
var CONTAINER = {
|
|
84
|
+
id: 'container',
|
|
85
|
+
fieldId: 'container',
|
|
86
|
+
type: _models.ComponentTypes.CONTAINER,
|
|
87
|
+
components: [COMPONENT_A, COMPONENT_B],
|
|
88
|
+
value: FORM_DATA.container,
|
|
89
|
+
formData: FORM_DATA
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
var ON_ACTION = function ON_ACTION() {};
|
|
93
|
+
|
|
94
|
+
var ROWS = (0, _getCYARowsForContainer.default)(PAGE, CONTAINER, FORM_DATA.container, ON_ACTION);
|
|
95
|
+
expect(ROWS.length).toEqual(2);
|
|
96
|
+
ROWS.forEach(function (row, index) {
|
|
97
|
+
expectObjectLike(row, {
|
|
98
|
+
pageId: PAGE.id,
|
|
99
|
+
fieldId: CONTAINER.components[index].fieldId,
|
|
100
|
+
key: CONTAINER.components[index].label,
|
|
101
|
+
component: CONTAINER.components[index],
|
|
102
|
+
value: "".concat(CONTAINER.components[index].label, " Charlie")
|
|
103
|
+
});
|
|
104
|
+
expectObjectLike(row.action, {
|
|
105
|
+
onAction: ON_ACTION
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
it("should filter out any components that shouldn't be shown", function () {
|
|
110
|
+
var FORM_DATA = {
|
|
111
|
+
container: {
|
|
112
|
+
a: 'Alpha Charlie',
|
|
113
|
+
b: 'Bravo Charlie'
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
var PAGE = {
|
|
117
|
+
id: 'page',
|
|
118
|
+
formData: FORM_DATA,
|
|
119
|
+
cya_link: {}
|
|
120
|
+
};
|
|
121
|
+
var COMPONENT_A = {
|
|
122
|
+
type: 'text',
|
|
123
|
+
id: 'a',
|
|
124
|
+
fieldId: 'a',
|
|
125
|
+
label: 'Alpha'
|
|
126
|
+
};
|
|
127
|
+
var COMPONENT_B = {
|
|
128
|
+
type: 'text',
|
|
129
|
+
id: 'b',
|
|
130
|
+
fieldId: 'b',
|
|
131
|
+
label: 'Bravo'
|
|
132
|
+
};
|
|
133
|
+
var COMPONENT_C = {
|
|
134
|
+
type: 'heading',
|
|
135
|
+
content: 'Heading component'
|
|
136
|
+
};
|
|
137
|
+
var CONTAINER = {
|
|
138
|
+
id: 'container',
|
|
139
|
+
fieldId: 'container',
|
|
140
|
+
type: _models.ComponentTypes.CONTAINER,
|
|
141
|
+
components: [COMPONENT_A, COMPONENT_B, COMPONENT_C],
|
|
142
|
+
value: FORM_DATA.container,
|
|
143
|
+
formData: FORM_DATA
|
|
144
|
+
};
|
|
145
|
+
|
|
146
|
+
var ON_ACTION = function ON_ACTION() {};
|
|
147
|
+
|
|
148
|
+
var ROWS = (0, _getCYARowsForContainer.default)(PAGE, CONTAINER, FORM_DATA.container, ON_ACTION);
|
|
149
|
+
expect(ROWS.length).toEqual(2);
|
|
150
|
+
ROWS.forEach(function (row, index) {
|
|
151
|
+
expectObjectLike(row, {
|
|
152
|
+
pageId: PAGE.id,
|
|
153
|
+
fieldId: CONTAINER.components[index].fieldId,
|
|
154
|
+
key: CONTAINER.components[index].label,
|
|
155
|
+
component: CONTAINER.components[index],
|
|
156
|
+
value: "".concat(CONTAINER.components[index].label, " Charlie")
|
|
157
|
+
});
|
|
158
|
+
expectObjectLike(row.action, {
|
|
159
|
+
onAction: ON_ACTION
|
|
160
|
+
});
|
|
161
|
+
});
|
|
162
|
+
});
|
|
163
|
+
it('should get an appropriate row for a container with a single readonly text component inside a nested container', function () {
|
|
164
|
+
var FORM_DATA = {
|
|
165
|
+
container: {
|
|
166
|
+
nested: {
|
|
167
|
+
a: 'Bravo'
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
};
|
|
171
|
+
var PAGE = {
|
|
172
|
+
id: 'page',
|
|
173
|
+
formData: FORM_DATA,
|
|
174
|
+
cya_link: {}
|
|
175
|
+
};
|
|
176
|
+
var COMPONENT = {
|
|
177
|
+
type: 'text',
|
|
178
|
+
readonly: true,
|
|
179
|
+
id: 'a',
|
|
180
|
+
fieldId: 'a',
|
|
181
|
+
label: 'Alpha'
|
|
182
|
+
};
|
|
183
|
+
var NESTED_CONTAINER = {
|
|
184
|
+
id: 'nested',
|
|
185
|
+
fieldId: 'nested',
|
|
186
|
+
type: _models.ComponentTypes.CONTAINER,
|
|
187
|
+
components: [COMPONENT],
|
|
188
|
+
value: FORM_DATA.container.nested,
|
|
189
|
+
formData: FORM_DATA
|
|
190
|
+
};
|
|
191
|
+
var CONTAINER = {
|
|
192
|
+
id: 'container',
|
|
193
|
+
fieldId: 'container',
|
|
194
|
+
type: _models.ComponentTypes.CONTAINER,
|
|
195
|
+
components: [NESTED_CONTAINER],
|
|
196
|
+
value: FORM_DATA.container,
|
|
197
|
+
formData: FORM_DATA
|
|
198
|
+
};
|
|
199
|
+
|
|
200
|
+
var ON_ACTION = function ON_ACTION() {};
|
|
201
|
+
|
|
202
|
+
var ROWS = (0, _getCYARowsForContainer.default)(PAGE, CONTAINER, FORM_DATA.container, ON_ACTION);
|
|
203
|
+
expect(ROWS.length).toEqual(1);
|
|
204
|
+
ROWS.forEach(function (row, index) {
|
|
205
|
+
expectObjectLike(row, {
|
|
206
|
+
pageId: PAGE.id,
|
|
207
|
+
fieldId: NESTED_CONTAINER.components[index].fieldId,
|
|
208
|
+
key: NESTED_CONTAINER.components[index].label,
|
|
209
|
+
action: null,
|
|
210
|
+
component: COMPONENT,
|
|
211
|
+
value: 'Bravo'
|
|
212
|
+
});
|
|
213
|
+
});
|
|
214
|
+
});
|
|
215
|
+
it('should get an appropriate row for a container with a single readonly text component inside a nested container but no formData', function () {
|
|
216
|
+
var FORM_DATA = undefined;
|
|
217
|
+
var PAGE = {
|
|
218
|
+
id: 'page',
|
|
219
|
+
formData: FORM_DATA,
|
|
220
|
+
cya_link: {}
|
|
221
|
+
};
|
|
222
|
+
var COMPONENT = {
|
|
223
|
+
type: 'text',
|
|
224
|
+
readonly: true,
|
|
225
|
+
id: 'a',
|
|
226
|
+
fieldId: 'a',
|
|
227
|
+
label: 'Alpha'
|
|
228
|
+
};
|
|
229
|
+
var NESTED_CONTAINER = {
|
|
230
|
+
id: 'nested',
|
|
231
|
+
fieldId: 'nested',
|
|
232
|
+
type: _models.ComponentTypes.CONTAINER,
|
|
233
|
+
components: [COMPONENT]
|
|
234
|
+
};
|
|
235
|
+
var CONTAINER = {
|
|
236
|
+
id: 'container',
|
|
237
|
+
fieldId: 'container',
|
|
238
|
+
type: _models.ComponentTypes.CONTAINER,
|
|
239
|
+
components: [NESTED_CONTAINER]
|
|
240
|
+
};
|
|
241
|
+
|
|
242
|
+
var ON_ACTION = function ON_ACTION() {};
|
|
243
|
+
|
|
244
|
+
var ROWS = (0, _getCYARowsForContainer.default)(PAGE, CONTAINER, undefined, ON_ACTION);
|
|
245
|
+
expect(ROWS.length).toEqual(1);
|
|
246
|
+
ROWS.forEach(function (row, index) {
|
|
247
|
+
expectObjectLike(row, {
|
|
248
|
+
pageId: PAGE.id,
|
|
249
|
+
fieldId: NESTED_CONTAINER.components[index].fieldId,
|
|
250
|
+
key: NESTED_CONTAINER.components[index].label,
|
|
251
|
+
action: null,
|
|
252
|
+
component: COMPONENT,
|
|
253
|
+
value: ''
|
|
254
|
+
});
|
|
255
|
+
});
|
|
256
|
+
});
|
|
257
|
+
});
|
|
@@ -5,10 +5,14 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
|
|
8
|
+
var _models = require("../../models");
|
|
9
|
+
|
|
8
10
|
var _FormPage = _interopRequireDefault(require("../FormPage"));
|
|
9
11
|
|
|
10
12
|
var _getCYARow = _interopRequireDefault(require("./getCYARow"));
|
|
11
13
|
|
|
14
|
+
var _getCYARowsForContainer = _interopRequireDefault(require("./getCYARowsForContainer"));
|
|
15
|
+
|
|
12
16
|
var _showComponentCYA = _interopRequireDefault(require("./showComponentCYA"));
|
|
13
17
|
|
|
14
18
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
@@ -27,7 +31,11 @@ var getCYARowsForPage = function getCYARowsForPage(page, onAction) {
|
|
|
27
31
|
if (_FormPage.default.show(page, page.formData)) {
|
|
28
32
|
return page.components.filter(function (c) {
|
|
29
33
|
return (0, _showComponentCYA.default)(c, page.formData);
|
|
30
|
-
}).
|
|
34
|
+
}).flatMap(function (component) {
|
|
35
|
+
if (component.type === _models.ComponentTypes.CONTAINER) {
|
|
36
|
+
return (0, _getCYARowsForContainer.default)(page, component, page.formData[component.fieldId], onAction);
|
|
37
|
+
}
|
|
38
|
+
|
|
31
39
|
return (0, _getCYARow.default)(page, component, onAction);
|
|
32
40
|
});
|
|
33
41
|
}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
var _models = require("../../models");
|
|
4
|
+
|
|
3
5
|
var _getCYARowsForPage = _interopRequireDefault(require("./getCYARowsForPage"));
|
|
4
6
|
|
|
5
7
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
@@ -129,6 +131,48 @@ describe('utils', function () {
|
|
|
129
131
|
});
|
|
130
132
|
});
|
|
131
133
|
});
|
|
134
|
+
it('should get a appropriate row for a page with a single readonly text component inside of a container', function () {
|
|
135
|
+
var FORM_DATA = {
|
|
136
|
+
container: {
|
|
137
|
+
a: 'Bravo'
|
|
138
|
+
}
|
|
139
|
+
};
|
|
140
|
+
var COMPONENT = {
|
|
141
|
+
type: 'text',
|
|
142
|
+
readonly: true,
|
|
143
|
+
id: 'a',
|
|
144
|
+
fieldId: 'a',
|
|
145
|
+
label: 'Alpha'
|
|
146
|
+
};
|
|
147
|
+
var CONTAINER = {
|
|
148
|
+
id: 'container',
|
|
149
|
+
fieldId: 'container',
|
|
150
|
+
type: _models.ComponentTypes.CONTAINER,
|
|
151
|
+
components: [COMPONENT],
|
|
152
|
+
value: FORM_DATA.container,
|
|
153
|
+
formData: FORM_DATA
|
|
154
|
+
};
|
|
155
|
+
var PAGE = {
|
|
156
|
+
id: 'page',
|
|
157
|
+
components: [CONTAINER],
|
|
158
|
+
formData: FORM_DATA
|
|
159
|
+
};
|
|
160
|
+
|
|
161
|
+
var ON_ACTION = function ON_ACTION() {};
|
|
162
|
+
|
|
163
|
+
var ROWS = (0, _getCYARowsForPage.default)(PAGE, ON_ACTION);
|
|
164
|
+
expect(ROWS.length).toEqual(1);
|
|
165
|
+
ROWS.forEach(function (row, index) {
|
|
166
|
+
expectObjectLike(row, {
|
|
167
|
+
pageId: PAGE.id,
|
|
168
|
+
fieldId: CONTAINER.components[index].fieldId,
|
|
169
|
+
key: CONTAINER.components[index].label,
|
|
170
|
+
action: null,
|
|
171
|
+
component: COMPONENT,
|
|
172
|
+
value: 'Bravo'
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
});
|
|
132
176
|
});
|
|
133
177
|
});
|
|
134
178
|
});
|
|
@@ -9,6 +9,8 @@ var _models = require("../../models");
|
|
|
9
9
|
|
|
10
10
|
var _Component = _interopRequireDefault(require("../Component"));
|
|
11
11
|
|
|
12
|
+
var _Container = _interopRequireDefault(require("../Container"));
|
|
13
|
+
|
|
12
14
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
15
|
|
|
14
16
|
// Local imports
|
|
@@ -31,6 +33,10 @@ var showComponentCYA = function showComponentCYA(options, data) {
|
|
|
31
33
|
return false;
|
|
32
34
|
}
|
|
33
35
|
|
|
36
|
+
if (options.type === _models.ComponentTypes.CONTAINER) {
|
|
37
|
+
return _Container.default.show(options, data);
|
|
38
|
+
}
|
|
39
|
+
|
|
34
40
|
return _Component.default.show(options, data);
|
|
35
41
|
};
|
|
36
42
|
|
|
@@ -19,7 +19,7 @@ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToAr
|
|
|
19
19
|
|
|
20
20
|
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
21
21
|
|
|
22
|
-
var JSON_ONLY_PROPERTIES = ['source', 'use', 'show_when', 'options'];
|
|
22
|
+
var JSON_ONLY_PROPERTIES = ['source', 'use', 'show_when', 'options', 'additionalValidation', 'full_path'];
|
|
23
23
|
/**
|
|
24
24
|
* This method removes and properties that are entirely specific to the JSON
|
|
25
25
|
* configuration and that should not be used as HTML attributes.
|
|
@@ -95,6 +95,11 @@ var getTextInput = function getTextInput(config) {
|
|
|
95
95
|
return /*#__PURE__*/_react.default.createElement(_copReactComponents.TextInput, attrs);
|
|
96
96
|
};
|
|
97
97
|
|
|
98
|
+
var getTime = function getTime(config) {
|
|
99
|
+
var attrs = (0, _cleanAttributes.default)(config);
|
|
100
|
+
return /*#__PURE__*/_react.default.createElement(_copReactComponents.TimeInput, attrs);
|
|
101
|
+
};
|
|
102
|
+
|
|
98
103
|
var getComponentByType = function getComponentByType(config) {
|
|
99
104
|
switch (config.type) {
|
|
100
105
|
case _models.ComponentTypes.HTML:
|
|
@@ -123,6 +128,9 @@ var getComponentByType = function getComponentByType(config) {
|
|
|
123
128
|
case _models.ComponentTypes.DATE:
|
|
124
129
|
return getDate(config);
|
|
125
130
|
|
|
131
|
+
case _models.ComponentTypes.TIME:
|
|
132
|
+
return getTime(config);
|
|
133
|
+
|
|
126
134
|
case _models.ComponentTypes.CHECKBOXES:
|
|
127
135
|
return getCheckboxes(config);
|
|
128
136
|
|
|
@@ -132,9 +140,27 @@ var getComponentByType = function getComponentByType(config) {
|
|
|
132
140
|
}
|
|
133
141
|
}
|
|
134
142
|
};
|
|
143
|
+
/**
|
|
144
|
+
* Get a renderable component, based on a configuration object.
|
|
145
|
+
* @param {object} config The configuration object for the component.
|
|
146
|
+
* @param {boolean} wrap Indicates whether or not the component should be wrapped.
|
|
147
|
+
* @param {Function} fnOverride An optional override function for component rendering.
|
|
148
|
+
* @returns A renderable component.
|
|
149
|
+
*/
|
|
150
|
+
|
|
135
151
|
|
|
136
152
|
var getComponent = function getComponent(config) {
|
|
137
153
|
var wrap = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
154
|
+
var fnOverride = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;
|
|
155
|
+
|
|
156
|
+
if (typeof fnOverride === 'function') {
|
|
157
|
+
var overrideComponent = fnOverride(config, wrap);
|
|
158
|
+
|
|
159
|
+
if (overrideComponent) {
|
|
160
|
+
return overrideComponent;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
138
164
|
var component = getComponentByType(config);
|
|
139
165
|
|
|
140
166
|
if (component && wrap && (0, _isEditable.default)(config)) {
|
|
@@ -8,7 +8,7 @@ exports.default = exports.EDITABLE_TYPES = void 0;
|
|
|
8
8
|
var _models = require("../../models");
|
|
9
9
|
|
|
10
10
|
// Local imports
|
|
11
|
-
var EDITABLE_TYPES = [_models.ComponentTypes.AUTOCOMPLETE, _models.ComponentTypes.CHECKBOXES, _models.ComponentTypes.DATE, _models.ComponentTypes.EMAIL, _models.ComponentTypes.PHONE_NUMBER, _models.ComponentTypes.RADIOS, _models.ComponentTypes.TEXT, _models.ComponentTypes.TEXT_AREA];
|
|
11
|
+
var EDITABLE_TYPES = [_models.ComponentTypes.AUTOCOMPLETE, _models.ComponentTypes.CHECKBOXES, _models.ComponentTypes.DATE, _models.ComponentTypes.EMAIL, _models.ComponentTypes.PHONE_NUMBER, _models.ComponentTypes.RADIOS, _models.ComponentTypes.TEXT, _models.ComponentTypes.TEXT_AREA, _models.ComponentTypes.TIME];
|
|
12
12
|
exports.EDITABLE_TYPES = EDITABLE_TYPES;
|
|
13
13
|
|
|
14
14
|
var isEditable = function isEditable(options) {
|
|
@@ -5,9 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
|
|
8
|
-
var
|
|
9
|
-
|
|
10
|
-
var _meetsCondition = _interopRequireDefault(require("../meetsCondition"));
|
|
8
|
+
var _Condition = _interopRequireDefault(require("../Condition"));
|
|
11
9
|
|
|
12
10
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
11
|
|
|
@@ -21,23 +19,7 @@ var showComponent = function showComponent(component, data) {
|
|
|
21
19
|
return false;
|
|
22
20
|
}
|
|
23
21
|
|
|
24
|
-
|
|
25
|
-
if (Array.isArray(component.show_when)) {
|
|
26
|
-
var allConditionsMet = true;
|
|
27
|
-
component.show_when.forEach(function (condition) {
|
|
28
|
-
var sourceDataValue = _Data.default.getSource(data, condition.field);
|
|
29
|
-
|
|
30
|
-
allConditionsMet = allConditionsMet && (0, _meetsCondition.default)(condition, sourceDataValue);
|
|
31
|
-
});
|
|
32
|
-
return allConditionsMet;
|
|
33
|
-
} else {
|
|
34
|
-
var sourceDataValue = _Data.default.getSource(data, component.show_when.field);
|
|
35
|
-
|
|
36
|
-
return (0, _meetsCondition.default)(component.show_when, sourceDataValue);
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
return true;
|
|
22
|
+
return _Condition.default.meetsAll(component, data);
|
|
41
23
|
};
|
|
42
24
|
|
|
43
25
|
var _default = showComponent;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _meetsAllConditions = _interopRequireDefault(require("./meetsAllConditions"));
|
|
9
|
+
|
|
10
|
+
var _meetsCondition = _interopRequireDefault(require("./meetsCondition"));
|
|
11
|
+
|
|
12
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
|
+
|
|
14
|
+
var Condition = {
|
|
15
|
+
meetsAll: _meetsAllConditions.default,
|
|
16
|
+
met: _meetsCondition.default
|
|
17
|
+
};
|
|
18
|
+
var _default = Condition;
|
|
19
|
+
exports.default = _default;
|