@ukhomeoffice/cop-react-form-renderer 1.0.0-gamma → 2.1.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.
Files changed (74) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +12 -0
  3. package/dist/components/CheckYourAnswers/CheckYourAnswers.js +16 -5
  4. package/dist/components/CheckYourAnswers/CheckYourAnswers.stories.mdx +199 -79
  5. package/dist/components/CheckYourAnswers/CheckYourAnswers.test.js +44 -0
  6. package/dist/components/FormPage/FormPage.js +8 -2
  7. package/dist/components/FormPage/FormPage.test.js +3 -3
  8. package/dist/components/FormRenderer/FormRenderer.js +44 -16
  9. package/dist/components/FormRenderer/FormRenderer.stories.mdx +115 -49
  10. package/dist/components/FormRenderer/FormRenderer.test.js +40 -0
  11. package/dist/components/FormRenderer/handlers/getPageId.js +1 -10
  12. package/dist/components/FormRenderer/handlers/getPageId.test.js +5 -31
  13. package/dist/components/FormRenderer/handlers/handlers.test.js +2 -2
  14. package/dist/components/FormRenderer/helpers/getNextPageId.js +33 -26
  15. package/dist/components/FormRenderer/helpers/getNextPageId.test.js +89 -7
  16. package/dist/components/FormRenderer/helpers/getSubmissionStatus.js +27 -0
  17. package/dist/components/FormRenderer/helpers/getSubmissionStatus.test.js +209 -0
  18. package/dist/components/FormRenderer/helpers/index.js +4 -1
  19. package/dist/components/PageActions/ActionButton.test.js +1 -1
  20. package/dist/components/PageActions/PageActions.stories.mdx +1 -1
  21. package/dist/components/PageActions/PageActions.test.js +5 -5
  22. package/dist/components/SummaryList/RowAction.js +1 -1
  23. package/dist/components/SummaryList/RowAction.test.js +6 -6
  24. package/dist/components/SummaryList/SummaryList.js +8 -5
  25. package/dist/components/SummaryList/SummaryList.scss +10 -2
  26. package/dist/components/SummaryList/SummaryList.stories.mdx +64 -10
  27. package/dist/components/SummaryList/SummaryList.test.js +54 -0
  28. package/dist/components/SummaryList/helpers/getRowActionAttributes.js +2 -2
  29. package/dist/components/SummaryList/helpers/getRowActionAttributes.test.js +4 -4
  30. package/dist/components/index.js +8 -0
  31. package/dist/index.js +8 -0
  32. package/dist/json/areYouACivilServant.json +7 -0
  33. package/dist/json/firstForm.json +94 -0
  34. package/dist/json/grade.json +108 -0
  35. package/dist/json/saveAndContinue.json +98 -0
  36. package/dist/json/team.json +17351 -0
  37. package/dist/json/userProfile.data.json +14 -0
  38. package/dist/json/userProfile.json +276 -0
  39. package/dist/models/ComponentTypes.js +7 -1
  40. package/dist/models/PageAction.js +9 -7
  41. package/dist/utils/CheckYourAnswers/getCYAAction.js +24 -3
  42. package/dist/utils/CheckYourAnswers/getCYAAction.test.js +62 -15
  43. package/dist/utils/CheckYourAnswers/getCYARow.js +8 -2
  44. package/dist/utils/CheckYourAnswers/getCYARowsForPage.js +11 -5
  45. package/dist/utils/Component/getComponent.js +32 -0
  46. package/dist/utils/Component/getComponentTests/getComponent.autocomplete.test.js +75 -0
  47. package/dist/utils/Component/getComponentTests/getComponent.checkboxes.test.js +129 -0
  48. package/dist/utils/Component/getComponentTests/getComponent.date.test.js +129 -0
  49. package/dist/utils/Component/getComponentTests/getComponent.email.test.js +80 -0
  50. package/dist/utils/Component/getComponentTests/getComponent.heading.test.js +33 -0
  51. package/dist/utils/Component/getComponentTests/getComponent.html.test.js +45 -0
  52. package/dist/utils/Component/getComponentTests/getComponent.insetText.test.js +31 -0
  53. package/dist/utils/Component/getComponentTests/getComponent.phoneNumber.test.js +80 -0
  54. package/dist/utils/Component/getComponentTests/getComponent.radios.test.js +125 -0
  55. package/dist/utils/Component/getComponentTests/getComponent.text.test.js +80 -0
  56. package/dist/utils/Component/getComponentTests/getComponent.textarea.test.js +76 -0
  57. package/dist/utils/Component/getComponentTests/getComponent.unknown.test.js +14 -0
  58. package/dist/utils/Component/isEditable.js +1 -1
  59. package/dist/utils/Data/refDataToOptions.js +4 -0
  60. package/dist/utils/Data/refDataToOptions.test.js +30 -0
  61. package/dist/utils/FormPage/getEditableComponents.js +28 -0
  62. package/dist/utils/FormPage/getEditableComponents.test.js +75 -0
  63. package/dist/utils/FormPage/getFormPage.js +5 -1
  64. package/dist/utils/FormPage/getPageActions.js +66 -0
  65. package/dist/utils/FormPage/getPageActions.test.js +89 -0
  66. package/dist/utils/FormPage/index.js +7 -1
  67. package/dist/utils/FormPage/showFormPage.js +81 -0
  68. package/dist/utils/FormPage/showFormPage.test.js +131 -0
  69. package/dist/utils/Validate/validateComponent.js +5 -3
  70. package/dist/utils/Validate/validateRequired.js +11 -0
  71. package/dist/utils/Validate/validateRequired.test.js +12 -0
  72. package/package.json +15 -10
  73. package/dist/index.test.js +0 -18
  74. package/dist/utils/Component/getComponent.test.js +0 -329
