@ukhomeoffice/cop-react-form-renderer 5.13.0-alpha → 5.13.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.
@@ -123,6 +123,7 @@ CollectionPage.propTypes = {
123
123
  actions: _propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.shape({}), _propTypes.default.string])),
124
124
  formData: _propTypes.default.shape({}).isRequired
125
125
  }).isRequired,
126
+ onCollectionChange: _propTypes.default.func,
126
127
  onAction: _propTypes.default.func.isRequired,
127
128
  hashLink: _propTypes.default.bool,
128
129
  classBlock: _propTypes.default.string,
@@ -130,6 +131,7 @@ CollectionPage.propTypes = {
130
131
  className: _propTypes.default.string
131
132
  };
132
133
  CollectionPage.defaultProps = {
134
+ onCollectionChange: undefined,
133
135
  hashLink: false,
134
136
  classBlock: DEFAULT_CLASS,
135
137
  classModifiers: [],
@@ -5,11 +5,11 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.default = exports.DEFAULT_CLASS = void 0;
8
+ var _Utils = require("@ukhomeoffice/cop-react-components/dist/utils/Utils");
8
9
  var _react = _interopRequireDefault(require("react"));
9
10
  var _propTypes = _interopRequireDefault(require("prop-types"));
10
11
  var _models = require("../../models");
11
12
  var _utils = _interopRequireDefault(require("../../utils"));
12
- var _cleanAttributes = _interopRequireDefault(require("../../utils/Component/cleanAttributes"));
13
13
  var _FormComponent = _interopRequireDefault(require("./FormComponent"));
14
14
  var _excluded = ["container", "value", "formData", "onChange", "wrap", "onTopLevelChange"];
15
15
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -61,8 +61,8 @@ var Container = function Container(_ref) {
61
61
  }), formData);
62
62
  };
63
63
  var classes = _utils.default.classBuilder(DEFAULT_CLASS, [], container.className);
