@ukhomeoffice/cop-react-form-renderer 3.32.5 → 3.35.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.
@@ -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,
@@ -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);
@@ -7,6 +7,7 @@ exports.default = void 0;
7
7
  var CollectionLabels = {
8
8
  add: 'Add another',
9
9
  remove: 'Remove',
10
+ change: 'Change',
10
11
  // eslint-disable-next-line no-template-curly-in-string
11
12
  item: 'Item ${index}'
12
13
  };
@@ -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 itemChangeAction = getChangeActionForItem(page, item, onAction);
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(2); // Title row + component row
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(2); // Title row + component row
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(4); // Title row + component row for each item
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].value).toEqual('value');
100
- expect(ROWS[1].key).toEqual('Test text');
101
- expect(ROWS[2].type).toEqual('title');
102
- expect(ROWS[2].key).toEqual('Collection entry 2'); // Formatted according to collection.labels.item
103
-
104
- expect(ROWS[3].value).toEqual('value');
105
- expect(ROWS[3].key).toEqual('Test text');
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": "3.32.5",
3
+ "version": "3.35.0",
4
4
  "private": false,
5
5
  "scripts": {
6
6
  "clean": "rimraf dist",