@ukhomeoffice/cop-react-form-renderer 2.10.0 → 3.0.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.
- package/dist/components/CheckYourAnswers/Answer.test.js +12 -12
- package/dist/components/FormComponent/FormComponent.test.js +18 -15
- package/dist/components/FormRenderer/FormRenderer.js +9 -22
- package/dist/components/FormRenderer/FormRenderer.stories.mdx +31 -29
- package/dist/context/HooksContext/HooksContext.js +91 -0
- package/dist/context/HooksContext/HooksContext.test.js +60 -0
- package/dist/context/HooksContext/index.js +23 -0
- package/dist/context/ValidationContext/ValidationContext.js +8 -2
- package/dist/context/index.js +8 -0
- package/dist/hooks/useHooks.js +6 -53
- package/dist/index.js +1 -9
- package/dist/setupTests.js +31 -4
- package/dist/utils/CheckYourAnswers/getCYARowForGroup.test.js +4 -5
- package/dist/utils/CheckYourAnswers/getCYARowsForPage.test.js +2 -4
- package/dist/utils/Data/getSourceData.js +38 -0
- package/dist/utils/Data/getSourceData.test.js +16 -0
- package/package.json +2 -2
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _react = require("@testing-library/react");
|
|
4
|
-
|
|
5
3
|
var _Readonly = require("@ukhomeoffice/cop-react-components/dist/Readonly");
|
|
6
4
|
|
|
7
|
-
var
|
|
5
|
+
var _react = _interopRequireDefault(require("react"));
|
|
6
|
+
|
|
7
|
+
var _setupTests = require("../../setupTests");
|
|
8
8
|
|
|
9
9
|
var _Answer = _interopRequireDefault(require("./Answer"));
|
|
10
10
|
|
|
@@ -17,7 +17,7 @@ function _asyncToGenerator(fn) { return function () { var self = this, args = ar
|
|
|
17
17
|
describe('components', function () {
|
|
18
18
|
describe('CheckYourAnswers.Answer', function () {
|
|
19
19
|
it('should handle a null value', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
|
|
20
|
-
var VALUE, COMPONENT,
|
|
20
|
+
var VALUE, COMPONENT, _renderWithValidation, container;
|
|
21
21
|
|
|
22
22
|
return regeneratorRuntime.wrap(function _callee$(_context) {
|
|
23
23
|
while (1) {
|
|
@@ -25,10 +25,10 @@ describe('components', function () {
|
|
|
25
25
|
case 0:
|
|
26
26
|
VALUE = null;
|
|
27
27
|
COMPONENT = null;
|
|
28
|
-
|
|
28
|
+
_renderWithValidation = (0, _setupTests.renderWithValidation)( /*#__PURE__*/_react.default.createElement(_Answer.default, {
|
|
29
29
|
value: VALUE,
|
|
30
30
|
component: COMPONENT
|
|
31
|
-
})), container =
|
|
31
|
+
})), container = _renderWithValidation.container;
|
|
32
32
|
expect(container.childNodes.length).toEqual(1);
|
|
33
33
|
expect(container.childNodes[0].textContent).toEqual('No answer');
|
|
34
34
|
|
|
@@ -40,7 +40,7 @@ describe('components', function () {
|
|
|
40
40
|
}, _callee);
|
|
41
41
|
})));
|
|
42
42
|
it('should handle a null component', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {
|
|
43
|
-
var VALUE, COMPONENT,
|
|
43
|
+
var VALUE, COMPONENT, _renderWithValidation2, container;
|
|
44
44
|
|
|
45
45
|
return regeneratorRuntime.wrap(function _callee2$(_context2) {
|
|
46
46
|
while (1) {
|
|
@@ -48,10 +48,10 @@ describe('components', function () {
|
|
|
48
48
|
case 0:
|
|
49
49
|
VALUE = 'Alpha';
|
|
50
50
|
COMPONENT = null;
|
|
51
|
-
|
|
51
|
+
_renderWithValidation2 = (0, _setupTests.renderWithValidation)( /*#__PURE__*/_react.default.createElement(_Answer.default, {
|
|
52
52
|
value: VALUE,
|
|
53
53
|
component: COMPONENT
|
|
54
|
-
})), container =
|
|
54
|
+
})), container = _renderWithValidation2.container;
|
|
55
55
|
expect(container.textContent).toEqual(VALUE);
|
|
56
56
|
|
|
57
57
|
case 4:
|
|
@@ -62,7 +62,7 @@ describe('components', function () {
|
|
|
62
62
|
}, _callee2);
|
|
63
63
|
})));
|
|
64
64
|
it('should handle a component', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee3() {
|
|
65
|
-
var VALUE, COMPONENT,
|
|
65
|
+
var VALUE, COMPONENT, _renderWithValidation3, container, answer;
|
|
66
66
|
|
|
67
67
|
return regeneratorRuntime.wrap(function _callee3$(_context3) {
|
|
68
68
|
while (1) {
|
|
@@ -75,10 +75,10 @@ describe('components', function () {
|
|
|
75
75
|
type: 'text',
|
|
76
76
|
label: 'Alpha'
|
|
77
77
|
};
|
|
78
|
-
|
|
78
|
+
_renderWithValidation3 = (0, _setupTests.renderWithValidation)( /*#__PURE__*/_react.default.createElement(_Answer.default, {
|
|
79
79
|
value: VALUE,
|
|
80
80
|
component: COMPONENT
|
|
81
|
-
})), container =
|
|
81
|
+
})), container = _renderWithValidation3.container;
|
|
82
82
|
answer = container.childNodes[0];
|
|
83
83
|
expect(answer.tagName).toEqual('DIV');
|
|
84
84
|
expect(answer.classList).toContain(_Readonly.DEFAULT_CLASS);
|
|
@@ -2,8 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
var _react = _interopRequireDefault(require("react"));
|
|
4
4
|
|
|
5
|
-
var _useHooks = require("../../hooks/useHooks");
|
|
6
|
-
|
|
7
5
|
var _setupTests = require("../../setupTests");
|
|
8
6
|
|
|
9
7
|
var _FormComponent = _interopRequireDefault(require("./FormComponent"));
|
|
@@ -16,9 +14,6 @@ function _asyncToGenerator(fn) { return function () { var self = this, args = ar
|
|
|
16
14
|
|
|
17
15
|
describe('components', function () {
|
|
18
16
|
describe('FormComponent', function () {
|
|
19
|
-
beforeEach(function () {
|
|
20
|
-
(0, _useHooks.resetHooks)();
|
|
21
|
-
});
|
|
22
17
|
it('should render a text component appropriately', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
|
|
23
18
|
var ID, VALUE, COMPONENT, ON_CHANGE, _renderWithValidation, container, formGroup, label, hint, input;
|
|
24
19
|
|
|
@@ -139,15 +134,17 @@ describe('components', function () {
|
|
|
139
134
|
}, _callee3);
|
|
140
135
|
})));
|
|
141
136
|
it('should render an overridden html component appropriately', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee4() {
|
|
142
|
-
var ID, COMPONENT, _renderWithValidation4, container, div;
|
|
137
|
+
var hooks, ID, COMPONENT, _renderWithValidation4, container, div;
|
|
143
138
|
|
|
144
139
|
return regeneratorRuntime.wrap(function _callee4$(_context4) {
|
|
145
140
|
while (1) {
|
|
146
141
|
switch (_context4.prev = _context4.next) {
|
|
147
142
|
case 0:
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
143
|
+
hooks = {
|
|
144
|
+
onGetComponent: function onGetComponent(config, wrap) {
|
|
145
|
+
return /*#__PURE__*/_react.default.createElement("div", null, "".concat(config.type, " | ").concat(config.tagName, " | ").concat(config.content, " | ").concat(wrap));
|
|
146
|
+
}
|
|
147
|
+
};
|
|
151
148
|
ID = 'component';
|
|
152
149
|
COMPONENT = {
|
|
153
150
|
type: 'html',
|
|
@@ -157,7 +154,9 @@ describe('components', function () {
|
|
|
157
154
|
_renderWithValidation4 = (0, _setupTests.renderWithValidation)( /*#__PURE__*/_react.default.createElement(_FormComponent.default, {
|
|
158
155
|
"data-testid": ID,
|
|
159
156
|
component: COMPONENT
|
|
160
|
-
})
|
|
157
|
+
}), {
|
|
158
|
+
hooks: hooks
|
|
159
|
+
}), container = _renderWithValidation4.container;
|
|
161
160
|
div = container.childNodes[0];
|
|
162
161
|
expect(div.tagName).toEqual('DIV');
|
|
163
162
|
expect(div.textContent).toEqual("".concat(COMPONENT.type, " | ").concat(COMPONENT.tagName, " | ").concat(COMPONENT.content, " | true"));
|
|
@@ -170,15 +169,17 @@ describe('components', function () {
|
|
|
170
169
|
}, _callee4);
|
|
171
170
|
})));
|
|
172
171
|
it('should render the correct html component when the override returns null', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee5() {
|
|
173
|
-
var ID, COMPONENT, _renderWithValidation5, container, p;
|
|
172
|
+
var hooks, ID, COMPONENT, _renderWithValidation5, container, p;
|
|
174
173
|
|
|
175
174
|
return regeneratorRuntime.wrap(function _callee5$(_context5) {
|
|
176
175
|
while (1) {
|
|
177
176
|
switch (_context5.prev = _context5.next) {
|
|
178
177
|
case 0:
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
178
|
+
hooks = {
|
|
179
|
+
onGetComponent: function onGetComponent() {
|
|
180
|
+
return null;
|
|
181
|
+
}
|
|
182
|
+
};
|
|
182
183
|
ID = 'component';
|
|
183
184
|
COMPONENT = {
|
|
184
185
|
type: 'html',
|
|
@@ -188,7 +189,9 @@ describe('components', function () {
|
|
|
188
189
|
_renderWithValidation5 = (0, _setupTests.renderWithValidation)( /*#__PURE__*/_react.default.createElement(_FormComponent.default, {
|
|
189
190
|
"data-testid": ID,
|
|
190
191
|
component: COMPONENT
|
|
191
|
-
})
|
|
192
|
+
}), {
|
|
193
|
+
hooks: hooks
|
|
194
|
+
}), container = _renderWithValidation5.container;
|
|
192
195
|
p = container.childNodes[0];
|
|
193
196
|
expect(p.tagName).toEqual('P');
|
|
194
197
|
expect(p.textContent).toEqual(COMPONENT.content);
|
|
@@ -15,7 +15,7 @@ var _react = _interopRequireWildcard(require("react"));
|
|
|
15
15
|
|
|
16
16
|
var _context = require("../../context");
|
|
17
17
|
|
|
18
|
-
var
|
|
18
|
+
var _hooks = require("../../hooks");
|
|
19
19
|
|
|
20
20
|
var _models = require("../../models");
|
|
21
21
|
|
|
@@ -74,7 +74,9 @@ var FormRenderer = function FormRenderer(_ref) {
|
|
|
74
74
|
hide_title = _ref.hide_title,
|
|
75
75
|
summaryListClassModifiers = _ref.summaryListClassModifiers,
|
|
76
76
|
noChangeAction = _ref.noChangeAction;
|
|
77
|
-
return /*#__PURE__*/_react.default.createElement(_context.
|
|
77
|
+
return /*#__PURE__*/_react.default.createElement(_context.HooksContextProvider, {
|
|
78
|
+
overrides: hooks
|
|
79
|
+
}, /*#__PURE__*/_react.default.createElement(_context.ValidationContextProvider, null, /*#__PURE__*/_react.default.createElement(InternalFormRenderer, {
|
|
78
80
|
title: title,
|
|
79
81
|
type: type,
|
|
80
82
|
components: components,
|
|
@@ -82,14 +84,13 @@ var FormRenderer = function FormRenderer(_ref) {
|
|
|
82
84
|
hub: hub,
|
|
83
85
|
cya: cya,
|
|
84
86
|
data: data,
|
|
85
|
-
hooks: hooks,
|
|
86
87
|
classBlock: classBlock,
|
|
87
88
|
classModifiers: classModifiers,
|
|
88
89
|
className: className,
|
|
89
90
|
hide_title: hide_title,
|
|
90
91
|
summaryListClassModifiers: summaryListClassModifiers,
|
|
91
92
|
noChangeAction: noChangeAction
|
|
92
|
-
}));
|
|
93
|
+
})));
|
|
93
94
|
};
|
|
94
95
|
|
|
95
96
|
var DEFAULT_CLASS = 'hods-form';
|
|
@@ -103,7 +104,6 @@ var InternalFormRenderer = function InternalFormRenderer(_ref2) {
|
|
|
103
104
|
_hub = _ref2.hub,
|
|
104
105
|
cya = _ref2.cya,
|
|
105
106
|
_data = _ref2.data,
|
|
106
|
-
_hooks = _ref2.hooks,
|
|
107
107
|
classBlock = _ref2.classBlock,
|
|
108
108
|
classModifiers = _ref2.classModifiers,
|
|
109
109
|
className = _ref2.className,
|
|
@@ -153,19 +153,11 @@ var InternalFormRenderer = function InternalFormRenderer(_ref2) {
|
|
|
153
153
|
setHubDetails = _useState16[1]; // Set up hooks.
|
|
154
154
|
|
|
155
155
|
|
|
156
|
-
var _useHooks = (0,
|
|
157
|
-
hooks = _useHooks.hooks
|
|
158
|
-
addHook = _useHooks.addHook;
|
|
156
|
+
var _useHooks = (0, _hooks.useHooks)(),
|
|
157
|
+
hooks = _useHooks.hooks; // Set up the useValidation hook.
|
|
159
158
|
|
|
160
|
-
(0, _react.useEffect)(function () {
|
|
161
|
-
if (_hooks) {
|
|
162
|
-
Object.keys(_hooks).forEach(function (key) {
|
|
163
|
-
addHook(key, _hooks[key]);
|
|
164
|
-
});
|
|
165
|
-
}
|
|
166
|
-
}, [_hooks, addHook]); // Set up the useValidation hook.
|
|
167
159
|
|
|
168
|
-
var _useValidation = (0,
|
|
160
|
+
var _useValidation = (0, _hooks.useValidation)(),
|
|
169
161
|
addErrors = _useValidation.addErrors,
|
|
170
162
|
clearErrors = _useValidation.clearErrors,
|
|
171
163
|
validate = _useValidation.validate; // Setup data.
|
|
@@ -423,12 +415,7 @@ FormRenderer.propTypes = InternalFormRenderer.propTypes = {
|
|
|
423
415
|
hub: _propTypes.default.object,
|
|
424
416
|
cya: _propTypes.default.object,
|
|
425
417
|
data: _propTypes.default.object,
|
|
426
|
-
hooks: _propTypes.default.
|
|
427
|
-
onFormLoad: _propTypes.default.func,
|
|
428
|
-
onPageChange: _propTypes.default.func,
|
|
429
|
-
onRequest: _propTypes.default.func,
|
|
430
|
-
onSubmit: _propTypes.default.func
|
|
431
|
-
}),
|
|
418
|
+
hooks: _propTypes.default.object,
|
|
432
419
|
classBlock: _propTypes.default.string,
|
|
433
420
|
classModifiers: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.arrayOf(_propTypes.default.string)]),
|
|
434
421
|
className: _propTypes.default.string,
|
|
@@ -12,12 +12,9 @@ import { useState } from 'react';
|
|
|
12
12
|
import withMock from 'storybook-addon-mock';
|
|
13
13
|
|
|
14
14
|
<!-- Local imports -->
|
|
15
|
-
|
|
16
|
-
import { addHook } from '../../hooks/useHooks';
|
|
17
15
|
import FormRenderer from './FormRenderer';
|
|
18
16
|
|
|
19
17
|
<!-- JSON documents -->
|
|
20
|
-
|
|
21
18
|
import CIVIL_SERVANT from '../../json/areYouACivilServant.json';
|
|
22
19
|
import FIRST_FORM from '../../json/firstForm.json';
|
|
23
20
|
import GRADE from '../../json/grade.json';
|
|
@@ -82,31 +79,6 @@ on the basis of a <Link href="/?path=/docs/f-json-form">JSON</Link> that describ
|
|
|
82
79
|
{() => {
|
|
83
80
|
const [complete, setComplete] = useState(false);
|
|
84
81
|
const [returnLater, setReturnLater] = useState(false);
|
|
85
|
-
addHook('onRequest', (req) => {
|
|
86
|
-
// Do whatever you need to do to the request in here, such as adding an Authorization header.
|
|
87
|
-
console.log('onRequest hook called');
|
|
88
|
-
return req;
|
|
89
|
-
});
|
|
90
|
-
addHook('onFormLoad', () => {
|
|
91
|
-
console.log('onFormLoad called');
|
|
92
|
-
});
|
|
93
|
-
addHook('onFormComplete', () => {
|
|
94
|
-
console.log('onFormComplete called');
|
|
95
|
-
setComplete(true);
|
|
96
|
-
});
|
|
97
|
-
addHook('onPageChange', (pageId) => {
|
|
98
|
-
console.log('onPageChange called', pageId);
|
|
99
|
-
setReturnLater(!!pageId === false);
|
|
100
|
-
});
|
|
101
|
-
addHook('onSubmit', (type, payload, onSuccess, onError) => {
|
|
102
|
-
console.log(
|
|
103
|
-
'onSubmit called of type',
|
|
104
|
-
type,
|
|
105
|
-
'called, with the payload',
|
|
106
|
-
payload
|
|
107
|
-
);
|
|
108
|
-
onSuccess();
|
|
109
|
-
});
|
|
110
82
|
const reset = () => {
|
|
111
83
|
setComplete(false);
|
|
112
84
|
setReturnLater(false);
|
|
@@ -114,7 +86,37 @@ on the basis of a <Link href="/?path=/docs/f-json-form">JSON</Link> that describ
|
|
|
114
86
|
return (
|
|
115
87
|
<>
|
|
116
88
|
{!complete && !returnLater && (
|
|
117
|
-
<FormRenderer
|
|
89
|
+
<FormRenderer
|
|
90
|
+
{...FIRST_FORM}
|
|
91
|
+
data={{}}
|
|
92
|
+
hooks={{
|
|
93
|
+
onRequest: (req) => {
|
|
94
|
+
// Do whatever you need to do to the request in here, such as adding an Authorization header.
|
|
95
|
+
console.log('onRequest hook called');
|
|
96
|
+
return req;
|
|
97
|
+
},
|
|
98
|
+
onFormLoad: () => {
|
|
99
|
+
console.log('onFormLoad called');
|
|
100
|
+
},
|
|
101
|
+
onFormComplete: () => {
|
|
102
|
+
console.log('onFormComplete called');
|
|
103
|
+
setComplete(true);
|
|
104
|
+
},
|
|
105
|
+
onPageChange: (pageId) => {
|
|
106
|
+
console.log('onPageChange called', pageId);
|
|
107
|
+
setReturnLater(!!pageId === false);
|
|
108
|
+
},
|
|
109
|
+
onSubmit: (type, payload, onSuccess, onError) => {
|
|
110
|
+
console.log(
|
|
111
|
+
'onSubmit called of type',
|
|
112
|
+
type,
|
|
113
|
+
'called, with the payload',
|
|
114
|
+
payload
|
|
115
|
+
);
|
|
116
|
+
onSuccess();
|
|
117
|
+
}
|
|
118
|
+
}}
|
|
119
|
+
/>
|
|
118
120
|
)}
|
|
119
121
|
{complete && (
|
|
120
122
|
<div>
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = exports.HooksContext = exports.ALLOWED_HOOKS = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = require("react");
|
|
9
|
+
|
|
10
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
|
11
|
+
|
|
12
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
13
|
+
|
|
14
|
+
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; }
|
|
15
|
+
|
|
16
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
17
|
+
|
|
18
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
19
|
+
|
|
20
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
21
|
+
|
|
22
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
23
|
+
|
|
24
|
+
function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
|
|
25
|
+
|
|
26
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
27
|
+
|
|
28
|
+
var DEFAULT_HOOKS = {
|
|
29
|
+
onFormComplete: function onFormComplete() {},
|
|
30
|
+
onFormLoad: function onFormLoad() {},
|
|
31
|
+
onGetComponent: function onGetComponent(config, wrap) {
|
|
32
|
+
return null;
|
|
33
|
+
},
|
|
34
|
+
onPageChange: function onPageChange(pageId) {
|
|
35
|
+
return pageId;
|
|
36
|
+
},
|
|
37
|
+
onRequest: function onRequest(req) {
|
|
38
|
+
return req;
|
|
39
|
+
},
|
|
40
|
+
onSubmit: function onSubmit(type, payload, onSuccess, onError) {
|
|
41
|
+
if (typeof onSuccess === 'function') onSuccess();
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
var ALLOWED_HOOKS = Object.keys(DEFAULT_HOOKS);
|
|
45
|
+
exports.ALLOWED_HOOKS = ALLOWED_HOOKS;
|
|
46
|
+
var HooksContext = /*#__PURE__*/(0, _react.createContext)();
|
|
47
|
+
exports.HooksContext = HooksContext;
|
|
48
|
+
|
|
49
|
+
var HooksContextProvider = function HooksContextProvider(_ref) {
|
|
50
|
+
var overrides = _ref.overrides,
|
|
51
|
+
children = _ref.children;
|
|
52
|
+
|
|
53
|
+
var _useState = (0, _react.useState)({
|
|
54
|
+
onFormComplete: (overrides === null || overrides === void 0 ? void 0 : overrides.onFormComplete) || DEFAULT_HOOKS.onFormComplete,
|
|
55
|
+
onFormLoad: (overrides === null || overrides === void 0 ? void 0 : overrides.onFormLoad) || DEFAULT_HOOKS.onFormLoad,
|
|
56
|
+
onGetComponent: (overrides === null || overrides === void 0 ? void 0 : overrides.onGetComponent) || DEFAULT_HOOKS.onGetComponent,
|
|
57
|
+
onPageChange: (overrides === null || overrides === void 0 ? void 0 : overrides.onPageChange) || DEFAULT_HOOKS.onPageChange,
|
|
58
|
+
onRequest: (overrides === null || overrides === void 0 ? void 0 : overrides.onRequest) || DEFAULT_HOOKS.onRequest,
|
|
59
|
+
onSubmit: (overrides === null || overrides === void 0 ? void 0 : overrides.onSubmit) || DEFAULT_HOOKS.onSubmit
|
|
60
|
+
}),
|
|
61
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
62
|
+
hooks = _useState2[0],
|
|
63
|
+
setHooks = _useState2[1];
|
|
64
|
+
|
|
65
|
+
var addHook = function addHook(name, hook) {
|
|
66
|
+
if (ALLOWED_HOOKS.includes(name)) {
|
|
67
|
+
setHooks(function (prev) {
|
|
68
|
+
return _objectSpread(_objectSpread({}, prev), {}, _defineProperty({}, name, hook || DEFAULT_HOOKS[name]));
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
var removeHook = function removeHook(name) {
|
|
74
|
+
if (ALLOWED_HOOKS.includes(name)) {
|
|
75
|
+
setHooks(function (prev) {
|
|
76
|
+
return _objectSpread(_objectSpread({}, prev), {}, _defineProperty({}, name, DEFAULT_HOOKS[name]));
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
return /*#__PURE__*/React.createElement(HooksContext.Provider, {
|
|
82
|
+
value: {
|
|
83
|
+
hooks: hooks,
|
|
84
|
+
addHook: addHook,
|
|
85
|
+
removeHook: removeHook
|
|
86
|
+
}
|
|
87
|
+
}, children);
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
var _default = HooksContextProvider;
|
|
91
|
+
exports.default = _default;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
|
|
4
|
+
|
|
5
|
+
var _react = require("@testing-library/react");
|
|
6
|
+
|
|
7
|
+
var _react2 = _interopRequireDefault(require("react"));
|
|
8
|
+
|
|
9
|
+
var _hooks = require("../../hooks");
|
|
10
|
+
|
|
11
|
+
var _HooksContext = _interopRequireWildcard(require("./HooksContext"));
|
|
12
|
+
|
|
13
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
14
|
+
|
|
15
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
16
|
+
|
|
17
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
18
|
+
|
|
19
|
+
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
20
|
+
|
|
21
|
+
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
22
|
+
|
|
23
|
+
var TestComponent = function TestComponent() {
|
|
24
|
+
var _useHooks = (0, _hooks.useHooks)(),
|
|
25
|
+
hooks = _useHooks.hooks,
|
|
26
|
+
addHook = _useHooks.addHook,
|
|
27
|
+
removeHook = _useHooks.removeHook;
|
|
28
|
+
|
|
29
|
+
return /*#__PURE__*/_react2.default.createElement(_react2.default.Fragment, null, typeof addHook === 'function' && /*#__PURE__*/_react2.default.createElement("span", null, "addHook is a function"), typeof removeHook === 'function' && /*#__PURE__*/_react2.default.createElement("span", null, "removeHook is a function"), Object.keys(hooks).map(function (key) {
|
|
30
|
+
return typeof hooks[key] === 'function' && /*#__PURE__*/_react2.default.createElement("span", {
|
|
31
|
+
key: key
|
|
32
|
+
}, key, " is a function");
|
|
33
|
+
}));
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
describe('context.ValidationContext', function () {
|
|
37
|
+
it('should appropriately set up the context', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
|
|
38
|
+
var _render, container;
|
|
39
|
+
|
|
40
|
+
return regeneratorRuntime.wrap(function _callee$(_context) {
|
|
41
|
+
while (1) {
|
|
42
|
+
switch (_context.prev = _context.next) {
|
|
43
|
+
case 0:
|
|
44
|
+
_render = (0, _react.render)( /*#__PURE__*/_react2.default.createElement(_HooksContext.default, null, /*#__PURE__*/_react2.default.createElement(TestComponent, null))), container = _render.container;
|
|
45
|
+
expect(container.childNodes.length).toEqual(2 + _HooksContext.ALLOWED_HOOKS.length);
|
|
46
|
+
expect(container.textContent).toContain('addHook is a function');
|
|
47
|
+
expect(container.textContent).toContain('removeHook is a function');
|
|
48
|
+
|
|
49
|
+
_HooksContext.ALLOWED_HOOKS.forEach(function (hook) {
|
|
50
|
+
expect(container.textContent).toContain("".concat(hook, " is a function"));
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
case 5:
|
|
54
|
+
case "end":
|
|
55
|
+
return _context.stop();
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}, _callee);
|
|
59
|
+
})));
|
|
60
|
+
});
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
Object.defineProperty(exports, "HooksContext", {
|
|
9
|
+
enumerable: true,
|
|
10
|
+
get: function get() {
|
|
11
|
+
return _HooksContext.HooksContext;
|
|
12
|
+
}
|
|
13
|
+
});
|
|
14
|
+
exports.default = void 0;
|
|
15
|
+
|
|
16
|
+
var _HooksContext = _interopRequireWildcard(require("./HooksContext"));
|
|
17
|
+
|
|
18
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
19
|
+
|
|
20
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
21
|
+
|
|
22
|
+
var _default = _HooksContext.default;
|
|
23
|
+
exports.default = _default;
|
|
@@ -1,16 +1,22 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
|
|
4
|
+
|
|
3
5
|
Object.defineProperty(exports, "__esModule", {
|
|
4
6
|
value: true
|
|
5
7
|
});
|
|
6
8
|
exports.default = exports.ValidationContext = void 0;
|
|
7
9
|
|
|
8
|
-
var _react = require("react");
|
|
10
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
9
11
|
|
|
10
12
|
var _utils = _interopRequireDefault(require("../../utils"));
|
|
11
13
|
|
|
12
14
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
15
|
|
|
16
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
17
|
+
|
|
18
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
19
|
+
|
|
14
20
|
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
|
15
21
|
|
|
16
22
|
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
@@ -108,7 +114,7 @@ var ValidationContextProvider = function ValidationContextProvider(_ref) {
|
|
|
108
114
|
return pagesErrors;
|
|
109
115
|
}
|
|
110
116
|
};
|
|
111
|
-
return /*#__PURE__*/
|
|
117
|
+
return /*#__PURE__*/_react.default.createElement(ValidationContext.Provider, {
|
|
112
118
|
value: {
|
|
113
119
|
errors: errors,
|
|
114
120
|
addErrors: addErrors,
|
package/dist/context/index.js
CHANGED
|
@@ -3,6 +3,12 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
Object.defineProperty(exports, "HooksContextProvider", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function get() {
|
|
9
|
+
return _HooksContext.default;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
6
12
|
Object.defineProperty(exports, "ValidationContextProvider", {
|
|
7
13
|
enumerable: true,
|
|
8
14
|
get: function get() {
|
|
@@ -10,6 +16,8 @@ Object.defineProperty(exports, "ValidationContextProvider", {
|
|
|
10
16
|
}
|
|
11
17
|
});
|
|
12
18
|
|
|
19
|
+
var _HooksContext = _interopRequireDefault(require("./HooksContext"));
|
|
20
|
+
|
|
13
21
|
var _ValidationContext = _interopRequireDefault(require("./ValidationContext"));
|
|
14
22
|
|
|
15
23
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
package/dist/hooks/useHooks.js
CHANGED
|
@@ -3,63 +3,16 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
7
|
-
var ALLOWED_HOOKS = ['onFormComplete', 'onFormLoad', 'onGetComponent', 'onPageChange', 'onRequest', 'onSubmit'];
|
|
8
|
-
exports.ALLOWED_HOOKS = ALLOWED_HOOKS;
|
|
9
|
-
var DEFAULT_HOOKS = {
|
|
10
|
-
onFormComplete: function onFormComplete() {},
|
|
11
|
-
onFormLoad: function onFormLoad() {},
|
|
12
|
-
onGetComponent: function onGetComponent(config, wrap) {
|
|
13
|
-
return null;
|
|
14
|
-
},
|
|
15
|
-
onPageChange: function onPageChange(pageId) {
|
|
16
|
-
return pageId;
|
|
17
|
-
},
|
|
18
|
-
onRequest: function onRequest(req) {
|
|
19
|
-
return req;
|
|
20
|
-
},
|
|
21
|
-
onSubmit: function onSubmit(type, payload, onSuccess, onError) {
|
|
22
|
-
if (typeof onSuccess === 'function') onSuccess();
|
|
23
|
-
}
|
|
24
|
-
};
|
|
25
|
-
var hooks = {
|
|
26
|
-
onFormComplete: DEFAULT_HOOKS.onFormComplete,
|
|
27
|
-
onFormLoad: DEFAULT_HOOKS.onFormLoad,
|
|
28
|
-
onGetComponent: DEFAULT_HOOKS.onGetComponent,
|
|
29
|
-
onPageChange: DEFAULT_HOOKS.onPageChange,
|
|
30
|
-
onRequest: DEFAULT_HOOKS.onRequest,
|
|
31
|
-
onSubmit: DEFAULT_HOOKS.onSubmit
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
var addHook = function addHook(name, hook) {
|
|
35
|
-
if (ALLOWED_HOOKS.includes(name)) {
|
|
36
|
-
hooks[name] = hook || DEFAULT_HOOKS[name]; // Don't allow it to be undefined.
|
|
37
|
-
}
|
|
38
|
-
};
|
|
39
|
-
|
|
40
|
-
exports.addHook = addHook;
|
|
6
|
+
exports.default = void 0;
|
|
41
7
|
|
|
42
|
-
var
|
|
43
|
-
if (ALLOWED_HOOKS.includes(name)) {
|
|
44
|
-
hooks[name] = DEFAULT_HOOKS[name];
|
|
45
|
-
}
|
|
46
|
-
};
|
|
47
|
-
|
|
48
|
-
exports.removeHook = removeHook;
|
|
49
|
-
|
|
50
|
-
var resetHooks = function resetHooks() {
|
|
51
|
-
Object.keys(hooks).forEach(removeHook);
|
|
52
|
-
};
|
|
8
|
+
var _react = require("react");
|
|
53
9
|
|
|
54
|
-
|
|
10
|
+
var _HooksContext = require("../context/HooksContext");
|
|
55
11
|
|
|
12
|
+
// Global imports
|
|
13
|
+
// Local imports
|
|
56
14
|
var useHooks = function useHooks() {
|
|
57
|
-
return
|
|
58
|
-
hooks: hooks,
|
|
59
|
-
addHook: addHook,
|
|
60
|
-
removeHook: removeHook,
|
|
61
|
-
resetHooks: resetHooks
|
|
62
|
-
};
|
|
15
|
+
return (0, _react.useContext)(_HooksContext.HooksContext);
|
|
63
16
|
};
|
|
64
17
|
|
|
65
18
|
var _default = useHooks;
|
package/dist/index.js
CHANGED
|
@@ -39,14 +39,12 @@ Object.defineProperty(exports, "ValidationContextProvider", {
|
|
|
39
39
|
return _context.ValidationContextProvider;
|
|
40
40
|
}
|
|
41
41
|
});
|
|
42
|
-
exports.
|
|
42
|
+
exports.default = void 0;
|
|
43
43
|
|
|
44
44
|
var _components = require("./components");
|
|
45
45
|
|
|
46
46
|
var _context = require("./context");
|
|
47
47
|
|
|
48
|
-
var _useHooks = require("./hooks/useHooks");
|
|
49
|
-
|
|
50
48
|
var _models = require("./models");
|
|
51
49
|
|
|
52
50
|
var _utils = _interopRequireDefault(require("./utils"));
|
|
@@ -54,11 +52,5 @@ var _utils = _interopRequireDefault(require("./utils"));
|
|
|
54
52
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
55
53
|
|
|
56
54
|
// Local imports
|
|
57
|
-
var intercepts = {
|
|
58
|
-
add: _useHooks.addHook,
|
|
59
|
-
remove: _useHooks.removeHook,
|
|
60
|
-
reset: _useHooks.resetHooks
|
|
61
|
-
};
|
|
62
|
-
exports.intercepts = intercepts;
|
|
63
55
|
var _default = _components.FormRenderer;
|
|
64
56
|
exports.default = _default;
|
package/dist/setupTests.js
CHANGED
|
@@ -3,26 +3,53 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.renderWithValidation = exports.renderDomWithValidation = exports.expectObjectLike = void 0;
|
|
6
|
+
exports.renderWithValidation = exports.renderHookWithProvider = exports.renderDomWithValidation = exports.expectObjectLike = void 0;
|
|
7
7
|
|
|
8
8
|
var _react = require("@testing-library/react");
|
|
9
9
|
|
|
10
|
+
var _reactHooks = require("@testing-library/react-hooks");
|
|
11
|
+
|
|
10
12
|
var _reactDom = require("react-dom");
|
|
11
13
|
|
|
12
14
|
var _context = require("./context");
|
|
13
15
|
|
|
14
16
|
var renderWithValidation = function renderWithValidation(ui, options) {
|
|
15
|
-
return (0, _react.render)( /*#__PURE__*/React.createElement(_context.
|
|
17
|
+
return (0, _react.render)( /*#__PURE__*/React.createElement(_context.HooksContextProvider, {
|
|
18
|
+
overrides: options === null || options === void 0 ? void 0 : options.hooks
|
|
19
|
+
}, /*#__PURE__*/React.createElement(_context.ValidationContextProvider, {
|
|
20
|
+
key: "vcp"
|
|
21
|
+
}, ui)), options);
|
|
16
22
|
};
|
|
17
23
|
|
|
18
24
|
exports.renderWithValidation = renderWithValidation;
|
|
19
25
|
|
|
20
|
-
var renderDomWithValidation = function renderDomWithValidation(ui, container,
|
|
21
|
-
return (0, _reactDom.render)( /*#__PURE__*/React.createElement(_context.
|
|
26
|
+
var renderDomWithValidation = function renderDomWithValidation(ui, container, options) {
|
|
27
|
+
return (0, _reactDom.render)( /*#__PURE__*/React.createElement(_context.HooksContextProvider, {
|
|
28
|
+
overrides: options === null || options === void 0 ? void 0 : options.hooks
|
|
29
|
+
}, /*#__PURE__*/React.createElement(_context.ValidationContextProvider, {
|
|
30
|
+
key: "vcp"
|
|
31
|
+
}, ui)), container);
|
|
22
32
|
};
|
|
23
33
|
|
|
24
34
|
exports.renderDomWithValidation = renderDomWithValidation;
|
|
25
35
|
|
|
36
|
+
var renderHookWithProvider = function renderHookWithProvider(hook, options) {
|
|
37
|
+
var wrapper = function wrapper(_ref) {
|
|
38
|
+
var children = _ref.children;
|
|
39
|
+
return /*#__PURE__*/React.createElement(_context.HooksContextProvider, {
|
|
40
|
+
overrides: options === null || options === void 0 ? void 0 : options.hooks
|
|
41
|
+
}, children);
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
return (0, _reactHooks.renderHook)(function () {
|
|
45
|
+
return hook();
|
|
46
|
+
}, {
|
|
47
|
+
wrapper: wrapper
|
|
48
|
+
});
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
exports.renderHookWithProvider = renderHookWithProvider;
|
|
52
|
+
|
|
26
53
|
var expectObjectLike = function expectObjectLike(received, expected) {
|
|
27
54
|
Object.keys(expected).forEach(function (key) {
|
|
28
55
|
expect(received[key]).toEqual(expected[key]);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _setupTests = require("../../setupTests");
|
|
4
4
|
|
|
5
5
|
var _getCYARowForGroup = _interopRequireDefault(require("./getCYARowForGroup"));
|
|
6
6
|
|
|
@@ -8,8 +8,7 @@ var _getCYARow = _interopRequireDefault(require("./getCYARow"));
|
|
|
8
8
|
|
|
9
9
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
10
10
|
|
|
11
|
-
//
|
|
12
|
-
//local imports
|
|
11
|
+
// Local imports
|
|
13
12
|
describe('utils', function () {
|
|
14
13
|
describe('CheckYourAnswers', function () {
|
|
15
14
|
describe('getCYARowsForGroup', function () {
|
|
@@ -63,8 +62,8 @@ describe('utils', function () {
|
|
|
63
62
|
return (0, _getCYARow.default)(PAGE, component, ON_ACTION);
|
|
64
63
|
});
|
|
65
64
|
|
|
66
|
-
var
|
|
67
|
-
container =
|
|
65
|
+
var _renderWithValidation = (0, _setupTests.renderWithValidation)((0, _getCYARowForGroup.default)(PAGE, PAGE.groups[0], rows, ON_ACTION).row.value),
|
|
66
|
+
container = _renderWithValidation.container;
|
|
68
67
|
|
|
69
68
|
expect(container.childNodes.length).toEqual(4);
|
|
70
69
|
var addressValues = container.childNodes;
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _react = require("@testing-library/react");
|
|
4
|
-
|
|
5
3
|
var _setupTests = require("../../setupTests");
|
|
6
4
|
|
|
7
5
|
var _models = require("../../models");
|
|
@@ -222,10 +220,10 @@ describe('utils', function () {
|
|
|
222
220
|
|
|
223
221
|
var ON_ACTION = function ON_ACTION() {};
|
|
224
222
|
|
|
225
|
-
var
|
|
223
|
+
var _renderWithValidation = (0, _setupTests.renderWithValidation)((0, _getCYARowsForPage.default)(PAGE, ON_ACTION).map(function (row) {
|
|
226
224
|
return row.value;
|
|
227
225
|
})),
|
|
228
|
-
container =
|
|
226
|
+
container = _renderWithValidation.container;
|
|
229
227
|
|
|
230
228
|
expect(container.childNodes.length).toEqual(4);
|
|
231
229
|
var addressValues = container.childNodes;
|
|
@@ -5,6 +5,33 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
|
|
8
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
9
|
+
|
|
10
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
11
|
+
|
|
12
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
13
|
+
|
|
14
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
15
|
+
|
|
16
|
+
function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
|
|
17
|
+
|
|
18
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
19
|
+
|
|
20
|
+
var getItemInArray = function getItemInArray(arr, index) {
|
|
21
|
+
if (Array.isArray(arr)) {
|
|
22
|
+
return arr[parseInt(index, 10)];
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
return undefined;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
var isArrayProp = function isArrayProp(prop) {
|
|
29
|
+
return prop.includes('[');
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
var getPropertyAndIndex = function getPropertyAndIndex(prop) {
|
|
33
|
+
return prop.replace(']', '').split('[');
|
|
34
|
+
};
|
|
8
35
|
/**
|
|
9
36
|
* Gets the value of a field within the top-level JSON form data,
|
|
10
37
|
* based on a dot-separated field identifier.
|
|
@@ -20,12 +47,23 @@ exports.default = void 0;
|
|
|
20
47
|
* @param {string} fieldId The dot-separated path to the field.
|
|
21
48
|
* @returns The value of the field specified.
|
|
22
49
|
*/
|
|
50
|
+
|
|
51
|
+
|
|
23
52
|
var getSourceData = function getSourceData(data, fieldId) {
|
|
24
53
|
if (!fieldId) {
|
|
25
54
|
return undefined;
|
|
26
55
|
}
|
|
27
56
|
|
|
28
57
|
return fieldId.split('.').reduce(function (obj, prop) {
|
|
58
|
+
if (obj && isArrayProp(prop)) {
|
|
59
|
+
var _getPropertyAndIndex = getPropertyAndIndex(prop),
|
|
60
|
+
_getPropertyAndIndex2 = _slicedToArray(_getPropertyAndIndex, 2),
|
|
61
|
+
actualProp = _getPropertyAndIndex2[0],
|
|
62
|
+
index = _getPropertyAndIndex2[1];
|
|
63
|
+
|
|
64
|
+
return getItemInArray(obj[actualProp], index);
|
|
65
|
+
}
|
|
66
|
+
|
|
29
67
|
return obj ? obj[prop] : undefined;
|
|
30
68
|
}, data);
|
|
31
69
|
};
|
|
@@ -120,6 +120,22 @@ describe('utils', function () {
|
|
|
120
120
|
var value = (0, _getSourceData.default)(DATA, FIELD_ID);
|
|
121
121
|
expect(value).toBeUndefined();
|
|
122
122
|
});
|
|
123
|
+
it('should handle a reference to an array item', function () {
|
|
124
|
+
var FIELD_ID = 'items[1]';
|
|
125
|
+
var ALPHA = 'alpha';
|
|
126
|
+
var BETA = 'beta';
|
|
127
|
+
var DATA = {
|
|
128
|
+
items: [ALPHA, BETA]
|
|
129
|
+
};
|
|
130
|
+
var value = (0, _getSourceData.default)(DATA, FIELD_ID);
|
|
131
|
+
expect(value).toEqual(BETA);
|
|
132
|
+
});
|
|
133
|
+
it('should handle a reference to an array that does not exist', function () {
|
|
134
|
+
var FIELD_ID = 'items[1]';
|
|
135
|
+
var DATA = {};
|
|
136
|
+
var value = (0, _getSourceData.default)(DATA, FIELD_ID);
|
|
137
|
+
expect(value).toBeUndefined();
|
|
138
|
+
});
|
|
123
139
|
});
|
|
124
140
|
});
|
|
125
141
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ukhomeoffice/cop-react-form-renderer",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"scripts": {
|
|
6
6
|
"clean": "rimraf dist",
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"lint": "eslint --ext .js,.jsx src",
|
|
10
10
|
"storybook:start": "start-storybook --docs -s src/assets --no-manager-cache -p 6007",
|
|
11
11
|
"storybook:build": "build-storybook --docs -s src/assets",
|
|
12
|
-
"storybook:deploy": "yarn deploy-storybook",
|
|
12
|
+
"storybook:deploy": "yarn storybook:build && yarn deploy-storybook",
|
|
13
13
|
"storybook": "yarn storybook:start",
|
|
14
14
|
"deploy-storybook": "storybook-to-ghpages -e storybook-static",
|
|
15
15
|
"compile": "yarn clean && cross-env NODE_ENV=production babel src --out-dir dist --copy-files && yarn post-compile",
|