@ukhomeoffice/cop-react-form-renderer 3.12.0 → 3.13.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.
|
@@ -250,9 +250,14 @@ var InternalFormRenderer = function InternalFormRenderer(_ref2) {
|
|
|
250
250
|
}, [newPageId]); // Handle actions from pages.
|
|
251
251
|
|
|
252
252
|
var onPageAction = function onPageAction(action, patch) {
|
|
253
|
-
|
|
253
|
+
if (action.type === _models.PageAction.TYPES.CANCEL) {
|
|
254
|
+
hooks.onCancel();
|
|
255
|
+
return;
|
|
256
|
+
} // Re-apply the patch to the page's formData.
|
|
254
257
|
// This should normally have no effect but will prevent issues
|
|
255
258
|
// with validation if formData happens to have been wiped.
|
|
259
|
+
|
|
260
|
+
|
|
256
261
|
formState.page.formData = _objectSpread(_objectSpread({}, formState.page.formData), patch); // Check to see whether the action is able to proceed, which in
|
|
257
262
|
// in the case of a submission will validate the fields in the page.
|
|
258
263
|
|
|
@@ -388,6 +393,10 @@ var InternalFormRenderer = function InternalFormRenderer(_ref2) {
|
|
|
388
393
|
});
|
|
389
394
|
}
|
|
390
395
|
}
|
|
396
|
+
|
|
397
|
+
if (action.type === _models.PageAction.TYPES.CANCEL) {
|
|
398
|
+
hooks.onCancel();
|
|
399
|
+
}
|
|
391
400
|
};
|
|
392
401
|
|
|
393
402
|
var classes = _utils.default.classBuilder(classBlock, classModifiers, className);
|
|
@@ -99,6 +99,10 @@ describe('components', function () {
|
|
|
99
99
|
return page.childNodes[page.childNodes.length - 1].childNodes[0].childNodes[0];
|
|
100
100
|
};
|
|
101
101
|
|
|
102
|
+
var getCancelButton = function getCancelButton(page) {
|
|
103
|
+
return page.childNodes[page.childNodes.length - 1].childNodes[1].childNodes[0];
|
|
104
|
+
};
|
|
105
|
+
|
|
102
106
|
it('should start on the hub page correctly and display the title', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {
|
|
103
107
|
var form, title, hub;
|
|
104
108
|
return regeneratorRuntime.wrap(function _callee2$(_context2) {
|
|
@@ -743,5 +747,66 @@ describe('components', function () {
|
|
|
743
747
|
}
|
|
744
748
|
}, _callee20);
|
|
745
749
|
})));
|
|
750
|
+
it('should handle cancellation from a page', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee22() {
|
|
751
|
+
var ON_CANCEL_CALLS, ON_CANCEL, HOOKS, form, hub, _hub$childNodes5, civilServantList, link, page, cancel;
|
|
752
|
+
|
|
753
|
+
return regeneratorRuntime.wrap(function _callee22$(_context22) {
|
|
754
|
+
while (1) {
|
|
755
|
+
switch (_context22.prev = _context22.next) {
|
|
756
|
+
case 0:
|
|
757
|
+
ON_CANCEL_CALLS = [];
|
|
758
|
+
|
|
759
|
+
ON_CANCEL = function ON_CANCEL() {
|
|
760
|
+
ON_CANCEL_CALLS.push(undefined);
|
|
761
|
+
};
|
|
762
|
+
|
|
763
|
+
HOOKS = {
|
|
764
|
+
onCancel: ON_CANCEL
|
|
765
|
+
};
|
|
766
|
+
_context22.next = 5;
|
|
767
|
+
return (0, _testUtils.act)( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee21() {
|
|
768
|
+
return regeneratorRuntime.wrap(function _callee21$(_context21) {
|
|
769
|
+
while (1) {
|
|
770
|
+
switch (_context21.prev = _context21.next) {
|
|
771
|
+
case 0:
|
|
772
|
+
(0, _reactDom.render)( /*#__PURE__*/_react2.default.createElement(_FormRenderer.default, _extends({}, _userProfile.default, {
|
|
773
|
+
data: _userProfileData.default,
|
|
774
|
+
hooks: HOOKS
|
|
775
|
+
})), container);
|
|
776
|
+
|
|
777
|
+
case 1:
|
|
778
|
+
case "end":
|
|
779
|
+
return _context21.stop();
|
|
780
|
+
}
|
|
781
|
+
}
|
|
782
|
+
}, _callee21);
|
|
783
|
+
})));
|
|
784
|
+
|
|
785
|
+
case 5:
|
|
786
|
+
form = checkForm(container); // Navigate to the "Are you a civil servant?" page.
|
|
787
|
+
|
|
788
|
+
hub = form.childNodes[1]; // Hub = CYA
|
|
789
|
+
|
|
790
|
+
_hub$childNodes5 = _slicedToArray(hub.childNodes, 3), civilServantList = _hub$childNodes5[2];
|
|
791
|
+
link = getChangeLink(civilServantList);
|
|
792
|
+
|
|
793
|
+
_react.fireEvent.click(link, {}); // Should already be answered "Yes", so simply click "Continue".
|
|
794
|
+
|
|
795
|
+
|
|
796
|
+
page = form.childNodes[0];
|
|
797
|
+
cancel = getCancelButton(page);
|
|
798
|
+
expect(ON_CANCEL_CALLS.length).toEqual(0);
|
|
799
|
+
|
|
800
|
+
_react.fireEvent.click(cancel, {});
|
|
801
|
+
|
|
802
|
+
expect(ON_CANCEL_CALLS.length).toEqual(1);
|
|
803
|
+
|
|
804
|
+
case 15:
|
|
805
|
+
case "end":
|
|
806
|
+
return _context22.stop();
|
|
807
|
+
}
|
|
808
|
+
}
|
|
809
|
+
}, _callee22);
|
|
810
|
+
})));
|
|
746
811
|
});
|
|
747
812
|
});
|
|
@@ -45,7 +45,9 @@ var DEFAULT_HOOKS = {
|
|
|
45
45
|
},
|
|
46
46
|
onSubmit: function onSubmit(type, payload, onSuccess, onError) {
|
|
47
47
|
if (typeof onSuccess === 'function') onSuccess();
|
|
48
|
-
}
|
|
48
|
+
},
|
|
49
|
+
onCancel: function onCancel() {} // Consuming application must provide function to action, else this does nothing.
|
|
50
|
+
|
|
49
51
|
};
|
|
50
52
|
var ALLOWED_HOOKS = Object.keys(DEFAULT_HOOKS);
|
|
51
53
|
exports.ALLOWED_HOOKS = ALLOWED_HOOKS;
|
|
@@ -62,7 +64,8 @@ var HooksContextProvider = function HooksContextProvider(_ref) {
|
|
|
62
64
|
onGetComponent: (overrides === null || overrides === void 0 ? void 0 : overrides.onGetComponent) || DEFAULT_HOOKS.onGetComponent,
|
|
63
65
|
onPageChange: (overrides === null || overrides === void 0 ? void 0 : overrides.onPageChange) || DEFAULT_HOOKS.onPageChange,
|
|
64
66
|
onRequest: (overrides === null || overrides === void 0 ? void 0 : overrides.onRequest) || DEFAULT_HOOKS.onRequest,
|
|
65
|
-
onSubmit: (overrides === null || overrides === void 0 ? void 0 : overrides.onSubmit) || DEFAULT_HOOKS.onSubmit
|
|
67
|
+
onSubmit: (overrides === null || overrides === void 0 ? void 0 : overrides.onSubmit) || DEFAULT_HOOKS.onSubmit,
|
|
68
|
+
onCancel: (overrides === null || overrides === void 0 ? void 0 : overrides.onCancel) || DEFAULT_HOOKS.onCancel
|
|
66
69
|
}),
|
|
67
70
|
_useState2 = _slicedToArray(_useState, 2),
|
|
68
71
|
hooks = _useState2[0],
|
|
@@ -9,12 +9,14 @@ var _DefaultPageActions;
|
|
|
9
9
|
|
|
10
10
|
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; }
|
|
11
11
|
|
|
12
|
+
var TYPE_CANCEL = 'cancel';
|
|
12
13
|
var TYPE_NAVIGATE = 'navigate';
|
|
13
14
|
var TYPE_SAVE_AND_CONTINUE = 'saveAndContinue';
|
|
14
15
|
var TYPE_SAVE_AND_NAVIGATE = 'saveAndNavigate';
|
|
15
16
|
var TYPE_SAVE_AND_RETURN = 'saveAndReturn';
|
|
16
17
|
var TYPE_SUBMIT = 'submit';
|
|
17
18
|
var PageActionTypes = {
|
|
19
|
+
CANCEL: TYPE_CANCEL,
|
|
18
20
|
NAVIGATE: TYPE_NAVIGATE,
|
|
19
21
|
SAVE_AND_CONTINUE: TYPE_SAVE_AND_CONTINUE,
|
|
20
22
|
SAVE_AND_NAVIGATE: TYPE_SAVE_AND_NAVIGATE,
|
|
@@ -22,7 +24,12 @@ var PageActionTypes = {
|
|
|
22
24
|
SUBMIT: TYPE_SUBMIT
|
|
23
25
|
};
|
|
24
26
|
exports.PageActionTypes = PageActionTypes;
|
|
25
|
-
var DefaultPageActions = (_DefaultPageActions = {}, _defineProperty(_DefaultPageActions,
|
|
27
|
+
var DefaultPageActions = (_DefaultPageActions = {}, _defineProperty(_DefaultPageActions, TYPE_CANCEL, {
|
|
28
|
+
type: TYPE_CANCEL,
|
|
29
|
+
validate: false,
|
|
30
|
+
label: 'Cancel',
|
|
31
|
+
classModifiers: 'secondary'
|
|
32
|
+
}), _defineProperty(_DefaultPageActions, TYPE_NAVIGATE, undefined), _defineProperty(_DefaultPageActions, TYPE_SAVE_AND_CONTINUE, {
|
|
26
33
|
type: TYPE_SAVE_AND_CONTINUE,
|
|
27
34
|
validate: true,
|
|
28
35
|
label: 'Save and continue'
|