@ukhomeoffice/cop-react-form-renderer 5.86.1 → 5.87.1

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.
@@ -62,7 +62,7 @@ var SummaryCardDetails = function SummaryCardDetails(_ref) {
62
62
  if (component.type === _models.ComponentTypes.CONTAINER) {
63
63
  var containerRows = (0, _getCYARowsForContainer.default)(childPage, component, entryData);
64
64
  rowIndex += 1;
65
- return /*#__PURE__*/_react.default.createElement("dl", {
65
+ return /*#__PURE__*/_react.default.createElement("div", {
66
66
  key: fieldId,
67
67
  className: classes('field'),
68
68
  style: {
@@ -84,7 +84,7 @@ var SummaryCardDetails = function SummaryCardDetails(_ref) {
84
84
  }), component, entryData[component.id]);
85
85
  rowIndex += 1;
86
86
  var collectionHeadingIndex = 0;
87
- return /*#__PURE__*/_react.default.createElement("dl", {
87
+ return /*#__PURE__*/_react.default.createElement("div", {
88
88
  key: fieldId,
89
89
  className: classes('field'),
90
90
  style: {
@@ -113,7 +113,7 @@ var SummaryCardDetails = function SummaryCardDetails(_ref) {
113
113
  }));
114
114
  }
115
115
  rowIndex += 1;
116
- return /*#__PURE__*/_react.default.createElement("dl", {
116
+ return /*#__PURE__*/_react.default.createElement("div", {
117
117
  key: fieldId,
118
118
  className: classes('field'),
119
119
  style: {
@@ -183,7 +183,7 @@ var SummaryCardDetails = function SummaryCardDetails(_ref) {
183
183
  className: classes('section')
184
184
  }, !hideChildSectionTitles && /*#__PURE__*/_react.default.createElement("h3", {
185
185
  className: classes('section-title')
186
- }, _utils.default.FormPage.getConditionalText(section.title, _objectSpread(_objectSpread({}, childPage.formData), entryData))), /*#__PURE__*/_react.default.createElement("div", {
186
+ }, _utils.default.FormPage.getConditionalText(section.title, _objectSpread(_objectSpread({}, childPage.formData), entryData))), /*#__PURE__*/_react.default.createElement("dl", {
187
187
  className: classes('section-content'),
188
188
  style: {
189
189
  '--dividers': columns.length - 1
@@ -62,13 +62,25 @@ var FormPage = function FormPage(_ref) {
62
62
  var onPageChange = function onPageChange(_ref2) {
63
63
  var target = _ref2.target;
64
64
  var formPage = page;
65
- formPage.formData[target.name] = target.value;
66
- setPatch(function (prev) {
67
- return _objectSpread(_objectSpread({}, prev), {}, _defineProperty({}, target.name, target.value));
68
- });
69
- setPatchLabel(function (prev) {
70
- return _objectSpread(_objectSpread({}, prev), {}, _defineProperty({}, target.component, target.label));
71
- });
65
+ if (target.value == null) {
66
+ delete formPage.formData[target.name];
67
+ setPatch(function (prev) {
68
+ var data = prev;
69
+ return delete data[target.name];
70
+ });
71
+ setPatchLabel(function (prev) {
72
+ var data = prev;
73
+ return delete data[target.component];
74
+ });
75
+ } else {
76
+ formPage.formData[target.name] = target.value;
77
+ setPatch(function (prev) {
78
+ return _objectSpread(_objectSpread({}, prev), {}, _defineProperty({}, target.name, target.value));
79
+ });
80
+ setPatchLabel(function (prev) {
81
+ return _objectSpread(_objectSpread({}, prev), {}, _defineProperty({}, target.component, target.label));
82
+ });
83
+ }
72
84
  if (typeof onChange === 'function') {
73
85
  onChange(page.formData);
74
86
  }
@@ -100,7 +100,11 @@ var onPageAction = function onPageAction(action, patch, patchLabel, hooks, data,
100
100
  break;
101
101
  }
102
102
  ;
103
- /* eslint-enable no-case-declarations */
103
+
104
+ // If a value has been deleted from formData,
105
+ // also delete it from data before doing object spread,
106
+ // or else it will reappear in submissionData.
107
+ _utils.default.Data.deleteValues(data, formState.page.formData);
104
108
 
105
109
  // Save draft or submit.
106
110
  var submissionData = _utils.default.Format.form({
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ /**
8
+ * Find values in data not in formData
9
+ * and delete them from data.
10
+ * @param {object} data The page's data.
11
+ * @param {object} formData The page's formData.
12
+ */
13
+ var deleteValues = function deleteValues(data, formData) {
14
+ var deletedValues = Object.keys(data).filter(function (k) {
15
+ return !(k in formData);
16
+ });
17
+ var node = data;
18
+ deletedValues.forEach(function (i) {
19
+ return delete node[i];
20
+ });
21
+ };
22
+ var _default = exports.default = deleteValues;
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+
3
+ var _deleteValues = _interopRequireDefault(require("./deleteValues"));
4
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
5
+ describe('Utils.Data.deleteValues', function () {
6
+ it('Should delete values from data', function () {
7
+ var DATA = {
8
+ a: '1',
9
+ b: '2',
10
+ c: '3'
11
+ };
12
+ var FORMDATA = {
13
+ a: '1'
14
+ };
15
+ (0, _deleteValues.default)(DATA, FORMDATA);
16
+ expect(DATA).toEqual({
17
+ a: '1'
18
+ });
19
+ });
20
+ it('Should leave data unchanged if no differences', function () {
21
+ var DATA = {
22
+ a: '1',
23
+ b: '2',
24
+ c: '3'
25
+ };
26
+ var FORMDATA = {
27
+ a: '1',
28
+ b: '2',
29
+ c: '3'
30
+ };
31
+ (0, _deleteValues.default)(DATA, FORMDATA);
32
+ expect(DATA).toEqual({
33
+ a: '1',
34
+ b: '2',
35
+ c: '3'
36
+ });
37
+ });
38
+ it('Should leave data unchanged if form data has additional fields', function () {
39
+ var DATA = {
40
+ a: '1',
41
+ b: '2',
42
+ c: '3'
43
+ };
44
+ var FORMDATA = {
45
+ a: '1',
46
+ b: '2',
47
+ c: '3',
48
+ d: '4'
49
+ };
50
+ (0, _deleteValues.default)(DATA, FORMDATA);
51
+ expect(DATA).toEqual({
52
+ a: '1',
53
+ b: '2',
54
+ c: '3'
55
+ });
56
+ });
57
+ });
@@ -10,6 +10,7 @@ var _getDataPath = _interopRequireDefault(require("./getDataPath"));
10
10
  var _getOptions = _interopRequireDefault(require("./getOptions"));
11
11
  var _getSourceData = _interopRequireDefault(require("./getSourceData"));
12
12
  var _refDataToOptions = _interopRequireDefault(require("./refDataToOptions"));
13
+ var _deleteValues = _interopRequireDefault(require("./deleteValues"));
13
14
  var _setDataItem = _interopRequireDefault(require("./setDataItem"));
14
15
  var _setupFormData = _interopRequireDefault(require("./setupFormData"));
15
16
  var _setupRefDataUrlForComponent = _interopRequireDefault(require("./setupRefDataUrlForComponent"));
@@ -26,6 +27,7 @@ var Data = {
26
27
  setupUrl: _setupRefDataUrlForComponent.default,
27
28
  toOptions: _refDataToOptions.default
28
29
  },
30
+ deleteValues: _deleteValues.default,
29
31
  setDataItem: _setDataItem.default,
30
32
  setupForm: _setupFormData.default
31
33
  };
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ /**
8
+ * Simple operation to delete a value in the form data.
9
+ * @param {object} config The operation config.
10
+ * @param {object} data The page's formData.
11
+ * @param {function} onChange The page's onChange handler.
12
+ */
13
+ var deleteValueInFormData = function deleteValueInFormData(config, data, onChange) {
14
+ var node = data;
15
+ if (config !== null && config !== void 0 && config.field && config !== null && config !== void 0 && config.component) {
16
+ delete node[config.field];
17
+ onChange({
18
+ target: {
19
+ name: config.field,
20
+ value: null,
21
+ component: config.component
22
+ }
23
+ });
24
+ }
25
+ };
26
+ var _default = exports.default = deleteValueInFormData;
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+
3
+ var _deleteValueInFormData = _interopRequireDefault(require("./deleteValueInFormData"));
4
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
5
+ describe('Utils.Operate.deleteValueInFormData', function () {
6
+ var ON_CHANGE = function ON_CHANGE() {};
7
+ it('Should delete value from data', function () {
8
+ var CONFIG = {
9
+ field: 'a',
10
+ component: 'A'
11
+ };
12
+ var DATA = {
13
+ a: '1',
14
+ b: '2'
15
+ };
16
+ (0, _deleteValueInFormData.default)(CONFIG, DATA, ON_CHANGE);
17
+ expect(DATA).toEqual({
18
+ b: '2'
19
+ });
20
+ });
21
+ it('Should do nothing if value is absent', function () {
22
+ var CONFIG = {
23
+ field: 'c',
24
+ component: 'C'
25
+ };
26
+ var DATA = {
27
+ a: '1',
28
+ b: '2'
29
+ };
30
+ (0, _deleteValueInFormData.default)(CONFIG, DATA, ON_CHANGE);
31
+ expect(DATA).toEqual({
32
+ a: '1',
33
+ b: '2'
34
+ });
35
+ });
36
+ it('Should do nothing if config is null', function () {
37
+ var CONFIG = null;
38
+ var DATA = {
39
+ a: '1',
40
+ b: '2'
41
+ };
42
+ (0, _deleteValueInFormData.default)(CONFIG, DATA, ON_CHANGE);
43
+ expect(DATA).toEqual({
44
+ a: '1',
45
+ b: '2'
46
+ });
47
+ });
48
+ it('Should do nothing if config is empty', function () {
49
+ var CONFIG = {};
50
+ var DATA = {
51
+ a: '1',
52
+ b: '2'
53
+ };
54
+ (0, _deleteValueInFormData.default)(CONFIG, DATA, ON_CHANGE);
55
+ expect(DATA).toEqual({
56
+ a: '1',
57
+ b: '2'
58
+ });
59
+ });
60
+ });
@@ -9,6 +9,7 @@ var _checkValueIsTruthy = _interopRequireDefault(require("./checkValueIsTruthy")
9
9
  var _getIndexOfMatchingValueIn = _interopRequireDefault(require("./getIndexOfMatchingValueIn"));
10
10
  var _persistValueInFormData = _interopRequireDefault(require("./persistValueInFormData"));
11
11
  var _setValueInFormData = _interopRequireDefault(require("./setValueInFormData"));
12
+ var _deleteValueInFormData = _interopRequireDefault(require("./deleteValueInFormData"));
12
13
  var _shouldRun = _interopRequireDefault(require("./shouldRun"));
13
14
  var _setDataItem = _interopRequireDefault(require("../Data/setDataItem"));
14
15
  var _getFirstOf = _interopRequireDefault(require("./getFirstOf"));
@@ -23,6 +24,7 @@ var functions = {
23
24
  getIndexOfMatchingValueIn: _getIndexOfMatchingValueIn.default,
24
25
  persistValueInFormData: _persistValueInFormData.default,
25
26
  setValueInFormData: _setValueInFormData.default,
27
+ deleteValueInFormData: _deleteValueInFormData.default,
26
28
  getLength: _getLength.default,
27
29
  getFirstOf: _getFirstOf.default
28
30
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ukhomeoffice/cop-react-form-renderer",
3
- "version": "5.86.1",
3
+ "version": "5.87.1",
4
4
  "private": false,
5
5
  "scripts": {
6
6
  "clean": "rimraf dist",