@ukhomeoffice/cop-react-form-renderer 3.6.2 → 3.8.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.
@@ -5,6 +5,8 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
 
8
+ var _dayjs = _interopRequireDefault(require("dayjs"));
9
+
8
10
  var _getSourceData = _interopRequireDefault(require("./getSourceData"));
9
11
 
10
12
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -15,6 +17,56 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
15
17
 
16
18
  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
19
 
20
+ var setDefaultDateValue = function setDefaultDateValue(date, data) {
21
+ if (date.defaultValue === 'today') {
22
+ data[date.fieldId] = (0, _dayjs.default)().format('DD-MM-YYYY');
23
+ } else {
24
+ data[date.fieldId] = date.defaultValue;
25
+ }
26
+ };
27
+ /**
28
+ * This currently will not work for collections or containers.
29
+ * If support is required it will need to be added.
30
+ */
31
+
32
+
33
+ var setupDefaultValue = function setupDefaultValue(component, data) {
34
+ if (component.defaultValue && !data[component.fieldId]) {
35
+ switch (component.type) {
36
+ case 'date':
37
+ setDefaultDateValue(component, data);
38
+ break;
39
+
40
+ default:
41
+ data[component.fieldId] = component.defaultValue;
42
+ }
43
+ }
44
+
45
+ if (component.defaultValue) {
46
+ // Some components will throw warnings when having
47
+ // both a 'value' and 'defaultValue' prop set.
48
+ // defaultValue is safe to delete once we've tried
49
+ // to use it.
50
+ delete component.defaultValue;
51
+ }
52
+ };
53
+
54
+ var setupDefaultValuesForComponents = function setupDefaultValuesForComponents(components, data) {
55
+ components.forEach(function (component) {
56
+ return setupDefaultValue(component, data);
57
+ });
58
+ };
59
+
60
+ var setupPageDefaultValues = function setupPageDefaultValues(pages, data) {
61
+ pages.forEach(function (page) {
62
+ page.components.filter(function (c) {
63
+ return !c.use;
64
+ }).forEach(function (component) {
65
+ return setupDefaultValue(component, data);
66
+ });
67
+ });
68
+ };
69
+
18
70
  var setupComponentSourceData = function setupComponentSourceData(component, data) {
19
71
  if (component.source) {
20
72
  data[component.fieldId] = (0, _getSourceData.default)(data, component.source.field);
@@ -37,8 +89,11 @@ var setupPageSourceData = function setupPageSourceData(pages, data) {
37
89
  });
38
90
  };
39
91
  /**
40
- * This populates an object with data from source fields.
41
- * Note that this doesn't currently support sequenced dependencies:
92
+ * This populates an object with data either from a specified default
93
+ * value or from a source field. If both are specified, data from a
94
+ * source field will take priority.
95
+ * Note that in the case of source fields, this doesn't currently
96
+ * support sequenced dependencies:
42
97
  * 0: fieldA: source.field = fieldB
43
98
  * 1: fieldB: source.field = fieldC
44
99
  * 2: fieldC: 'value'
@@ -54,6 +109,8 @@ var setupPageSourceData = function setupPageSourceData(pages, data) {
54
109
  var setupFormData = function setupFormData(pages, components, baseData) {
55
110
  var data = _objectSpread({}, baseData);
56
111
 
112
+ setupDefaultValuesForComponents(components, data);
113
+ setupPageDefaultValues(pages, data);
57
114
  setupSourceDataForComponents(components, data);
58
115
  setupPageSourceData(pages, data);
59
116
  return data;
@@ -211,6 +211,66 @@ describe('utils', function () {
211
211
  delegateEmails: _userProfileData.default.userDetails.delegateEmails
212
212
  }));
213
213
  });
214
+ it('should handle a default value field', function () {
215
+ var PAGES = [];
216
+ var COMPONENTS = [{
217
+ fieldId: 'testField',
218
+ type: 'text',
219
+ defaultValue: 'VALUE'
220
+ }];
221
+ var DATA = {};
222
+ var RESULT = (0, _setupFormData.default)(PAGES, COMPONENTS, DATA);
223
+ expect(RESULT).toEqual({
224
+ testField: 'VALUE'
225
+ });
226
+ });
227
+ it('should ignore a default value when a value already exists in data', function () {
228
+ var PAGES = [];
229
+ var COMPONENTS = [{
230
+ fieldId: 'testField',
231
+ type: 'text',
232
+ defaultValue: 'VALUE'
233
+ }];
234
+ var DATA = {
235
+ testField: 'EXISTING_VALUE'
236
+ };
237
+ var RESULT = (0, _setupFormData.default)(PAGES, COMPONENTS, DATA);
238
+ expect(RESULT).toEqual({
239
+ testField: 'EXISTING_VALUE'
240
+ });
241
+ });
242
+ it('should handle default values within pages', function () {
243
+ var PAGES = [{
244
+ components: [{
245
+ fieldId: 'pageField',
246
+ type: 'text',
247
+ defaultValue: 'VALUE'
248
+ }]
249
+ }];
250
+ var COMPONENTS = [];
251
+ var DATA = {};
252
+ var RESULT = (0, _setupFormData.default)(PAGES, COMPONENTS, DATA);
253
+ expect(RESULT).toEqual({
254
+ pageField: 'VALUE'
255
+ });
256
+ });
257
+ it('should ignore default values within pages when a value already exists in data', function () {
258
+ var PAGES = [{
259
+ components: [{
260
+ fieldId: 'pageField',
261
+ type: 'text',
262
+ defaultValue: 'VALUE'
263
+ }]
264
+ }];
265
+ var COMPONENTS = [];
266
+ var DATA = {
267
+ pageField: 'EXISTING_VALUE'
268
+ };
269
+ var RESULT = (0, _setupFormData.default)(PAGES, COMPONENTS, DATA);
270
+ expect(RESULT).toEqual({
271
+ pageField: 'EXISTING_VALUE'
272
+ });
273
+ });
214
274
  });
215
275
  });
216
276
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ukhomeoffice/cop-react-form-renderer",
3
- "version": "3.6.2",
3
+ "version": "3.8.0",
4
4
  "private": false,
5
5
  "scripts": {
6
6
  "clean": "rimraf dist",
@@ -17,7 +17,7 @@
17
17
  },
18
18
  "dependencies": {
19
19
  "@ukhomeoffice/cop-react-components": "1.9.5",
20
- "axios": "^0.21.1",
20
+ "axios": "^0.23.0",
21
21
  "dayjs": "^1.11.0",
22
22
  "govuk-frontend": "^3.13.0",
23
23
  "web-vitals": "^1.0.1"