64
- var htmlAttrs = (0, _cleanAttributes.default)(attrs);
65
- return /*#__PURE__*/_react.default.createElement("div", _extends({}, htmlAttrs, {
64
+ var cleanedAttrs = (0, _Utils.cleanHtmlAttributes)(attrs);
65
+ return /*#__PURE__*/_react.default.createElement("div", _extends({}, cleanedAttrs, {
66
66
  className: classes(),
67
67
  id: container.id
68
68
  }), container.components && container.components.filter(shouldShow).map(function (component, index) {
@@ -101,7 +101,11 @@ var onCYAAction = function onCYAAction(setPagePoint, action, pages, validate, co
101
101
  onPageChange(_helpers.default.getNextPageId(type, pages, pageId, action, (_formState$page = formState.page) === null || _formState$page === void 0 ? void 0 : _formState$page.formData));
102
102
  }
103
103
  if (action.type === _models.PageAction.TYPES.CANCEL) {
104
- hooks.onCancel();
104
+ var formData = _utils.default.Format.form({
105
+ pages: pages,
106
+ components: components
107
+ }, _objectSpread({}, data), _models.EventTypes.CANCEL);
108
+ hooks.onCancel(formData);
105
109
  }
106
110
  };
107
111
  var _default = onCYAAction;
@@ -102,15 +102,15 @@ describe('components.FormRenderer.onCYAAction', function () {
102
102
  onFormComplete: function onFormComplete() {
103
103
  this.onFormCompleteCalls += 1;
104
104
  },
105
- onCancelCalls: 0,
106
- onCancel: function onCancel() {
107
- this.onCancelCalls += 1;
105
+ onCancelArgs: [],
106
+ onCancel: function onCancel(data) {
107
+ this.onCancelArgs.push(data);
108
108
  },
109
109
  reset: function reset() {
110
110
  this.onSubmitCalls = 0;
111
111
  this.onSubmitArgs = [];
112
112
  this.onFormCompleteCalls = 0;
113
- this.onCancelCalls = 0;
113
+ this.onCancelArgs = [];
114
114
  }
115
115
  };
116
116
  var setPagePointCalls = 0;
@@ -578,6 +578,9 @@ describe('components.FormRenderer.onCYAAction', function () {
578
578
  }
579
579
  });
580
580
  _onCYAAction.default.apply(void 0, Object.values(CUSTOM_ARGS));
581
- expect(MOCK_HOOKS.onCancelCalls).toEqual(1);
581
+ expect(MOCK_HOOKS.onCancelArgs.length).toEqual(1);
582
+ expect(MOCK_HOOKS.onCancelArgs[0]).toMatchObject({
583
+ id: 'formId'
584
+ });
582
585
  });
583
586
  });
@@ -20,11 +20,6 @@ function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input ==
20
20
  // patchLabel captures non-ID values
21
21
  // for display purposes after submission.)
22
22
  var onPageAction = function onPageAction(action, patch, patchLabel, hooks, data, formState, validate, onPageChange, type, pages, components, pageId, setPagePoint, currentTask, setData, hubDetails, setSubmitted, addErrors) {
23
- if (action.type === _models.PageAction.TYPES.CANCEL) {
24
- hooks.onCancel();
25
- return;
26
- }
27
- ;
28
23
  // Save a copy of data in case submit errors and we need to revert
29
24
  var preSubmitData = _objectSpread({}, data);
30
25
  var form = formState;
@@ -36,6 +31,14 @@ var onPageAction = function onPageAction(action, patch, patchLabel, hooks, data,
36
31
  // This should normally have no effect but will prevent issues
37
32
  // with validation if formData happens to have been wiped.
38
33
  form.page.formData = _objectSpread(_objectSpread({}, form.page.formData), _patch);
34
+
35
+ // Exposes form data to consuming application.
36
+ if (action.type === _models.PageAction.TYPES.CANCEL) {
37
+ hooks.onCancel(form.page.formData);
38
+ return;
39
+ }
40
+ ;
41
+
39
42
  // Check to see whether the action is able to proceed, which in
40
43
  // in the case of a submission will validate the fields in the page.
41
44
  if (_helpers.default.canActionProceed(action, form.page, validate.page)) {
@@ -121,15 +121,15 @@ describe('components.FormRenderer.onPageAction', function () {
121
121
  onFormComplete: function onFormComplete() {
122
122
  this.onFormCompleteCalls += 1;
123
123
  },
124
- onCancelCalls: 0,
125
- onCancel: function onCancel() {
126
- this.onCancelCalls += 1;
124
+ onCancelArgs: [],
125
+ onCancel: function onCancel(data) {
126
+ this.onCancelArgs.push(data);
127
127
  },
128
128
  reset: function reset() {
129
129
  this.onSubmitCalls = 0;
130
130
  this.onSubmitArgs = [];
131
131
  this.onFormCompleteCalls = 0;
132
- this.onCancelCalls = 0;
132
+ this.onCancelArgs = [];
133
133
  this.onActionCalls = 0;
134
134
  },
135
135
  onActionCalls: 0,
@@ -290,7 +290,8 @@ describe('components.FormRenderer.onPageAction', function () {
290
290
  action: ACTION
291
291
  });
292
292
  _onPageAction.default.apply(void 0, Object.values(CUSTOM_ARGS));
293
- expect(MOCK_HOOKS.onCancelCalls).toEqual(1);
293
+ expect(MOCK_HOOKS.onCancelArgs.length).toEqual(1);
294
+ expect(MOCK_HOOKS.onCancelArgs[0]).toMatchObject({});
294
295
  // Shouldn't get to the point of validation if
295
296
  // action is a cancel action.
296
297
  expect(_helpers.default.canActionProceedCalls).toEqual(0);
@@ -29,6 +29,7 @@ var SummaryList = function SummaryList(_ref) {
29
29
  className = _ref.className,
30
30
  attrs = _objectWithoutProperties(_ref, _excluded);
31
31
  var classes = _copReactComponents.Utils.classBuilder(classBlock, classModifiers, className);
32
+ var cleanedHtmlAttrs = _copReactComponents.Utils.cleanHtmlAttributes(attrs);
32
33
  var groupActionRow = null;
33
34
  if (isGroup) {
34
35
  var rowActions = rows.filter(function (r) {
@@ -38,7 +39,7 @@ var SummaryList = function SummaryList(_ref) {
38
39
  }
39
40
  return /*#__PURE__*/_react.default.createElement("div", {
40
41
  className: "group-of-rows"
41
- }, /*#__PURE__*/_react.default.createElement("dl", _extends({}, attrs, {
42
+ }, /*#__PURE__*/_react.default.createElement("dl", _extends({}, cleanedHtmlAttrs, {
42
43
  className: classes()
43
44
  }), rows.map(function (row) {
44
45
  var key = "".concat(row.pageId, "_").concat(row.full_path || row.fieldId);
@@ -45,7 +45,7 @@ var TaskList = function TaskList(_ref) {
45
45
  formData = _ref.formData,
46
46
  attrs = _objectWithoutProperties(_ref, _excluded);
47
47
  var classes = _copReactComponents.Utils.classBuilder(classBlock, classModifiers, className);
48
-
48
+ var cleanedHtmlAttrs = _copReactComponents.Utils.cleanHtmlAttributes(attrs);
49
49
  // TODO state will be retrieved from a document in S3 rather than given in the component definition, covered under COP-9885
50
50
  var _sections$filter$redu = sections.filter(function (section) {
51
51
  return !section.skipped;
@@ -71,7 +71,7 @@ var TaskList = function TaskList(_ref) {
71
71
  };
72
72
  return /*#__PURE__*/_react.default.createElement("div", _extends({
73
73
  id: id
74
- }, attrs, {
74
+ }, cleanedHtmlAttrs, {
75
75
  className: classes()
76
76
  }), refNumber && refTitle && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("p", {
77
77
  className: "govuk-body govuk-!-margin-bottom-0"
@@ -103,7 +103,7 @@ var TaskList = function TaskList(_ref) {
103
103
  className: classes('section')
104
104
  }, sections.length > 1 ? "".concat(index + 1, ". ") : '', section.name), /*#__PURE__*/_react.default.createElement("ol", {
105
105
  className: classes('items')
106
- }, /*#__PURE__*/_react.default.createElement(_dist.Hint, null, section.label ? section.label : ''), section.tasks.filter(function (task) {
106
+ }, /*#__PURE__*/_react.default.createElement("li", null, /*#__PURE__*/_react.default.createElement(_dist.Hint, null, section.label ? section.label : '')), section.tasks.filter(function (task) {
107
107
  return task.state !== _models.TaskStates.TYPES.SKIPPED;
108
108
  }).map(function (task) {
109
109
  return /*#__PURE__*/_react.default.createElement(_Task.default, {
@@ -56,7 +56,7 @@ var DEFAULT_HOOKS = {
56
56
  return errors;
57
57
  },
58
58
  // Returns the list of errors already found in FR by default.
59
- onCancel: function onCancel() {} // Consuming application must provide function to action, else this does nothing.
59
+ onCancel: function onCancel(data) {} // Consuming application must provide function to action, else this does nothing.
60
60
  };
61
61
 
62
62
  var ALLOWED_HOOKS = Object.keys(DEFAULT_HOOKS);
@@ -6,9 +6,11 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.default = void 0;
7
7
  var TYPE_BLUR = 'blur';
8
8
  var TYPE_SUBMIT = 'submit';
9
+ var TYPE_CANCEL = 'cancel';
9
10
  var EventTypes = {
10
11
  BLUR: TYPE_BLUR,
11
- SUBMIT: TYPE_SUBMIT
12
+ SUBMIT: TYPE_SUBMIT,
13
+ CANCEL: TYPE_CANCEL
12
14
  };
13
15
  var _default = EventTypes;
14
16
  exports.default = _default;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ukhomeoffice/cop-react-form-renderer",
3
- "version": "5.13.0-alpha",
3
+ "version": "5.13.1",
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": "^3.4.0",
19
+ "@ukhomeoffice/cop-react-components": "^3.4.1",
20
20
  "axios": "^0.23.0",
21
21
  "dayjs": "^1.11.0",
22
22
  "govuk-frontend": "^4.3.1",