@@ -1,329 +0,0 @@
1
- "use strict";
2
-
3
- var _react = require("@testing-library/react");
4
-
5
- var _models = require("../../models");
6
-
7
- var _getComponent = _interopRequireDefault(require("./getComponent"));
8
-
9
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
-
11
- function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
12
-
13
- 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."); }
14
-
15
- 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); }
16
-
17
- 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; }
18
-
19
- 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; }
20
-
21
- function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
22
-
23
- describe('utils', function () {
24
- describe('Component', function () {
25
- describe('get', function () {
26
- it('should return null for an unknown type', function () {
27
- expect((0, _getComponent.default)({
28
- type: 'unknown'
29
- })).toBeNull();
30
- });
31
- it('should return a p tag by default for an HTML component', function () {
32
- var ID = 'test-id';
33
- var CONTENT = 'HTML content';
34
- var COMPONENT = {
35
- type: _models.ComponentTypes.HTML,
36
- content: CONTENT,
37
- 'data-testid': ID
38
- };
39
-
40
- var _render = (0, _react.render)((0, _getComponent.default)(COMPONENT)),
41
- container = _render.container;
42
-
43
- var p = (0, _react.getByTestId)(container, ID);
44
- expect(p.innerHTML).toContain(CONTENT);
45
- expect(p.tagName).toEqual('P');
46
- });
47
- it('should return an appropriate tag for an HTML component', function () {
48
- var ID = 'test-id';
49
- var TAG_NAME = 'hr';
50
- var COMPONENT = {
51
- type: _models.ComponentTypes.HTML,
52
- tagName: TAG_NAME,
53
- 'data-testid': ID
54
- };
55
-
56
- var _render2 = (0, _react.render)((0, _getComponent.default)(COMPONENT)),
57
- container = _render2.container;
58
-
59
- var hr = (0, _react.getByTestId)(container, ID);
60
- expect(hr.tagName).toEqual('HR');
61
- });
62
- it('should return an appropriately rendered heading component', function () {
63
- var ID = 'test-id';
64
- var SIZE = 'm';
65
- var CONTENT = 'Heading text';
66
- var COMPONENT = {
67
- type: _models.ComponentTypes.HEADING,
68
- size: SIZE,
69
- content: CONTENT,
70
- 'data-testid': ID
71
- };
72
-
73
- var _render3 = (0, _react.render)((0, _getComponent.default)(COMPONENT)),
74
- container = _render3.container;
75
-
76
- var heading = (0, _react.getByTestId)(container, ID);
77
- expect(heading.innerHTML).toContain(CONTENT);
78
- expect(heading.tagName).toEqual('H2');
79
- expect(heading.classList).toContain("govuk-heading-".concat(SIZE));
80
- });
81
- it('should return an appropriately rendered inset-text component', function () {
82
- var ID = 'test-id';
83
- var CONTENT = 'Heading text';
84
- var COMPONENT = {
85
- type: _models.ComponentTypes.INSET_TEXT,
86
- content: CONTENT,
87
- 'data-testid': ID
88
- };
89
-
90
- var _render4 = (0, _react.render)((0, _getComponent.default)(COMPONENT)),
91
- container = _render4.container;
92
-
93
- var insetText = (0, _react.getByTestId)(container, ID);
94
- expect(insetText.innerHTML).toContain(CONTENT);
95
- expect(insetText.tagName).toEqual('DIV');
96
- expect(insetText.classList).toContain('govuk-inset-text');
97
- });
98
- it('should return an appropriately rendered text component', function () {
99
- var ID = 'test-id';
100
- var FIELD_ID = 'field-id';
101
- var LABEL = 'label';
102
- var COMPONENT = {
103
- type: _models.ComponentTypes.TEXT,
104
- id: ID,
105
- fieldId: FIELD_ID,
106
- label: LABEL,
107
- 'data-testid': ID
108
- };
109
-
110
- var _render5 = (0, _react.render)((0, _getComponent.default)(COMPONENT)),
111
- container = _render5.container;
112
-
113
- var _getAllByTestId = (0, _react.getAllByTestId)(container, ID),
114
- _getAllByTestId2 = _slicedToArray(_getAllByTestId, 2),
115
- formGroup = _getAllByTestId2[0],
116
- input = _getAllByTestId2[1];
117
-
118
- expect(formGroup.tagName).toEqual('DIV');
119
- expect(formGroup.classList).toContain('govuk-form-group');
120
- var label = undefined;
121
- formGroup.childNodes.forEach(function (node) {
122
- // Check if it's an element.
123
- if (node instanceof Element && node.tagName === 'LABEL') {
124
- label = node;
125
- }
126
- });
127
- expect(label).toBeDefined();
128
- expect(label.innerHTML).toContain(LABEL);
129
- expect(label.getAttribute('for')).toEqual(ID);
130
- expect(input.tagName).toEqual('INPUT');
131
- expect(input.classList).toContain('govuk-input');
132
- expect(input.id).toEqual(ID);
133
- });
134
- it('should return an appropriately rendered email component', function () {
135
- var ID = 'test-id';
136
- var FIELD_ID = 'field-id';
137
- var LABEL = 'label';
138
- var COMPONENT = {
139
- type: _models.ComponentTypes.EMAIL,
140
- id: ID,
141
- fieldId: FIELD_ID,
142
- label: LABEL,
143
- 'data-testid': ID
144
- };
145
-
146
- var _render6 = (0, _react.render)((0, _getComponent.default)(COMPONENT)),
147
- container = _render6.container;
148
-
149
- var _getAllByTestId3 = (0, _react.getAllByTestId)(container, ID),
150
- _getAllByTestId4 = _slicedToArray(_getAllByTestId3, 2),
151
- formGroup = _getAllByTestId4[0],
152
- input = _getAllByTestId4[1];
153
-
154
- expect(formGroup.tagName).toEqual('DIV');
155
- expect(formGroup.classList).toContain('govuk-form-group');
156
- var label = undefined;
157
- formGroup.childNodes.forEach(function (node) {
158
- // Check if it's an element.
159
- if (node instanceof Element && node.tagName === 'LABEL') {
160
- label = node;
161
- }
162
- });
163
- expect(label).toBeDefined();
164
- expect(label.innerHTML).toContain(LABEL);
165
- expect(label.getAttribute('for')).toEqual(ID);
166
- expect(input.tagName).toEqual('INPUT');
167
- expect(input.classList).toContain('govuk-input');
168
- expect(input.id).toEqual(ID);
169
- });
170
- it('should return an appropriately rendered phone-number component', function () {
171
- var ID = 'test-id';
172
- var FIELD_ID = 'field-id';
173
- var LABEL = 'label';
174
- var COMPONENT = {
175
- type: _models.ComponentTypes.PHONE_NUMBER,
176
- id: ID,
177
- fieldId: FIELD_ID,
178
- label: LABEL,
179
- 'data-testid': ID
180
- };
181
-
182
- var _render7 = (0, _react.render)((0, _getComponent.default)(COMPONENT)),
183
- container = _render7.container;
184
-
185
- var _getAllByTestId5 = (0, _react.getAllByTestId)(container, ID),
186
- _getAllByTestId6 = _slicedToArray(_getAllByTestId5, 2),
187
- formGroup = _getAllByTestId6[0],
188
- input = _getAllByTestId6[1];
189
-
190
- expect(formGroup.tagName).toEqual('DIV');
191
- expect(formGroup.classList).toContain('govuk-form-group');
192
- var label = undefined;
193
- formGroup.childNodes.forEach(function (node) {
194
- // Check if it's an element.
195
- if (node instanceof Element && node.tagName === 'LABEL') {
196
- label = node;
197
- }
198
- });
199
- expect(label).toBeDefined();
200
- expect(label.innerHTML).toContain(LABEL);
201
- expect(label.getAttribute('for')).toEqual(ID);
202
- expect(input.tagName).toEqual('INPUT');
203
- expect(input.classList).toContain('govuk-input');
204
- expect(input.id).toEqual(ID);
205
- });
206
- it('should return an appropriately rendered autocomplete component', function () {
207
- var ID = 'test-id';
208
- var FIELD_ID = 'field-id';
209
- var LABEL = 'label';
210
- var OPTIONS = [];
211
- var COMPONENT = {
212
- type: _models.ComponentTypes.AUTOCOMPLETE,
213
- id: ID,
214
- fieldId: FIELD_ID,
215
- label: LABEL,
216
- data: {
217
- options: OPTIONS
218
- },
219
- 'data-testid': ID
220
- };
221
-
222
- var _render8 = (0, _react.render)((0, _getComponent.default)(COMPONENT)),
223
- container = _render8.container;
224
-
225
- var formGroup = (0, _react.getByTestId)(container, ID);
226
- expect(formGroup.tagName).toEqual('DIV');
227
- expect(formGroup.classList).toContain('govuk-form-group');
228
- var label = undefined;
229
- var autocompleteWrapper = undefined;
230
- var autocomplete = undefined;
231
- var autocompleteInput = undefined;
232
- formGroup.childNodes.forEach(function (node) {
233
- // Check if it's an element.
234
- if (node instanceof Element) {
235
- if (node.tagName === 'LABEL') {
236
- label = node;
237
- } else if (node.classList.contains('hods-autocomplete__outer-wrapper')) {
238
- autocompleteWrapper = node;
239
- var autocompleteInner = node.childNodes[0];
240
-
241
- if (autocompleteInner instanceof Element) {
242
- autocomplete = autocompleteInner;
243
- autocomplete.childNodes.forEach(function (grandchild) {
244
- if (grandchild instanceof Element) {
245
- if (grandchild.tagName === 'INPUT') {
246
- autocompleteInput = grandchild;
247
- }
248
- }
249
- });
250
- }
251
-
252
- ;
253
- }
254
- }
255
- });
256
- expect(label).toBeDefined();
257
- expect(label.innerHTML).toContain(LABEL);
258
- expect(label.getAttribute('for')).toEqual(ID);
259
- expect(autocompleteWrapper).toBeDefined();
260
- expect(autocompleteWrapper.tagName).toEqual('DIV');
261
- expect(autocomplete).toBeDefined();
262
- expect(autocomplete.tagName).toEqual('DIV');
263
- expect(autocompleteInput).toBeDefined();
264
- expect(autocompleteInput.id).toEqual(ID);
265
- });
266
- it('should return an appropriately rendered radios component', function () {
267
- var ID = 'test-id';
268
- var FIELD_ID = 'field-id';
269
- var LABEL = 'label';
270
- var OPTIONS = [{
271
- value: 'a',
272
- label: 'Alpha'
273
- }];
274
- var COMPONENT = {
275
- type: _models.ComponentTypes.RADIOS,
276
- id: ID,
277
- fieldId: FIELD_ID,
278
- label: LABEL,
279
- data: {
280
- options: OPTIONS
281
- },
282
- 'data-testid': ID
283
- };
284
-
285
- var _render9 = (0, _react.render)((0, _getComponent.default)(COMPONENT)),
286
- container = _render9.container;
287
-
288
- var _getAllByTestId7 = (0, _react.getAllByTestId)(container, ID),
289
- _getAllByTestId8 = _slicedToArray(_getAllByTestId7, 2),
290
- formGroup = _getAllByTestId8[0],
291
- radios = _getAllByTestId8[1];
292
-
293
- expect(formGroup.tagName).toEqual('DIV');
294
- expect(formGroup.classList).toContain('govuk-form-group');
295
- var label = undefined;
296
- formGroup.childNodes.forEach(function (node) {
297
- // Check if it's an element.
298
- if (node instanceof Element) {
299
- if (node.tagName === 'LABEL') {
300
- label = node;
301
- }
302
- }
303
- });
304
- expect(label).toBeDefined();
305
- expect(label.innerHTML).toContain(LABEL);
306
- expect(label.getAttribute('for')).toEqual(ID);
307
- expect(radios.tagName).toEqual('DIV');
308
- expect(radios.classList).toContain('govuk-radios');
309
- expect(radios.childNodes.length).toEqual(OPTIONS.length);
310
- var radioItems = [];
311
- OPTIONS.forEach(function (_, index) {
312
- var radio = radios.childNodes[index];
313
- expect(radio instanceof Element).toBeTruthy();
314
-
315
- if (radio instanceof Element) {
316
- radioItems.push(radio);
317
- }
318
- });
319
- expect(radioItems.length).toEqual(OPTIONS.length);
320
- OPTIONS.forEach(function (option, index) {
321
- var radio = radioItems[index];
322
- expect(radio.tagName).toEqual('DIV');
323
- expect(radio.classList).toContain('govuk-radios__item');
324
- expect(radio.innerHTML).toContain(option.label);
325
- });
326
- });
327
- });
328
- });
329
- });