@ukhomeoffice/cop-react-form-renderer 4.0.0-alpha → 4.0.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/FormRenderer/FormRenderer.js +7 -0
- package/dist/components/SummaryList/SummaryList.js +8 -0
- package/dist/hooks/useRefData.js +1 -1
- package/dist/models/CollectionLabels.js +1 -0
- package/dist/models/PageAction.js +3 -1
- package/dist/utils/CheckYourAnswers/getCYACollectionChangeAction.js +50 -0
- package/dist/utils/CheckYourAnswers/getCYACollectionChangeAction.test.js +76 -0
- package/dist/utils/CheckYourAnswers/getCYACollectionDeleteAction.js +44 -0
- package/dist/utils/CheckYourAnswers/getCYACollectionDeleteAction.test.js +59 -0
- package/dist/utils/CheckYourAnswers/getCYARowsForCollectionPage.js +24 -13
- package/dist/utils/CheckYourAnswers/getCYARowsForCollectionPage.test.js +27 -11
- package/dist/utils/Validate/additional/index.js +7 -1
- package/dist/utils/Validate/additional/mustBeLessThan.js +24 -0
- package/dist/utils/Validate/additional/mustBeLessThan.test.js +44 -0
- package/dist/utils/Validate/additional/mustBeNumbersOnly.js +24 -0
- package/dist/utils/Validate/additional/mustBeNumbersOnly.test.js +38 -0
- package/package.json +2 -2
|
@@ -332,6 +332,13 @@ var InternalFormRenderer = function InternalFormRenderer(_ref2) {
|
|
|
332
332
|
|
|
333
333
|
break;
|
|
334
334
|
|
|
335
|
+
case _models.PageAction.TYPES.COLLECTION_REMOVE:
|
|
336
|
+
var activeId = formState.page.formData["".concat(action.collection, "ActiveId")];
|
|
337
|
+
formState.page.formData["".concat(action.collection)] = formState.page.formData["".concat(action.collection)].filter(function (entry) {
|
|
338
|
+
return entry.id !== activeId;
|
|
339
|
+
});
|
|
340
|
+
break;
|
|
341
|
+
|
|
335
342
|
default:
|
|
336
343
|
break;
|
|
337
344
|
} // Save draft or submit.
|
|
@@ -67,6 +67,14 @@ var SummaryList = function SummaryList(_ref) {
|
|
|
67
67
|
});
|
|
68
68
|
}
|
|
69
69
|
|
|
70
|
+
if (row.type === 'action') {
|
|
71
|
+
return /*#__PURE__*/_react.default.createElement("div", {
|
|
72
|
+
key: "".concat(key, "-actions")
|
|
73
|
+
}, /*#__PURE__*/_react.default.createElement(_GroupAction.default, {
|
|
74
|
+
group: row
|
|
75
|
+
}));
|
|
76
|
+
}
|
|
77
|
+
|
|
70
78
|
return /*#__PURE__*/_react.default.createElement(_SummaryListRow.default, {
|
|
71
79
|
key: key,
|
|
72
80
|
row: row,
|
package/dist/hooks/useRefData.js
CHANGED
|
@@ -82,7 +82,7 @@ var useRefData = function useRefData(component, formData) {
|
|
|
82
82
|
setStatus(STATUS_COMPLETE);
|
|
83
83
|
} else if (_status === _useGetRequest2.STATUS_FETCHED) {
|
|
84
84
|
if (_data) {
|
|
85
|
-
setData(_Data.default.refData.toOptions(_data.data, component.item));
|
|
85
|
+
setData(_Data.default.refData.toOptions(_data.data || _data, component.item));
|
|
86
86
|
}
|
|
87
87
|
|
|
88
88
|
setStatus(STATUS_COMPLETE);
|
|
@@ -12,6 +12,7 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
|
|
|
12
12
|
var TYPE_CANCEL = 'cancel';
|
|
13
13
|
var TYPE_COLLECTION_ADD = 'collectionAdd';
|
|
14
14
|
var TYPE_COLLECTION_DUPLICATE = 'collectionDuplicate';
|
|
15
|
+
var TYPE_COLLECTION_REMOVE = 'collectionRemove';
|
|
15
16
|
var TYPE_NAVIGATE = 'navigate';
|
|
16
17
|
var TYPE_SAVE_AND_CONTINUE = 'saveAndContinue';
|
|
17
18
|
var TYPE_SAVE_AND_NAVIGATE = 'saveAndNavigate';
|
|
@@ -21,6 +22,7 @@ var PageActionTypes = {
|
|
|
21
22
|
CANCEL: TYPE_CANCEL,
|
|
22
23
|
COLLECTION_ADD: TYPE_COLLECTION_ADD,
|
|
23
24
|
COLLECTION_DUPLICATE: TYPE_COLLECTION_DUPLICATE,
|
|
25
|
+
COLLECTION_REMOVE: TYPE_COLLECTION_REMOVE,
|
|
24
26
|
NAVIGATE: TYPE_NAVIGATE,
|
|
25
27
|
SAVE_AND_CONTINUE: TYPE_SAVE_AND_CONTINUE,
|
|
26
28
|
SAVE_AND_NAVIGATE: TYPE_SAVE_AND_NAVIGATE,
|
|
@@ -33,7 +35,7 @@ var DefaultPageActions = (_DefaultPageActions = {}, _defineProperty(_DefaultPage
|
|
|
33
35
|
validate: false,
|
|
34
36
|
label: 'Cancel',
|
|
35
37
|
classModifiers: 'secondary'
|
|
36
|
-
}), _defineProperty(_DefaultPageActions, TYPE_COLLECTION_ADD, undefined), _defineProperty(_DefaultPageActions, TYPE_COLLECTION_DUPLICATE, undefined), _defineProperty(_DefaultPageActions, TYPE_NAVIGATE, undefined), _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, {
|
|
37
39
|
type: TYPE_SAVE_AND_CONTINUE,
|
|
38
40
|
validate: true,
|
|
39
41
|
label: 'Save and continue'
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _copReactComponents = require("@ukhomeoffice/cop-react-components");
|
|
9
|
+
|
|
10
|
+
var _models = require("../../models");
|
|
11
|
+
|
|
12
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
13
|
+
|
|
14
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
15
|
+
|
|
16
|
+
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
17
|
+
|
|
18
|
+
var getCYACollectionChangeAction = function getCYACollectionChangeAction(page, item, _onAction, labelCount, action) {
|
|
19
|
+
var label = (action === null || action === void 0 ? void 0 : action.label) || _models.CollectionLabels.change;
|
|
20
|
+
return {
|
|
21
|
+
pageId: page.id,
|
|
22
|
+
fieldId: "change".concat(labelCount).concat(action.page),
|
|
23
|
+
key: "change".concat(labelCount).concat(action.page),
|
|
24
|
+
type: 'action',
|
|
25
|
+
action: {
|
|
26
|
+
onAction: function onAction(row) {
|
|
27
|
+
var changeCallback = function changeCallback(data) {
|
|
28
|
+
data["".concat(page.collection.name, "ActiveId")] = item.id;
|
|
29
|
+
return data;
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
var nextPage = row;
|
|
33
|
+
|
|
34
|
+
if (action.page) {
|
|
35
|
+
nextPage = {
|
|
36
|
+
pageId: action.page
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
_onAction(nextPage, changeCallback);
|
|
41
|
+
},
|
|
42
|
+
label: _copReactComponents.Utils.interpolateString(label, _objectSpread(_objectSpread({}, item), {}, {
|
|
43
|
+
index: labelCount
|
|
44
|
+
}))
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
var _default = getCYACollectionChangeAction;
|
|
50
|
+
exports.default = _default;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _getCYACollectionChangeAction = _interopRequireDefault(require("./getCYACollectionChangeAction"));
|
|
4
|
+
|
|
5
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
6
|
+
|
|
7
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
8
|
+
|
|
9
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
10
|
+
|
|
11
|
+
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
12
|
+
|
|
13
|
+
describe('utils', function () {
|
|
14
|
+
describe('CheckYourAnswers', function () {
|
|
15
|
+
describe('getCYACollectionChangeAction', function () {
|
|
16
|
+
var PAGE = {
|
|
17
|
+
id: 2,
|
|
18
|
+
collection: {
|
|
19
|
+
name: 'collectionName'
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
var ITEM = {
|
|
23
|
+
id: 2
|
|
24
|
+
};
|
|
25
|
+
var TEST_DATA = {
|
|
26
|
+
page: _objectSpread({}, PAGE),
|
|
27
|
+
collectionName: [{
|
|
28
|
+
id: 1
|
|
29
|
+
}, {
|
|
30
|
+
id: 2
|
|
31
|
+
}, {
|
|
32
|
+
id: 3
|
|
33
|
+
}],
|
|
34
|
+
collectionNameActiveId: 3
|
|
35
|
+
};
|
|
36
|
+
it('should change activeId to the selected item and call onAction with the correct page', function () {
|
|
37
|
+
var ON_ACTION = function ON_ACTION(row, call_back) {
|
|
38
|
+
expect(row.id).toEqual(2);
|
|
39
|
+
TEST_DATA = call_back(TEST_DATA);
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
var action = (0, _getCYACollectionChangeAction.default)(PAGE, ITEM, ON_ACTION, 0, {});
|
|
43
|
+
action.action.onAction(PAGE);
|
|
44
|
+
expect(TEST_DATA.collectionNameActiveId).toEqual(2);
|
|
45
|
+
});
|
|
46
|
+
it('should get label to custom value', function () {
|
|
47
|
+
var action = (0, _getCYACollectionChangeAction.default)(PAGE, ITEM, function () {}, 0, {
|
|
48
|
+
label: 'customName'
|
|
49
|
+
});
|
|
50
|
+
expect(action.action.label).toEqual('customName');
|
|
51
|
+
});
|
|
52
|
+
it('should call onAction with a custom page', function () {
|
|
53
|
+
var PAGE_WITH_CUSTOM_DESTINATION = {
|
|
54
|
+
id: 2,
|
|
55
|
+
collection: {
|
|
56
|
+
name: 'collectionName',
|
|
57
|
+
actions: [{
|
|
58
|
+
type: 'change',
|
|
59
|
+
label: 'confirm delete',
|
|
60
|
+
page: 'confirmDelete'
|
|
61
|
+
}]
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
var ON_ACTION = function ON_ACTION(page, call_back) {
|
|
66
|
+
expect(page.pageId).toEqual('confirmDelete');
|
|
67
|
+
TEST_DATA = call_back(TEST_DATA);
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
var action = (0, _getCYACollectionChangeAction.default)(PAGE_WITH_CUSTOM_DESTINATION, ITEM, ON_ACTION, 0, PAGE_WITH_CUSTOM_DESTINATION.collection.actions[0]);
|
|
71
|
+
action.action.onAction({});
|
|
72
|
+
expect(TEST_DATA.collectionNameActiveId).toEqual(2);
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
});
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _copReactComponents = require("@ukhomeoffice/cop-react-components");
|
|
9
|
+
|
|
10
|
+
var _models = require("../../models");
|
|
11
|
+
|
|
12
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
13
|
+
|
|
14
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
15
|
+
|
|
16
|
+
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
17
|
+
|
|
18
|
+
var getCYACollectionDeleteAction = function getCYACollectionDeleteAction(page, item, _onAction, labelCount, action) {
|
|
19
|
+
var label = (action === null || action === void 0 ? void 0 : action.label) || _models.CollectionLabels.remove;
|
|
20
|
+
return {
|
|
21
|
+
pageId: page.id,
|
|
22
|
+
fieldId: "delete".concat(labelCount),
|
|
23
|
+
key: "delete".concat(labelCount),
|
|
24
|
+
type: 'action',
|
|
25
|
+
action: {
|
|
26
|
+
onAction: function onAction() {
|
|
27
|
+
var deleteCallback = function deleteCallback(data) {
|
|
28
|
+
data["".concat(page.collection.name)] = data["".concat(page.collection.name)].filter(function (i) {
|
|
29
|
+
return i.id !== item.id;
|
|
30
|
+
});
|
|
31
|
+
return data;
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
_onAction(null, deleteCallback);
|
|
35
|
+
},
|
|
36
|
+
label: _copReactComponents.Utils.interpolateString(label, _objectSpread(_objectSpread({}, item), {}, {
|
|
37
|
+
index: labelCount
|
|
38
|
+
}))
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
var _default = getCYACollectionDeleteAction;
|
|
44
|
+
exports.default = _default;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _getCYACollectionDeleteAction = _interopRequireDefault(require("./getCYACollectionDeleteAction"));
|
|
4
|
+
|
|
5
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
6
|
+
|
|
7
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
8
|
+
|
|
9
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
10
|
+
|
|
11
|
+
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
12
|
+
|
|
13
|
+
describe('utils', function () {
|
|
14
|
+
describe('CheckYourAnswers', function () {
|
|
15
|
+
describe('getCYACollectionDeleteAction', function () {
|
|
16
|
+
var PAGE = {
|
|
17
|
+
id: 'pageid',
|
|
18
|
+
collection: {
|
|
19
|
+
name: 'collectionName',
|
|
20
|
+
labels: {
|
|
21
|
+
remove: 'customName'
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
var ITEM = {
|
|
26
|
+
id: 2
|
|
27
|
+
};
|
|
28
|
+
var TEST_DATA = {
|
|
29
|
+
page: _objectSpread({}, PAGE),
|
|
30
|
+
collectionName: [{
|
|
31
|
+
id: 1
|
|
32
|
+
}, {
|
|
33
|
+
id: 2
|
|
34
|
+
}, {
|
|
35
|
+
id: 3
|
|
36
|
+
}]
|
|
37
|
+
};
|
|
38
|
+
it('should remove selected item from the form data', function () {
|
|
39
|
+
var data = null;
|
|
40
|
+
|
|
41
|
+
var ON_ACTION = function ON_ACTION(undefined, call_back) {
|
|
42
|
+
data = call_back(TEST_DATA);
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
var action = (0, _getCYACollectionDeleteAction.default)(PAGE, ITEM, ON_ACTION, 0, {});
|
|
46
|
+
action.action.onAction();
|
|
47
|
+
expect(data.collectionName.length).toEqual(2);
|
|
48
|
+
expect(data.collectionName[0].id).toEqual(1);
|
|
49
|
+
expect(data.collectionName[1].id).toEqual(3);
|
|
50
|
+
});
|
|
51
|
+
it('should get label to custom value', function () {
|
|
52
|
+
var action = (0, _getCYACollectionDeleteAction.default)(PAGE, ITEM, function () {}, 0, {
|
|
53
|
+
label: "customName"
|
|
54
|
+
});
|
|
55
|
+
expect(action.action.label).toEqual('customName');
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
});
|
|
@@ -11,6 +11,10 @@ var _models = require("../../models");
|
|
|
11
11
|
|
|
12
12
|
var _getCYARowsForContainer = _interopRequireDefault(require("./getCYARowsForContainer"));
|
|
13
13
|
|
|
14
|
+
var _getCYACollectionDeleteAction = _interopRequireDefault(require("./getCYACollectionDeleteAction"));
|
|
15
|
+
|
|
16
|
+
var _getCYACollectionChangeAction = _interopRequireDefault(require("./getCYACollectionChangeAction"));
|
|
17
|
+
|
|
14
18
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
15
19
|
|
|
16
20
|
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; }
|
|
@@ -19,17 +23,6 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
|
|
|
19
23
|
|
|
20
24
|
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
25
|
|
|
22
|
-
var getChangeActionForItem = function getChangeActionForItem(page, item, onAction) {
|
|
23
|
-
return function (row) {
|
|
24
|
-
var changeCallback = function changeCallback(data) {
|
|
25
|
-
data["".concat(page.collection.name, "ActiveId")] = item.id;
|
|
26
|
-
return data;
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
onAction(row, changeCallback);
|
|
30
|
-
};
|
|
31
|
-
};
|
|
32
|
-
|
|
33
26
|
var getContainerForPage = function getContainerForPage(page, item, labelCount, full_path) {
|
|
34
27
|
return {
|
|
35
28
|
id: item.id,
|
|
@@ -62,6 +55,23 @@ var getTitleRowForItem = function getTitleRowForItem(page, item, pageId, labelCo
|
|
|
62
55
|
};
|
|
63
56
|
};
|
|
64
57
|
|
|
58
|
+
var getActionRows = function getActionRows(page, item, onAction, labelCount) {
|
|
59
|
+
var _page$collection, _page$collection$acti;
|
|
60
|
+
|
|
61
|
+
var actions = (_page$collection = page.collection) === null || _page$collection === void 0 ? void 0 : (_page$collection$acti = _page$collection.actions) === null || _page$collection$acti === void 0 ? void 0 : _page$collection$acti.map(function (action) {
|
|
62
|
+
if (action.type === 'remove') {
|
|
63
|
+
return (0, _getCYACollectionDeleteAction.default)(page, item, onAction, labelCount, action);
|
|
64
|
+
} else if (action.type === 'change') {
|
|
65
|
+
return (0, _getCYACollectionChangeAction.default)(page, item, onAction, labelCount, action);
|
|
66
|
+
} else {
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
}).filter(function (action) {
|
|
70
|
+
return !!action;
|
|
71
|
+
});
|
|
72
|
+
return actions;
|
|
73
|
+
};
|
|
74
|
+
|
|
65
75
|
var getCYARowsForCollectionPage = function getCYARowsForCollectionPage(page, onAction) {
|
|
66
76
|
var _page$formData, _page$formData$page$c;
|
|
67
77
|
|
|
@@ -70,10 +80,11 @@ var getCYARowsForCollectionPage = function getCYARowsForCollectionPage(page, onA
|
|
|
70
80
|
var labelCount = index + 1;
|
|
71
81
|
var full_path = "".concat(page.collection.name, "[").concat(index, "]");
|
|
72
82
|
var container = getContainerForPage(page, item, labelCount, full_path);
|
|
73
|
-
var
|
|
74
|
-
var containerRows = (0, _getCYARowsForContainer.default)(page, container, item, itemChangeAction);
|
|
83
|
+
var containerRows = (0, _getCYARowsForContainer.default)(page, container, item, undefined);
|
|
75
84
|
var titleRow = getTitleRowForItem(page, item, page.id, labelCount, full_path);
|
|
85
|
+
var actionRows = getActionRows(page, item, onAction, labelCount);
|
|
76
86
|
rows = rows.concat(titleRow);
|
|
87
|
+
rows = rows.concat(actionRows);
|
|
77
88
|
rows = rows.concat(containerRows);
|
|
78
89
|
});
|
|
79
90
|
return rows.filter(function (row) {
|
|
@@ -23,7 +23,17 @@ describe('utils.CheckYourAnswers.getCYARowsForCollectionPage', function () {
|
|
|
23
23
|
name: 'collection',
|
|
24
24
|
labels: {
|
|
25
25
|
item: 'Collection entry ${index}'
|
|
26
|
-
}
|
|
26
|
+
},
|
|
27
|
+
actions: [{
|
|
28
|
+
type: 'change'
|
|
29
|
+
}, {
|
|
30
|
+
type: 'remove',
|
|
31
|
+
label: 'custom remove label'
|
|
32
|
+
}, {
|
|
33
|
+
type: 'change',
|
|
34
|
+
label: 'custom change label',
|
|
35
|
+
page: 'confirmDelete'
|
|
36
|
+
}]
|
|
27
37
|
},
|
|
28
38
|
title: 'Collection',
|
|
29
39
|
components: [TEXT_COMP]
|
|
@@ -51,7 +61,7 @@ describe('utils.CheckYourAnswers.getCYARowsForCollectionPage', function () {
|
|
|
51
61
|
});
|
|
52
62
|
|
|
53
63
|
var ROWS = (0, _getCYARowsForCollectionPage.default)(PAGE, null);
|
|
54
|
-
expect(ROWS.length).toEqual(
|
|
64
|
+
expect(ROWS.length).toEqual(5); // Title row + action rows + component row
|
|
55
65
|
|
|
56
66
|
expect(ROWS[0].key).toEqual('Collection entry 1');
|
|
57
67
|
});
|
|
@@ -71,7 +81,7 @@ describe('utils.CheckYourAnswers.getCYARowsForCollectionPage', function () {
|
|
|
71
81
|
});
|
|
72
82
|
|
|
73
83
|
var ROWS = (0, _getCYARowsForCollectionPage.default)(PAGE, null);
|
|
74
|
-
expect(ROWS.length).toEqual(
|
|
84
|
+
expect(ROWS.length).toEqual(5); // Title row + action rows + component row
|
|
75
85
|
|
|
76
86
|
expect(ROWS[0].key).toEqual('Item 1');
|
|
77
87
|
});
|
|
@@ -91,17 +101,23 @@ describe('utils.CheckYourAnswers.getCYARowsForCollectionPage', function () {
|
|
|
91
101
|
});
|
|
92
102
|
|
|
93
103
|
var ROWS = (0, _getCYARowsForCollectionPage.default)(PAGE, null);
|
|
94
|
-
expect(ROWS.length).toEqual(
|
|
104
|
+
expect(ROWS.length).toEqual(10); // Title row + component row for each item
|
|
95
105
|
|
|
96
106
|
expect(ROWS[0].type).toEqual('title');
|
|
97
107
|
expect(ROWS[0].key).toEqual('Collection entry 1'); // Formatted according to collection.labels.item
|
|
98
108
|
|
|
99
|
-
expect(ROWS[1].
|
|
100
|
-
expect(ROWS[
|
|
101
|
-
expect(ROWS[
|
|
102
|
-
expect(ROWS[
|
|
103
|
-
|
|
104
|
-
expect(ROWS[
|
|
105
|
-
expect(ROWS[
|
|
109
|
+
expect(ROWS[1].action.label).toEqual('Change');
|
|
110
|
+
expect(ROWS[2].action.label).toEqual('custom remove label');
|
|
111
|
+
expect(ROWS[3].action.label).toEqual('custom change label');
|
|
112
|
+
expect(ROWS[4].value).toEqual('value');
|
|
113
|
+
expect(ROWS[4].key).toEqual('Test text');
|
|
114
|
+
expect(ROWS[5].type).toEqual('title');
|
|
115
|
+
expect(ROWS[5].key).toEqual('Collection entry 2'); // Formatted according to collection.labels.item
|
|
116
|
+
|
|
117
|
+
expect(ROWS[6].action.label).toEqual('Change');
|
|
118
|
+
expect(ROWS[7].action.label).toEqual('custom remove label');
|
|
119
|
+
expect(ROWS[8].action.label).toEqual('custom change label');
|
|
120
|
+
expect(ROWS[9].value).toEqual('value');
|
|
121
|
+
expect(ROWS[9].key).toEqual('Test text');
|
|
106
122
|
});
|
|
107
123
|
});
|
|
@@ -19,6 +19,10 @@ var _mustBeShorterThan = _interopRequireDefault(require("./mustBeShorterThan"));
|
|
|
19
19
|
|
|
20
20
|
var _mustEnterAtLeastOne = _interopRequireDefault(require("./mustEnterAtLeastOne"));
|
|
21
21
|
|
|
22
|
+
var _mustBeNumbersOnly = _interopRequireDefault(require("./mustBeNumbersOnly"));
|
|
23
|
+
|
|
24
|
+
var _mustBeLessThan = _interopRequireDefault(require("./mustBeLessThan"));
|
|
25
|
+
|
|
22
26
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
23
27
|
|
|
24
28
|
// Local imports
|
|
@@ -29,7 +33,9 @@ var functions = {
|
|
|
29
33
|
mustBeInTheFuture: _mustBeInTheFuture.default,
|
|
30
34
|
mustBeLongerThan: _mustBeLongerThan.default,
|
|
31
35
|
mustBeShorterThan: _mustBeShorterThan.default,
|
|
32
|
-
mustEnterAtLeastOne: _mustEnterAtLeastOne.default
|
|
36
|
+
mustEnterAtLeastOne: _mustEnterAtLeastOne.default,
|
|
37
|
+
mustBeNumbersOnly: _mustBeNumbersOnly.default,
|
|
38
|
+
mustBeLessThan: _mustBeLessThan.default
|
|
33
39
|
};
|
|
34
40
|
|
|
35
41
|
var additionalValidation = function additionalValidation(value, config, component) {
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* @param {string} string - the string to check value.
|
|
10
|
+
* @param {number} config.value - the string.value must be equal or less than config.value.
|
|
11
|
+
* @returns true if sting value is equal to or less then config.value, false if not.
|
|
12
|
+
*/
|
|
13
|
+
var mustBeLessThan = function mustBeLessThan(string, config) {
|
|
14
|
+
if (!string) {
|
|
15
|
+
// null, undefined and empty strings should be picked up by the required flag
|
|
16
|
+
// and not considered here as they would be valid for optional fields.
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
return string < config.value;
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
var _default = mustBeLessThan;
|
|
24
|
+
exports.default = _default;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _mustBeLessThan = _interopRequireDefault(require("./mustBeLessThan"));
|
|
4
|
+
|
|
5
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
6
|
+
|
|
7
|
+
describe('utils', function () {
|
|
8
|
+
describe('Validate', function () {
|
|
9
|
+
describe('additional', function () {
|
|
10
|
+
describe('mustBeShorterThan', function () {
|
|
11
|
+
test('should return true given a number equal to or less than 1000000000', function () {
|
|
12
|
+
var result = (0, _mustBeLessThan.default)(999999999.999, {
|
|
13
|
+
value: 1000000000
|
|
14
|
+
});
|
|
15
|
+
expect(result).toEqual(true);
|
|
16
|
+
});
|
|
17
|
+
test('should return false if provided value greater than 1000000000', function () {
|
|
18
|
+
var result = (0, _mustBeLessThan.default)('1000000000.9', {
|
|
19
|
+
value: 1000000000
|
|
20
|
+
});
|
|
21
|
+
expect(result).toBeFalsy();
|
|
22
|
+
});
|
|
23
|
+
test('should return true when string is undefined', function () {
|
|
24
|
+
var result = (0, _mustBeLessThan.default)(undefined, {
|
|
25
|
+
value: 3
|
|
26
|
+
});
|
|
27
|
+
expect(result).toEqual(true);
|
|
28
|
+
});
|
|
29
|
+
test('should return true when string is empty', function () {
|
|
30
|
+
var result = (0, _mustBeLessThan.default)('', {
|
|
31
|
+
value: 3
|
|
32
|
+
});
|
|
33
|
+
expect(result).toEqual(true);
|
|
34
|
+
});
|
|
35
|
+
test('should return true when string is null', function () {
|
|
36
|
+
var result = (0, _mustBeLessThan.default)(null, {
|
|
37
|
+
value: 3
|
|
38
|
+
});
|
|
39
|
+
expect(result).toEqual(true);
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
});
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* @returns true if number pass the regex, false if not.
|
|
10
|
+
*/
|
|
11
|
+
var mustBeNumbersOnly = function mustBeNumbersOnly(number) {
|
|
12
|
+
var numbersOnlyRegex = /^[0-9]*\.?[0-9]*$/;
|
|
13
|
+
|
|
14
|
+
if (!number) {
|
|
15
|
+
// null, undefined and empty numbers should be picked up by the required flag
|
|
16
|
+
// and not considered here as they would be valid for optional fields.
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
return numbersOnlyRegex.test(number);
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
var _default = mustBeNumbersOnly;
|
|
24
|
+
exports.default = _default;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _mustBeNumbersOnly = _interopRequireDefault(require("./mustBeNumbersOnly"));
|
|
4
|
+
|
|
5
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
6
|
+
|
|
7
|
+
describe('utils', function () {
|
|
8
|
+
describe('Validate', function () {
|
|
9
|
+
describe('additional', function () {
|
|
10
|
+
describe('mustBeNumbersOnly', function () {
|
|
11
|
+
test('should return true given a string is number', function () {
|
|
12
|
+
var result = (0, _mustBeNumbersOnly.default)('349732');
|
|
13
|
+
expect(result).toEqual(true);
|
|
14
|
+
});
|
|
15
|
+
test('should return true given a string is numbers contains desimile', function () {
|
|
16
|
+
var result = (0, _mustBeNumbersOnly.default)('123456.123');
|
|
17
|
+
expect(result).toEqual(true);
|
|
18
|
+
});
|
|
19
|
+
test('should return false if given number contains letters', function () {
|
|
20
|
+
var result = (0, _mustBeNumbersOnly.default)('123124Hello');
|
|
21
|
+
expect(result).toEqual(false);
|
|
22
|
+
});
|
|
23
|
+
test('should return true when string is undefined', function () {
|
|
24
|
+
var result = (0, _mustBeNumbersOnly.default)(undefined);
|
|
25
|
+
expect(result).toEqual(true);
|
|
26
|
+
});
|
|
27
|
+
test('should return true when string is empty', function () {
|
|
28
|
+
var result = (0, _mustBeNumbersOnly.default)('');
|
|
29
|
+
expect(result).toEqual(true);
|
|
30
|
+
});
|
|
31
|
+
test('should return true when string is null', function () {
|
|
32
|
+
var result = (0, _mustBeNumbersOnly.default)(null);
|
|
33
|
+
expect(result).toEqual(true);
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ukhomeoffice/cop-react-form-renderer",
|
|
3
|
-
"version": "4.0.0
|
|
3
|
+
"version": "4.0.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"scripts": {
|
|
6
6
|
"clean": "rimraf dist",
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"post-compile": "rimraf dist/*.test.* dist/**/*.test.* dist/**/*.stories.* dist/docs dist/assets"
|
|
17
17
|
},
|
|
18
18
|
"dependencies": {
|
|
19
|
-
"@ukhomeoffice/cop-react-components": "2.0.0
|
|
19
|
+
"@ukhomeoffice/cop-react-components": "^2.0.0",
|
|
20
20
|
"axios": "^0.23.0",
|
|
21
21
|
"dayjs": "^1.11.0",
|
|
22
22
|
"govuk-frontend": "^4.3.1",
|