@ukhomeoffice/cop-react-form-renderer 1.0.0 → 2.2.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/LICENSE +21 -0
- package/README.md +12 -0
- package/dist/components/CheckYourAnswers/CheckYourAnswers.js +16 -5
- package/dist/components/CheckYourAnswers/CheckYourAnswers.stories.mdx +199 -79
- package/dist/components/CheckYourAnswers/CheckYourAnswers.test.js +44 -0
- package/dist/components/FormComponent/FormComponent.js +6 -1
- package/dist/components/FormComponent/FormComponent.test.js +67 -0
- package/dist/components/FormPage/FormPage.js +8 -2
- package/dist/components/FormPage/FormPage.test.js +2 -2
- package/dist/components/FormRenderer/FormRenderer.js +43 -15
- package/dist/components/FormRenderer/FormRenderer.stories.mdx +115 -49
- package/dist/components/FormRenderer/FormRenderer.test.js +40 -0
- package/dist/components/FormRenderer/handlers/getPageId.js +1 -10
- package/dist/components/FormRenderer/handlers/getPageId.test.js +5 -31
- package/dist/components/FormRenderer/handlers/handlers.test.js +2 -2
- package/dist/components/FormRenderer/helpers/getNextPageId.js +33 -26
- package/dist/components/FormRenderer/helpers/getNextPageId.test.js +89 -7
- package/dist/components/FormRenderer/helpers/getSubmissionStatus.js +27 -0
- package/dist/components/FormRenderer/helpers/getSubmissionStatus.test.js +209 -0
- package/dist/components/FormRenderer/helpers/index.js +4 -1
- package/dist/components/PageActions/PageActions.stories.mdx +1 -1
- package/dist/components/PageActions/PageActions.test.js +2 -2
- package/dist/components/SummaryList/RowAction.js +1 -1
- package/dist/components/SummaryList/RowAction.test.js +6 -6
- package/dist/components/SummaryList/SummaryList.js +8 -5
- package/dist/components/SummaryList/SummaryList.scss +10 -2
- package/dist/components/SummaryList/SummaryList.stories.mdx +64 -10
- package/dist/components/SummaryList/SummaryList.test.js +54 -0
- package/dist/components/SummaryList/helpers/getRowActionAttributes.js +2 -2
- package/dist/components/SummaryList/helpers/getRowActionAttributes.test.js +4 -4
- package/dist/hooks/useHooks.js +5 -1
- package/dist/index.js +8 -0
- package/dist/json/areYouACivilServant.json +7 -0
- package/dist/json/firstForm.json +94 -0
- package/dist/json/grade.json +108 -0
- package/dist/json/saveAndContinue.json +98 -0
- package/dist/json/team.json +17351 -0
- package/dist/json/userProfile.data.json +14 -0
- package/dist/json/userProfile.json +276 -0
- package/dist/models/ComponentTypes.js +4 -0
- package/dist/utils/CheckYourAnswers/getCYAAction.js +24 -3
- package/dist/utils/CheckYourAnswers/getCYAAction.test.js +62 -15
- package/dist/utils/CheckYourAnswers/getCYARow.js +8 -2
- package/dist/utils/CheckYourAnswers/getCYARowsForPage.js +11 -5
- package/dist/utils/Component/getComponent.js +42 -0
- package/dist/utils/Component/getComponentTests/getComponent.autocomplete.test.js +75 -0
- package/dist/utils/Component/getComponentTests/getComponent.checkboxes.test.js +129 -0
- package/dist/utils/Component/getComponentTests/getComponent.date.test.js +129 -0
- package/dist/utils/Component/getComponentTests/getComponent.email.test.js +80 -0
- package/dist/utils/Component/getComponentTests/getComponent.heading.test.js +33 -0
- package/dist/utils/Component/getComponentTests/getComponent.html.test.js +45 -0
- package/dist/utils/Component/getComponentTests/getComponent.insetText.test.js +31 -0
- package/dist/utils/Component/getComponentTests/getComponent.phoneNumber.test.js +80 -0
- package/dist/utils/Component/getComponentTests/getComponent.radios.test.js +125 -0
- package/dist/utils/Component/getComponentTests/getComponent.text.test.js +80 -0
- package/dist/utils/Component/getComponentTests/getComponent.textarea.test.js +76 -0
- package/dist/utils/Component/getComponentTests/getComponent.unknown.test.js +14 -0
- package/dist/utils/Component/isEditable.js +1 -1
- package/dist/utils/Data/refDataToOptions.js +4 -0
- package/dist/utils/Data/refDataToOptions.test.js +30 -0
- package/dist/utils/FormPage/getEditableComponents.js +28 -0
- package/dist/utils/FormPage/getEditableComponents.test.js +75 -0
- package/dist/utils/FormPage/getFormPage.js +5 -1
- package/dist/utils/FormPage/getPageActions.js +66 -0
- package/dist/utils/FormPage/getPageActions.test.js +89 -0
- package/dist/utils/FormPage/index.js +7 -1
- package/dist/utils/FormPage/showFormPage.js +81 -0
- package/dist/utils/FormPage/showFormPage.test.js +131 -0
- package/dist/utils/Validate/validateComponent.js +5 -3
- package/dist/utils/Validate/validateRequired.js +11 -0
- package/dist/utils/Validate/validateRequired.test.js +12 -0
- package/package.json +9 -5
- package/dist/utils/Component/getComponent.test.js +0 -361
|
@@ -69,7 +69,10 @@ var FormRenderer = function FormRenderer(_ref) {
|
|
|
69
69
|
_hooks = _ref.hooks,
|
|
70
70
|
classBlock = _ref.classBlock,
|
|
71
71
|
classModifiers = _ref.classModifiers,
|
|
72
|
-
className = _ref.className
|
|
72
|
+
className = _ref.className,
|
|
73
|
+
hide_title = _ref.hide_title,
|
|
74
|
+
summaryListClassModifiers = _ref.summaryListClassModifiers,
|
|
75
|
+
noChangeAction = _ref.noChangeAction;
|
|
73
76
|
|
|
74
77
|
// Set up the initial states.
|
|
75
78
|
var _useState = (0, _react.useState)({}),
|
|
@@ -111,12 +114,26 @@ var FormRenderer = function FormRenderer(_ref) {
|
|
|
111
114
|
}, [_hooks, addHook]); // Setup data.
|
|
112
115
|
|
|
113
116
|
(0, _react.useEffect)(function () {
|
|
114
|
-
|
|
117
|
+
if (components && _pages && _data) {
|
|
118
|
+
var _data$formStatus;
|
|
119
|
+
|
|
120
|
+
setData(_utils.default.Data.setupForm(_pages, components, _data));
|
|
121
|
+
|
|
122
|
+
if ((_data$formStatus = _data.formStatus) !== null && _data$formStatus !== void 0 && _data$formStatus.page) {
|
|
123
|
+
setPageId(_data.formStatus.page);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
115
126
|
}, [components, _pages, _data, setData]); // Setup pages.
|
|
116
127
|
|
|
117
128
|
(0, _react.useEffect)(function () {
|
|
118
129
|
setPages(_utils.default.FormPage.getAll(_pages, components, _objectSpread({}, data)));
|
|
119
|
-
}, [components, _pages, data, setPages]); // Setup
|
|
130
|
+
}, [components, _pages, data, setPages]); // Setup initial pageId.
|
|
131
|
+
|
|
132
|
+
(0, _react.useEffect)(function () {
|
|
133
|
+
setPageId(function (prev) {
|
|
134
|
+
return prev || _helpers.default.getNextPageId(type, pages);
|
|
135
|
+
});
|
|
136
|
+
}, [type, pages, setPageId]); // Setup hub.
|
|
120
137
|
|
|
121
138
|
(0, _react.useEffect)(function () {
|
|
122
139
|
setHub(_utils.default.Hub.get(type, _hub, components, _objectSpread({}, data)));
|
|
@@ -143,12 +160,14 @@ var FormRenderer = function FormRenderer(_ref) {
|
|
|
143
160
|
if (action.type === _models.PageAction.TYPES.NAVIGATE) {
|
|
144
161
|
_handlers.default.navigate(action, pageId, onPageChange);
|
|
145
162
|
} else {
|
|
146
|
-
//
|
|
163
|
+
// Save draft or submit.
|
|
147
164
|
var submissionData = _utils.default.Format.form({
|
|
148
165
|
pages: pages,
|
|
149
166
|
components: components
|
|
150
167
|
}, _objectSpread(_objectSpread({}, data), patch), _models.EventTypes.SUBMIT);
|
|
151
168
|
|
|
169
|
+
submissionData.formStatus = _helpers.default.getSubmissionStatus(type, pages, pageId, action, submissionData);
|
|
170
|
+
|
|
152
171
|
if (patch) {
|
|
153
172
|
setData(submissionData);
|
|
154
173
|
} // Now submit the data to the backend...
|
|
@@ -157,12 +176,11 @@ var FormRenderer = function FormRenderer(_ref) {
|
|
|
157
176
|
hooks.onSubmit(action.type, submissionData, function (response) {
|
|
158
177
|
// The backend response may well contain data we need so apply it.
|
|
159
178
|
setData(function (prev) {
|
|
160
|
-
|
|
161
|
-
});
|
|
179
|
+
var next = _objectSpread(_objectSpread({}, prev), response);
|
|
162
180
|
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
181
|
+
onPageChange(_helpers.default.getNextPageId(type, pages, pageId, action, next));
|
|
182
|
+
return next;
|
|
183
|
+
});
|
|
166
184
|
}, function (errors) {
|
|
167
185
|
_handlers.default.submissionError(errors, onError);
|
|
168
186
|
});
|
|
@@ -187,12 +205,13 @@ var FormRenderer = function FormRenderer(_ref) {
|
|
|
187
205
|
components: components
|
|
188
206
|
}, _objectSpread({}, data), _models.EventTypes.SUBMIT);
|
|
189
207
|
|
|
208
|
+
submissionData.formStatus = _helpers.default.getSubmissionStatus(type, pages, pageId, action);
|
|
190
209
|
setData(submissionData); // Now submit the data to the backend...
|
|
191
210
|
|
|
192
211
|
hooks.onSubmit(action.type, submissionData, function () {
|
|
193
|
-
hooks.onFormComplete();
|
|
212
|
+
return hooks.onFormComplete();
|
|
194
213
|
}, function (errors) {
|
|
195
|
-
_handlers.default.submissionError(errors, onError);
|
|
214
|
+
return _handlers.default.submissionError(errors, onError);
|
|
196
215
|
});
|
|
197
216
|
}
|
|
198
217
|
}
|
|
@@ -202,11 +221,14 @@ var FormRenderer = function FormRenderer(_ref) {
|
|
|
202
221
|
|
|
203
222
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
204
223
|
className: classes()
|
|
205
|
-
}, title && pageId === _models.FormPages.HUB && /*#__PURE__*/_react.default.createElement(_copReactComponents.LargeHeading, null, title), formState.cya && /*#__PURE__*/_react.default.createElement(_CheckYourAnswers.default, _extends({
|
|
224
|
+
}, title && !hide_title && pageId === _models.FormPages.HUB && /*#__PURE__*/_react.default.createElement(_copReactComponents.LargeHeading, null, title), formState.cya && /*#__PURE__*/_react.default.createElement(_CheckYourAnswers.default, _extends({
|
|
206
225
|
pages: pages
|
|
207
226
|
}, cya, formState.cya, {
|
|
208
227
|
onAction: onCYAAction,
|
|
209
|
-
onRowAction: onCYARowAction
|
|
228
|
+
onRowAction: onCYARowAction,
|
|
229
|
+
summaryListClassModifiers: summaryListClassModifiers,
|
|
230
|
+
hide_title: hide_title,
|
|
231
|
+
noChangeAction: noChangeAction
|
|
210
232
|
})), formState.page && /*#__PURE__*/_react.default.createElement(_FormPage.default, {
|
|
211
233
|
page: formState.page,
|
|
212
234
|
onAction: onPageAction
|
|
@@ -231,14 +253,20 @@ FormRenderer.propTypes = {
|
|
|
231
253
|
}),
|
|
232
254
|
classBlock: _propTypes.default.string,
|
|
233
255
|
classModifiers: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.arrayOf(_propTypes.default.string)]),
|
|
234
|
-
className: _propTypes.default.string
|
|
256
|
+
className: _propTypes.default.string,
|
|
257
|
+
hide_title: _propTypes.default.bool,
|
|
258
|
+
summaryListClassModifiers: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.arrayOf(_propTypes.default.string)]),
|
|
259
|
+
noChangeAction: _propTypes.default.bool
|
|
235
260
|
};
|
|
236
261
|
FormRenderer.defaultProps = {
|
|
237
262
|
type: _models.FormTypes.HUB,
|
|
238
263
|
components: [],
|
|
239
264
|
pages: [],
|
|
240
265
|
classBlock: DEFAULT_CLASS,
|
|
241
|
-
classModifiers: []
|
|
266
|
+
classModifiers: [],
|
|
267
|
+
hide_title: false,
|
|
268
|
+
summaryListClassModifiers: [],
|
|
269
|
+
noChangeAction: false
|
|
242
270
|
};
|
|
243
271
|
var _default = FormRenderer;
|
|
244
272
|
exports.default = _default;
|
|
@@ -1,14 +1,23 @@
|
|
|
1
1
|
<!-- Global imports -->
|
|
2
|
+
|
|
2
3
|
import { ArgsTable, Canvas, Meta, Story } from '@storybook/addon-docs';
|
|
3
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
Button,
|
|
6
|
+
Details,
|
|
7
|
+
Heading,
|
|
8
|
+
Link,
|
|
9
|
+
Panel,
|
|
10
|
+
} from '@ukhomeoffice/cop-react-components';
|
|
4
11
|
import { useState } from 'react';
|
|
5
12
|
import withMock from 'storybook-addon-mock';
|
|
6
13
|
|
|
7
14
|
<!-- Local imports -->
|
|
15
|
+
|
|
8
16
|
import { addHook } from '../../hooks/useHooks';
|
|
9
17
|
import FormRenderer from './FormRenderer';
|
|
10
18
|
|
|
11
19
|
<!-- JSON documents -->
|
|
20
|
+
|
|
12
21
|
import CIVIL_SERVANT from '../../json/areYouACivilServant.json';
|
|
13
22
|
import FIRST_FORM from '../../json/firstForm.json';
|
|
14
23
|
import GRADE from '../../json/grade.json';
|
|
@@ -16,52 +25,60 @@ import TEAMS from '../../json/team.json';
|
|
|
16
25
|
import USER_PROFILE_DATA from '../../json/userProfile.data.json';
|
|
17
26
|
import USER_PROFILE from '../../json/userProfile.json';
|
|
18
27
|
|
|
19
|
-
<Meta
|
|
28
|
+
<Meta
|
|
29
|
+
title='Components/Form renderer'
|
|
30
|
+
id='D-FormRenderer'
|
|
31
|
+
component={FormRenderer}
|
|
32
|
+
decorators={[withMock]}
|
|
33
|
+
/>
|
|
20
34
|
|
|
21
|
-
<Heading size=
|
|
35
|
+
<Heading size='xl' caption='Components'>
|
|
36
|
+
Form renderer
|
|
37
|
+
</Heading>
|
|
22
38
|
|
|
23
39
|
Renders a form with <Link href="https://ukhomeoffice.github.io/cop-react-components/?path=/docs/d-alert--default-story">COP React components</Link>,
|
|
24
40
|
on the basis of a <Link href="/?path=/docs/f-json-form">JSON</Link> that describes which elements are required.
|
|
25
41
|
|
|
26
42
|
<Canvas withToolbar>
|
|
27
|
-
<Story
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
43
|
+
<Story
|
|
44
|
+
name='Default'
|
|
45
|
+
parameters={{
|
|
46
|
+
mockData: [
|
|
47
|
+
{
|
|
48
|
+
url: `${USER_PROFILE_DATA.urls.refData}/areYouACivilServant`,
|
|
49
|
+
method: 'GET',
|
|
50
|
+
status: 200,
|
|
51
|
+
response: CIVIL_SERVANT,
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
url: `${USER_PROFILE_DATA.urls.refData}/grade`,
|
|
55
|
+
method: 'GET',
|
|
56
|
+
status: 200,
|
|
57
|
+
response: GRADE,
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
url: `${USER_PROFILE_DATA.urls.refData}/team`,
|
|
61
|
+
method: 'GET',
|
|
62
|
+
status: 200,
|
|
63
|
+
response: TEAMS,
|
|
64
|
+
},
|
|
65
|
+
],
|
|
66
|
+
}}
|
|
67
|
+
>
|
|
49
68
|
{() => {
|
|
50
|
-
return
|
|
51
|
-
<FormRenderer {...USER_PROFILE} data={USER_PROFILE_DATA} />
|
|
52
|
-
);
|
|
69
|
+
return <FormRenderer {...USER_PROFILE} data={USER_PROFILE_DATA} />;
|
|
53
70
|
}}
|
|
54
71
|
</Story>
|
|
55
72
|
</Canvas>
|
|
56
73
|
|
|
57
|
-
<Details summary=
|
|
58
|
-
<ArgsTable of={
|
|
74
|
+
<Details summary='Properties' className='no-indent'>
|
|
75
|
+
<ArgsTable of={FormRenderer} />
|
|
59
76
|
</Details>
|
|
60
77
|
|
|
61
78
|
## CYA type
|
|
62
79
|
|
|
63
80
|
<Canvas>
|
|
64
|
-
<Story name=
|
|
81
|
+
<Story name='CYA'>
|
|
65
82
|
{() => {
|
|
66
83
|
const [complete, setComplete] = useState(false);
|
|
67
84
|
const [returnLater, setReturnLater] = useState(false);
|
|
@@ -82,7 +99,12 @@ on the basis of a <Link href="/?path=/docs/f-json-form">JSON</Link> that describ
|
|
|
82
99
|
setReturnLater(!!pageId === false);
|
|
83
100
|
});
|
|
84
101
|
addHook('onSubmit', (type, payload, onSuccess, onError) => {
|
|
85
|
-
console.log(
|
|
102
|
+
console.log(
|
|
103
|
+
'onSubmit called of type',
|
|
104
|
+
type,
|
|
105
|
+
'called, with the payload',
|
|
106
|
+
payload
|
|
107
|
+
);
|
|
86
108
|
onSuccess();
|
|
87
109
|
});
|
|
88
110
|
const reset = () => {
|
|
@@ -91,25 +113,69 @@ on the basis of a <Link href="/?path=/docs/f-json-form">JSON</Link> that describ
|
|
|
91
113
|
};
|
|
92
114
|
return (
|
|
93
115
|
<>
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
116
|
+
{!complete && !returnLater && (
|
|
117
|
+
<FormRenderer {...FIRST_FORM} data={{}} />
|
|
118
|
+
)}
|
|
119
|
+
{complete && (
|
|
120
|
+
<div>
|
|
121
|
+
<Panel title='Submission successful'>
|
|
122
|
+
Your submission was successful.
|
|
123
|
+
</Panel>
|
|
124
|
+
<Button onClick={() => reset()}>Start again</Button>
|
|
125
|
+
</div>
|
|
126
|
+
)}
|
|
127
|
+
{!complete && returnLater && (
|
|
128
|
+
<div>
|
|
129
|
+
<Panel title='Saved to return later'>
|
|
130
|
+
You clicked on "Save and return later".
|
|
131
|
+
</Panel>
|
|
132
|
+
<Button onClick={() => reset()}>Start again</Button>
|
|
133
|
+
</div>
|
|
134
|
+
)}
|
|
111
135
|
</>
|
|
112
136
|
);
|
|
113
137
|
}}
|
|
114
138
|
</Story>
|
|
115
139
|
</Canvas>
|
|
140
|
+
|
|
141
|
+
## Read-only style
|
|
142
|
+
|
|
143
|
+
<Canvas>
|
|
144
|
+
<Story
|
|
145
|
+
name='Read-only style'
|
|
146
|
+
parameters={{
|
|
147
|
+
mockData: [
|
|
148
|
+
{
|
|
149
|
+
url: `${USER_PROFILE_DATA.urls.refData}/areYouACivilServant`,
|
|
150
|
+
method: 'GET',
|
|
151
|
+
status: 200,
|
|
152
|
+
response: CIVIL_SERVANT,
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
url: `${USER_PROFILE_DATA.urls.refData}/grade`,
|
|
156
|
+
method: 'GET',
|
|
157
|
+
status: 200,
|
|
158
|
+
response: GRADE,
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
url: `${USER_PROFILE_DATA.urls.refData}/team`,
|
|
162
|
+
method: 'GET',
|
|
163
|
+
status: 200,
|
|
164
|
+
response: TEAMS,
|
|
165
|
+
},
|
|
166
|
+
],
|
|
167
|
+
}}
|
|
168
|
+
>
|
|
169
|
+
{() => {
|
|
170
|
+
return (
|
|
171
|
+
<FormRenderer
|
|
172
|
+
{...USER_PROFILE}
|
|
173
|
+
data={USER_PROFILE_DATA}
|
|
174
|
+
summaryListClassModifiers='no-border'
|
|
175
|
+
hide_title={true}
|
|
176
|
+
noChangeAction={true}
|
|
177
|
+
/>
|
|
178
|
+
);
|
|
179
|
+
}}
|
|
180
|
+
</Story>
|
|
181
|
+
</Canvas>
|
|
@@ -467,5 +467,45 @@ describe('components', function () {
|
|
|
467
467
|
}
|
|
468
468
|
}, _callee12);
|
|
469
469
|
})));
|
|
470
|
+
it('should show no title when hide_title is set to true', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee14() {
|
|
471
|
+
var form, hub;
|
|
472
|
+
return regeneratorRuntime.wrap(function _callee14$(_context14) {
|
|
473
|
+
while (1) {
|
|
474
|
+
switch (_context14.prev = _context14.next) {
|
|
475
|
+
case 0:
|
|
476
|
+
_context14.next = 2;
|
|
477
|
+
return (0, _testUtils.act)( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee13() {
|
|
478
|
+
return regeneratorRuntime.wrap(function _callee13$(_context13) {
|
|
479
|
+
while (1) {
|
|
480
|
+
switch (_context13.prev = _context13.next) {
|
|
481
|
+
case 0:
|
|
482
|
+
(0, _reactDom.render)( /*#__PURE__*/_react2.default.createElement(_FormRenderer.default, _extends({}, _userProfile.default, {
|
|
483
|
+
data: _userProfileData.default,
|
|
484
|
+
hide_title: true
|
|
485
|
+
})), container);
|
|
486
|
+
|
|
487
|
+
case 1:
|
|
488
|
+
case "end":
|
|
489
|
+
return _context13.stop();
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
}, _callee13);
|
|
493
|
+
})));
|
|
494
|
+
|
|
495
|
+
case 2:
|
|
496
|
+
form = checkForm(container);
|
|
497
|
+
expect(form.childNodes.length).toEqual(1); //Hub page (= CYA)
|
|
498
|
+
|
|
499
|
+
hub = form.childNodes[0];
|
|
500
|
+
expect(hub.tagName).toEqual('DIV');
|
|
501
|
+
expect(hub.classList).toContain(_CheckYourAnswers.DEFAULT_CLASS);
|
|
502
|
+
|
|
503
|
+
case 7:
|
|
504
|
+
case "end":
|
|
505
|
+
return _context14.stop();
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
}, _callee14);
|
|
509
|
+
})));
|
|
470
510
|
});
|
|
471
511
|
});
|
|
@@ -12,16 +12,7 @@ exports.default = void 0;
|
|
|
12
12
|
* @returns A page id.
|
|
13
13
|
*/
|
|
14
14
|
var getPageId = function getPageId(action, pageId) {
|
|
15
|
-
|
|
16
|
-
// TODO: Improve how this is handled.
|
|
17
|
-
if (action.href) {
|
|
18
|
-
return action.href.split('/').pop();
|
|
19
|
-
} else if (action.url) {
|
|
20
|
-
return action.url.split('/').pop();
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
return pageId;
|
|
15
|
+
return (action === null || action === void 0 ? void 0 : action.page) || pageId;
|
|
25
16
|
};
|
|
26
17
|
|
|
27
18
|
var _default = getPageId;
|
|
@@ -14,46 +14,20 @@ describe('components', function () {
|
|
|
14
14
|
var ACTION = null;
|
|
15
15
|
expect((0, _getPageId.default)(ACTION, PAGE_ID)).toEqual(PAGE_ID);
|
|
16
16
|
});
|
|
17
|
-
it('should return the pageId when the action contains no
|
|
17
|
+
it('should return the pageId when the action contains no page', function () {
|
|
18
18
|
var PAGE_ID = 'alpha';
|
|
19
19
|
var ACTION = {
|
|
20
20
|
id: 'bravo'
|
|
21
21
|
};
|
|
22
22
|
expect((0, _getPageId.default)(ACTION, PAGE_ID)).toEqual(PAGE_ID);
|
|
23
23
|
});
|
|
24
|
-
it('should return the
|
|
25
|
-
var
|
|
26
|
-
var HREF = "/bravo/charlie/".concat(LAST_PART);
|
|
24
|
+
it('should return the page when provided', function () {
|
|
25
|
+
var NAVIGATE_TO = 'delta';
|
|
27
26
|
var PAGE_ID = 'alpha';
|
|
28
27
|
var ACTION = {
|
|
29
|
-
|
|
28
|
+
page: NAVIGATE_TO
|
|
30
29
|
};
|
|
31
|
-
expect((0, _getPageId.default)(ACTION, PAGE_ID)).toEqual(
|
|
32
|
-
});
|
|
33
|
-
it('should return the final part of the url when provided', function () {
|
|
34
|
-
var LAST_PART = 'delta';
|
|
35
|
-
var URL = "/bravo/charlie/".concat(LAST_PART);
|
|
36
|
-
var PAGE_ID = 'alpha';
|
|
37
|
-
var ACTION = {
|
|
38
|
-
url: URL
|
|
39
|
-
};
|
|
40
|
-
expect((0, _getPageId.default)(ACTION, PAGE_ID)).toEqual(LAST_PART);
|
|
41
|
-
});
|
|
42
|
-
it('should return the whole href when it contains no backslashes', function () {
|
|
43
|
-
var HREF = 'delta';
|
|
44
|
-
var PAGE_ID = 'alpha';
|
|
45
|
-
var ACTION = {
|
|
46
|
-
href: HREF
|
|
47
|
-
};
|
|
48
|
-
expect((0, _getPageId.default)(ACTION, PAGE_ID)).toEqual(HREF);
|
|
49
|
-
});
|
|
50
|
-
it('should return the whole url when it contains no backslashes', function () {
|
|
51
|
-
var URL = 'delta';
|
|
52
|
-
var PAGE_ID = 'alpha';
|
|
53
|
-
var ACTION = {
|
|
54
|
-
url: URL
|
|
55
|
-
};
|
|
56
|
-
expect((0, _getPageId.default)(ACTION, PAGE_ID)).toEqual(URL);
|
|
30
|
+
expect((0, _getPageId.default)(ACTION, PAGE_ID)).toEqual(NAVIGATE_TO);
|
|
57
31
|
});
|
|
58
32
|
});
|
|
59
33
|
});
|
|
@@ -46,7 +46,7 @@ describe('components', function () {
|
|
|
46
46
|
it('should not call the onNavigate method when the page is unchanged', function () {
|
|
47
47
|
var CURRENT_PAGE_ID = 'alpha';
|
|
48
48
|
var ACTION = {
|
|
49
|
-
|
|
49
|
+
page: CURRENT_PAGE_ID
|
|
50
50
|
};
|
|
51
51
|
var ON_NAVIGATE_CALLS = [];
|
|
52
52
|
|
|
@@ -62,7 +62,7 @@ describe('components', function () {
|
|
|
62
62
|
var CURRENT_PAGE_ID = 'alpha';
|
|
63
63
|
var NEW_PAGE_ID = 'bravo';
|
|
64
64
|
var ACTION = {
|
|
65
|
-
|
|
65
|
+
page: NEW_PAGE_ID
|
|
66
66
|
};
|
|
67
67
|
var ON_NAVIGATE_CALLS = [];
|
|
68
68
|
|
|
@@ -7,57 +7,64 @@ exports.default = void 0;
|
|
|
7
7
|
|
|
8
8
|
var _models = require("../../../models");
|
|
9
9
|
|
|
10
|
+
var _FormPage = _interopRequireDefault(require("../../../utils/FormPage"));
|
|
11
|
+
|
|
12
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
|
+
|
|
10
14
|
var getNextHubPageId = function getNextHubPageId(action) {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
}
|
|
15
|
+
return (action === null || action === void 0 ? void 0 : action.page) || _models.FormPages.HUB;
|
|
16
|
+
};
|
|
14
17
|
|
|
15
|
-
|
|
18
|
+
var getNextCYAPageId = function getNextCYAPageId(pages, currentPageId, formData) {
|
|
19
|
+
return getNextWizardPageId(pages, currentPageId, formData) || _models.FormPages.CYA;
|
|
16
20
|
};
|
|
17
21
|
|
|
18
|
-
var
|
|
19
|
-
|
|
20
|
-
return undefined;
|
|
21
|
-
}
|
|
22
|
+
var getNextWizardPageId = function getNextWizardPageId(pages, currentPageId, formData) {
|
|
23
|
+
var _page;
|
|
22
24
|
|
|
23
25
|
var nextIndex = pages.findIndex(function (p) {
|
|
24
26
|
return p.id === currentPageId;
|
|
25
27
|
}) + 1;
|
|
26
|
-
|
|
27
|
-
};
|
|
28
|
+
var page = pages[nextIndex];
|
|
28
29
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
30
|
+
while (page && !_FormPage.default.show(page, formData)) {
|
|
31
|
+
nextIndex++;
|
|
32
|
+
page = pages[nextIndex];
|
|
32
33
|
}
|
|
33
34
|
|
|
34
|
-
|
|
35
|
-
return p.id === currentPageId;
|
|
36
|
-
}) + 1;
|
|
37
|
-
return nextIndex < pages.length ? pages[nextIndex].id : undefined;
|
|
35
|
+
return ((_page = page) === null || _page === void 0 ? void 0 : _page.id) || undefined;
|
|
38
36
|
};
|
|
39
37
|
|
|
40
|
-
var getNextFormPageId = function getNextFormPageId(pages
|
|
41
|
-
|
|
42
|
-
return undefined;
|
|
43
|
-
}
|
|
44
|
-
|
|
38
|
+
var getNextFormPageId = function getNextFormPageId(pages) {
|
|
39
|
+
// A form has a single page... so always return that id.
|
|
45
40
|
return pages.length > 0 ? pages[0].id : undefined;
|
|
46
41
|
};
|
|
47
42
|
|
|
48
|
-
var getNextPageId = function getNextPageId(formType, pages, currentPageId, action) {
|
|
43
|
+
var getNextPageId = function getNextPageId(formType, pages, currentPageId, action, formData) {
|
|
44
|
+
if (action) {
|
|
45
|
+
if (action.type === _models.PageAction.TYPES.NAVIGATE) {
|
|
46
|
+
return pages.find(function (p) {
|
|
47
|
+
return p.id === action.page;
|
|
48
|
+
}) ? action.page : undefined;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
if (action.type === _models.PageAction.TYPES.SAVE_AND_RETURN) {
|
|
52
|
+
return formType === _models.FormTypes.HUB ? _models.FormPages.HUB : undefined;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
49
56
|
switch (formType) {
|
|
50
57
|
case _models.FormTypes.HUB:
|
|
51
58
|
return getNextHubPageId(action);
|
|
52
59
|
|
|
53
60
|
case _models.FormTypes.CYA:
|
|
54
|
-
return getNextCYAPageId(pages, currentPageId,
|
|
61
|
+
return getNextCYAPageId(pages, currentPageId, formData);
|
|
55
62
|
|
|
56
63
|
case _models.FormTypes.WIZARD:
|
|
57
|
-
return getNextWizardPageId(pages, currentPageId,
|
|
64
|
+
return getNextWizardPageId(pages, currentPageId, formData);
|
|
58
65
|
|
|
59
66
|
default:
|
|
60
|
-
return getNextFormPageId(pages
|
|
67
|
+
return getNextFormPageId(pages);
|
|
61
68
|
}
|
|
62
69
|
};
|
|
63
70
|
|