@ukhomeoffice/cop-react-form-renderer 5.48.1-bravo → 5.49.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/CollectionSummary/RenderListView.js +126 -0
- package/dist/components/CollectionSummary/RenderListView.scss +8 -0
- package/dist/components/CollectionSummary/RenderListView.test.js +190 -0
- package/dist/components/CollectionSummary/SummaryCard.js +15 -1
- package/dist/components/FormComponent/FormComponent.test.js +75 -0
- package/package.json +1 -1
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = exports.DEFAULT_TITLE = exports.DEFAULT_EDIT_LABEL = exports.DEFAULT_DUPLICATE_BUTTON_LABEL = exports.DEFAULT_DETAILS_TITLE = exports.DEFAULT_DELETE_BUTTON_LABEL = exports.DEFAULT_CLASS = exports.DEFAULT_CHANGE_BUTTON_LABEL = exports.DEFAULT_CHANGE_BUTTON_CLASS = void 0;
|
|
7
|
+
var _copReactComponents = require("@ukhomeoffice/cop-react-components");
|
|
8
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
9
|
+
var _react = _interopRequireDefault(require("react"));
|
|
10
|
+
var _SummaryListRow = _interopRequireDefault(require("../SummaryList/SummaryListRow"));
|
|
11
|
+
var _utils = _interopRequireDefault(require("../../utils"));
|
|
12
|
+
require("./RenderListView.scss");
|
|
13
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
14
|
+
// Global imports.
|
|
15
|
+
|
|
16
|
+
// Local imports.
|
|
17
|
+
|
|
18
|
+
// Styles.
|
|
19
|
+
|
|
20
|
+
var DEFAULT_CLASS = exports.DEFAULT_CLASS = 'hods-form-summary-card';
|
|
21
|
+
var DEFAULT_TITLE = exports.DEFAULT_TITLE = 'Item';
|
|
22
|
+
var DEFAULT_CHANGE_BUTTON_LABEL = exports.DEFAULT_CHANGE_BUTTON_LABEL = 'Change';
|
|
23
|
+
var DEFAULT_DELETE_BUTTON_LABEL = exports.DEFAULT_DELETE_BUTTON_LABEL = 'Delete';
|
|
24
|
+
var DEFAULT_EDIT_LABEL = exports.DEFAULT_EDIT_LABEL = 'Quick Edit';
|
|
25
|
+
var DEFAULT_DUPLICATE_BUTTON_LABEL = exports.DEFAULT_DUPLICATE_BUTTON_LABEL = 'Duplicate';
|
|
26
|
+
var DEFAULT_DETAILS_TITLE = exports.DEFAULT_DETAILS_TITLE = 'Full details';
|
|
27
|
+
var DEFAULT_CHANGE_BUTTON_CLASS = exports.DEFAULT_CHANGE_BUTTON_CLASS = 'secondary';
|
|
28
|
+
var RenderListView = function RenderListView(_ref) {
|
|
29
|
+
var _config$changeAction2, _config$changeAction3, _config$deleteAction, _masterPage$childPage;
|
|
30
|
+
var id = _ref.id,
|
|
31
|
+
entryData = _ref.entryData,
|
|
32
|
+
config = _ref.config,
|
|
33
|
+
onChange = _ref.onChange,
|
|
34
|
+
onDelete = _ref.onDelete,
|
|
35
|
+
masterPage = _ref.masterPage;
|
|
36
|
+
return /*#__PURE__*/_react.default.createElement("div", {
|
|
37
|
+
className: "govuk-summary-card",
|
|
38
|
+
id: id
|
|
39
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
40
|
+
className: "govuk-summary-card__title-wrapper dark"
|
|
41
|
+
}, /*#__PURE__*/_react.default.createElement("h2", {
|
|
42
|
+
className: "govuk-summary-card__title"
|
|
43
|
+
}, _copReactComponents.Utils.interpolateString(config.title || DEFAULT_TITLE, entryData)), /*#__PURE__*/_react.default.createElement("ul", {
|
|
44
|
+
className: "govuk-summary-card__actions"
|
|
45
|
+
}, /*#__PURE__*/_react.default.createElement("li", {
|
|
46
|
+
className: "govuk-summary-card__action"
|
|
47
|
+
}, config.changeAction && typeof onChange === 'function' && /*#__PURE__*/_react.default.createElement(_copReactComponents.Button, {
|
|
48
|
+
id: "".concat(id, ".changeButton"),
|
|
49
|
+
onClick: function onClick() {
|
|
50
|
+
var _config$changeAction;
|
|
51
|
+
return onChange((_config$changeAction = config.changeAction) === null || _config$changeAction === void 0 ? void 0 : _config$changeAction.page, entryData.id);
|
|
52
|
+
},
|
|
53
|
+
classModifiers: ((_config$changeAction2 = config.changeAction) === null || _config$changeAction2 === void 0 ? void 0 : _config$changeAction2.classModifiers) || DEFAULT_CHANGE_BUTTON_CLASS
|
|
54
|
+
}, ((_config$changeAction3 = config.changeAction) === null || _config$changeAction3 === void 0 ? void 0 : _config$changeAction3.label) || DEFAULT_CHANGE_BUTTON_LABEL)), /*#__PURE__*/_react.default.createElement("li", {
|
|
55
|
+
className: "govuk-summary-card__action"
|
|
56
|
+
}, config.deleteAction && typeof onDelete === 'function' && /*#__PURE__*/_react.default.createElement(_copReactComponents.Button, {
|
|
57
|
+
id: "".concat(id, ".deleteButton"),
|
|
58
|
+
onClick: function onClick() {
|
|
59
|
+
return onDelete(entryData);
|
|
60
|
+
},
|
|
61
|
+
classModifiers: "secondary"
|
|
62
|
+
}, ((_config$deleteAction = config.deleteAction) === null || _config$deleteAction === void 0 ? void 0 : _config$deleteAction.label) || DEFAULT_DELETE_BUTTON_LABEL)))), /*#__PURE__*/_react.default.createElement("div", {
|
|
63
|
+
className: "govuk-summary-card__content"
|
|
64
|
+
}, /*#__PURE__*/_react.default.createElement("dl", {
|
|
65
|
+
className: "govuk-summary-list"
|
|
66
|
+
}, masterPage === null || masterPage === void 0 || (_masterPage$childPage = masterPage.childPages) === null || _masterPage$childPage === void 0 ? void 0 : _masterPage$childPage.flatMap(function (childPage) {
|
|
67
|
+
var _childPage$summaryLay;
|
|
68
|
+
return (_childPage$summaryLay = childPage.summaryLayout) === null || _childPage$summaryLay === void 0 ? void 0 : _childPage$summaryLay.sections.flatMap(function (section) {
|
|
69
|
+
var _section$fields;
|
|
70
|
+
return (_section$fields = section.fields) === null || _section$fields === void 0 ? void 0 : _section$fields.map(function (fieldId) {
|
|
71
|
+
var component = _utils.default.Component.elevateNested(childPage === null || childPage === void 0 ? void 0 : childPage.components, entryData).find(function (comp) {
|
|
72
|
+
return comp.fieldId === fieldId;
|
|
73
|
+
});
|
|
74
|
+
return component ? /*#__PURE__*/_react.default.createElement(_SummaryListRow.default, {
|
|
75
|
+
key: fieldId,
|
|
76
|
+
row: {
|
|
77
|
+
key: component.label,
|
|
78
|
+
value: _copReactComponents.Utils.interpolateString(entryData[component === null || component === void 0 ? void 0 : component.fieldId], entryData),
|
|
79
|
+
required: component.required
|
|
80
|
+
},
|
|
81
|
+
classes: function classes(element) {
|
|
82
|
+
return "govuk-summary-list__".concat(element);
|
|
83
|
+
}
|
|
84
|
+
}) : null;
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
}))));
|
|
88
|
+
};
|
|
89
|
+
RenderListView.propTypes = {
|
|
90
|
+
id: _propTypes.default.string.isRequired,
|
|
91
|
+
entryData: _propTypes.default.shape({
|
|
92
|
+
id: _propTypes.default.string.isRequired,
|
|
93
|
+
index: _propTypes.default.number.isRequired
|
|
94
|
+
}).isRequired,
|
|
95
|
+
config: _propTypes.default.shape({
|
|
96
|
+
banners: _propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.shape({})])),
|
|
97
|
+
title: _propTypes.default.string,
|
|
98
|
+
details: _propTypes.default.string,
|
|
99
|
+
changeAction: _propTypes.default.shape({
|
|
100
|
+
label: _propTypes.default.string,
|
|
101
|
+
page: _propTypes.default.string.isRequired,
|
|
102
|
+
classModifiers: _propTypes.default.string
|
|
103
|
+
}),
|
|
104
|
+
deleteAction: _propTypes.default.shape({
|
|
105
|
+
label: _propTypes.default.string
|
|
106
|
+
}),
|
|
107
|
+
duplicateAction: _propTypes.default.shape({
|
|
108
|
+
label: _propTypes.default.string
|
|
109
|
+
}),
|
|
110
|
+
quickEdit: _propTypes.default.shape({
|
|
111
|
+
components: _propTypes.default.arrayOf(_propTypes.default.shape({
|
|
112
|
+
use: _propTypes.default.string
|
|
113
|
+
}))
|
|
114
|
+
}),
|
|
115
|
+
detailsTitle: _propTypes.default.string,
|
|
116
|
+
listView: _propTypes.default.bool
|
|
117
|
+
}).isRequired,
|
|
118
|
+
onChange: _propTypes.default.func.isRequired,
|
|
119
|
+
onDelete: _propTypes.default.func.isRequired,
|
|
120
|
+
masterPage: _propTypes.default.shape({
|
|
121
|
+
childPages: _propTypes.default.arrayOf(_propTypes.default.shape({
|
|
122
|
+
components: _propTypes.default.arrayOf(_propTypes.default.shape())
|
|
123
|
+
})).isRequired
|
|
124
|
+
}).isRequired
|
|
125
|
+
};
|
|
126
|
+
var _default = exports.default = RenderListView;
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _react = _interopRequireDefault(require("react"));
|
|
4
|
+
var _react2 = require("@testing-library/react");
|
|
5
|
+
var _setupTests = require("../../setupTests");
|
|
6
|
+
var _RenderListView = _interopRequireDefault(require("./RenderListView"));
|
|
7
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
8
|
+
// Global imports.
|
|
9
|
+
|
|
10
|
+
// Local imports.
|
|
11
|
+
|
|
12
|
+
describe('components.CollectionSummary.RenderListView', function () {
|
|
13
|
+
var ENTRY = {
|
|
14
|
+
id: '001',
|
|
15
|
+
item1: 'Value 1',
|
|
16
|
+
item2: 'Value 2',
|
|
17
|
+
index: 0
|
|
18
|
+
};
|
|
19
|
+
var MASTER_PAGE = {
|
|
20
|
+
childPages: [{
|
|
21
|
+
summaryLayout: {
|
|
22
|
+
sections: [{
|
|
23
|
+
fields: ['item1', 'item2']
|
|
24
|
+
}]
|
|
25
|
+
},
|
|
26
|
+
components: [{
|
|
27
|
+
fieldId: 'item1',
|
|
28
|
+
label: 'Item 1',
|
|
29
|
+
required: true
|
|
30
|
+
}, {
|
|
31
|
+
fieldId: 'item2',
|
|
32
|
+
label: 'Item 2'
|
|
33
|
+
}]
|
|
34
|
+
}]
|
|
35
|
+
};
|
|
36
|
+
var CONFIG = {
|
|
37
|
+
title: 'Title text',
|
|
38
|
+
listView: true
|
|
39
|
+
// ...other config properties
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
var ID = 'testListView';
|
|
43
|
+
var onChangeArgs = [];
|
|
44
|
+
var ON_CHANGE = function ON_CHANGE(page, id) {
|
|
45
|
+
onChangeArgs.push({
|
|
46
|
+
page: page,
|
|
47
|
+
id: id
|
|
48
|
+
});
|
|
49
|
+
};
|
|
50
|
+
beforeEach(function () {
|
|
51
|
+
onChangeArgs = [];
|
|
52
|
+
});
|
|
53
|
+
var onDeleteArgs = [];
|
|
54
|
+
var ON_DELETE = function ON_DELETE(entry) {
|
|
55
|
+
onDeleteArgs.push(entry);
|
|
56
|
+
};
|
|
57
|
+
beforeEach(function () {
|
|
58
|
+
onDeleteArgs = [];
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
// Setup function to check rendered elements
|
|
62
|
+
var checkSetup = function checkSetup(container) {
|
|
63
|
+
var listViewDiv = container.children[0];
|
|
64
|
+
expect(listViewDiv.tagName).toEqual('DIV');
|
|
65
|
+
expect(listViewDiv.classList).toContain('govuk-summary-card');
|
|
66
|
+
return listViewDiv;
|
|
67
|
+
};
|
|
68
|
+
it('should correctly render RenderListView component', function () {
|
|
69
|
+
var _renderWithValidation = (0, _setupTests.renderWithValidation)( /*#__PURE__*/_react.default.createElement(_RenderListView.default, {
|
|
70
|
+
id: ID,
|
|
71
|
+
entryData: ENTRY,
|
|
72
|
+
config: CONFIG,
|
|
73
|
+
onChange: ON_CHANGE,
|
|
74
|
+
onDelete: ON_DELETE,
|
|
75
|
+
masterPage: MASTER_PAGE
|
|
76
|
+
})),
|
|
77
|
+
container = _renderWithValidation.container;
|
|
78
|
+
var listViewDiv = checkSetup(container);
|
|
79
|
+
|
|
80
|
+
// Check title wrapper and title text
|
|
81
|
+
var titleWrapper = listViewDiv.querySelector('.govuk-summary-card__title-wrapper');
|
|
82
|
+
expect(titleWrapper).not.toBeNull();
|
|
83
|
+
var title = titleWrapper.querySelector('.govuk-summary-card__title');
|
|
84
|
+
expect(title.textContent).toEqual(CONFIG.title);
|
|
85
|
+
|
|
86
|
+
// Logic to check the rendered rows
|
|
87
|
+
var rows = container.querySelectorAll('.govuk-summary-list__row');
|
|
88
|
+
expect(rows.length).toEqual(2); // Expecting two rows as per MOCK_MASTER_PAGE
|
|
89
|
+
|
|
90
|
+
// Check the first row
|
|
91
|
+
var firstRowKey = rows[0].querySelector('.govuk-summary-list__key');
|
|
92
|
+
var firstRowValue = rows[0].querySelector('.govuk-summary-list__value');
|
|
93
|
+
expect(firstRowKey.textContent).toEqual('Item 1');
|
|
94
|
+
expect(firstRowValue.textContent).toEqual(ENTRY.item1);
|
|
95
|
+
|
|
96
|
+
// Check the second row
|
|
97
|
+
var secondRowKey = rows[1].querySelector('.govuk-summary-list__key');
|
|
98
|
+
var secondRowValue = rows[1].querySelector('.govuk-summary-list__value');
|
|
99
|
+
expect(secondRowKey.textContent).toEqual('Item 2 (optional)');
|
|
100
|
+
expect(secondRowValue.textContent).toEqual(ENTRY.item2);
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
describe('Action buttons in RenderListView', function () {
|
|
104
|
+
var ID = 'testListView';
|
|
105
|
+
var onChangeArgs = [];
|
|
106
|
+
var onChangeCalls = 0;
|
|
107
|
+
var ON_CHANGE = function ON_CHANGE(page, id) {
|
|
108
|
+
onChangeArgs.push({
|
|
109
|
+
page: page,
|
|
110
|
+
id: id
|
|
111
|
+
});
|
|
112
|
+
onChangeCalls += 1;
|
|
113
|
+
};
|
|
114
|
+
var onDeleteArgs = [];
|
|
115
|
+
var onDeleteCalls = 0;
|
|
116
|
+
var ON_DELETE = function ON_DELETE(entry) {
|
|
117
|
+
onDeleteArgs.push(entry);
|
|
118
|
+
onDeleteCalls += 1;
|
|
119
|
+
};
|
|
120
|
+
beforeEach(function () {
|
|
121
|
+
onChangeArgs = [];
|
|
122
|
+
onChangeCalls = 0;
|
|
123
|
+
onDeleteArgs = [];
|
|
124
|
+
onDeleteCalls = 0;
|
|
125
|
+
});
|
|
126
|
+
var ENTRY = {
|
|
127
|
+
id: '001',
|
|
128
|
+
item1: 'Value 1',
|
|
129
|
+
item2: 'Value 2',
|
|
130
|
+
index: 0
|
|
131
|
+
};
|
|
132
|
+
var MASTER_PAGE = {
|
|
133
|
+
childPages: [{
|
|
134
|
+
summaryLayout: {
|
|
135
|
+
sections: [{
|
|
136
|
+
fields: ['item1', 'item2']
|
|
137
|
+
}]
|
|
138
|
+
},
|
|
139
|
+
components: [{
|
|
140
|
+
fieldId: 'item1',
|
|
141
|
+
label: 'Item 1',
|
|
142
|
+
required: true
|
|
143
|
+
}, {
|
|
144
|
+
fieldId: 'item2',
|
|
145
|
+
label: 'Item 2'
|
|
146
|
+
}]
|
|
147
|
+
}]
|
|
148
|
+
};
|
|
149
|
+
var CONFIG = {
|
|
150
|
+
title: 'Title text',
|
|
151
|
+
listView: true,
|
|
152
|
+
changeAction: {
|
|
153
|
+
label: 'Change label',
|
|
154
|
+
page: 'testPage'
|
|
155
|
+
},
|
|
156
|
+
deleteAction: {
|
|
157
|
+
label: 'Delete label'
|
|
158
|
+
}
|
|
159
|
+
};
|
|
160
|
+
it('should render and handle action buttons correctly', function () {
|
|
161
|
+
var _renderWithValidation2 = (0, _setupTests.renderWithValidation)( /*#__PURE__*/_react.default.createElement(_RenderListView.default, {
|
|
162
|
+
id: ID,
|
|
163
|
+
entryData: ENTRY,
|
|
164
|
+
config: CONFIG,
|
|
165
|
+
onChange: ON_CHANGE,
|
|
166
|
+
onDelete: ON_DELETE,
|
|
167
|
+
masterPage: MASTER_PAGE
|
|
168
|
+
})),
|
|
169
|
+
container = _renderWithValidation2.container;
|
|
170
|
+
var listViewDiv = container.querySelector('.govuk-summary-card');
|
|
171
|
+
expect(listViewDiv).not.toBeNull();
|
|
172
|
+
|
|
173
|
+
// Check for change button
|
|
174
|
+
var changeButton = listViewDiv.querySelector('[id$=".changeButton"]');
|
|
175
|
+
expect(changeButton.textContent).toEqual(CONFIG.changeAction.label);
|
|
176
|
+
_react2.fireEvent.click(changeButton, {});
|
|
177
|
+
expect(onChangeCalls).toEqual(1);
|
|
178
|
+
expect(onChangeArgs[0]).toMatchObject({
|
|
179
|
+
page: CONFIG.changeAction.page,
|
|
180
|
+
id: ENTRY.id
|
|
181
|
+
});
|
|
182
|
+
|
|
183
|
+
// Check for delete button
|
|
184
|
+
var deleteButton = listViewDiv.querySelector('[id$=".deleteButton"]');
|
|
185
|
+
expect(deleteButton.textContent).toEqual(CONFIG.deleteAction.label);
|
|
186
|
+
_react2.fireEvent.click(deleteButton, {});
|
|
187
|
+
expect(onDeleteCalls).toEqual(1);
|
|
188
|
+
expect(onDeleteArgs[0]).toEqual(ENTRY);
|
|
189
|
+
});
|
|
190
|
+
});
|
|
@@ -14,6 +14,7 @@ var _hooks = require("../../hooks");
|
|
|
14
14
|
var _FormPage = _interopRequireDefault(require("../FormPage"));
|
|
15
15
|
var _FormComponent = _interopRequireDefault(require("../FormComponent"));
|
|
16
16
|
var _BannerStrip = _interopRequireDefault(require("./BannerStrip"));
|
|
17
|
+
var _RenderListView = _interopRequireDefault(require("./RenderListView"));
|
|
17
18
|
require("./SummaryCard.scss");
|
|
18
19
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
19
20
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
@@ -133,6 +134,18 @@ var SummaryCard = function SummaryCard(_ref) {
|
|
|
133
134
|
return _ref2.apply(this, arguments);
|
|
134
135
|
};
|
|
135
136
|
}();
|
|
137
|
+
|
|
138
|
+
// To render summary card in list view as per https://design-system.service.gov.uk/components/summary-list
|
|
139
|
+
if (config.listView) {
|
|
140
|
+
return /*#__PURE__*/_react.default.createElement(_RenderListView.default, {
|
|
141
|
+
id: id,
|
|
142
|
+
entryData: entryData,
|
|
143
|
+
config: config,
|
|
144
|
+
onChange: onChange,
|
|
145
|
+
onDelete: onDelete,
|
|
146
|
+
masterPage: masterPage
|
|
147
|
+
});
|
|
148
|
+
}
|
|
136
149
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
137
150
|
className: classes(),
|
|
138
151
|
id: id
|
|
@@ -249,7 +262,8 @@ SummaryCard.propTypes = {
|
|
|
249
262
|
use: _propTypes.default.string
|
|
250
263
|
}))
|
|
251
264
|
}),
|
|
252
|
-
detailsTitle: _propTypes.default.string
|
|
265
|
+
detailsTitle: _propTypes.default.string,
|
|
266
|
+
listView: _propTypes.default.bool
|
|
253
267
|
}).isRequired,
|
|
254
268
|
masterPage: _propTypes.default.shape({
|
|
255
269
|
childPages: _propTypes.default.arrayOf(_propTypes.default.shape({
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
4
|
+
var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
|
|
4
5
|
var _react = _interopRequireDefault(require("react"));
|
|
5
6
|
var _setupTests = require("../../setupTests");
|
|
6
7
|
var _FormComponent = _interopRequireDefault(require("./FormComponent"));
|
|
8
|
+
var _models = require("../../models");
|
|
7
9
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
8
10
|
function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, catch: function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
|
|
9
11
|
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); } }
|
|
@@ -347,5 +349,78 @@ describe('components', function () {
|
|
|
347
349
|
}
|
|
348
350
|
}, _callee9);
|
|
349
351
|
})));
|
|
352
|
+
it('should correctly handle a nested file input on change event within a nested container', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee10() {
|
|
353
|
+
var ID, NESTED_CONTAINER_ID, NESTED_ID, COMPONENT, DATA, ON_CHANGE_ARGS, ON_CHANGE_COUNT, ON_CHANGE, _renderWithValidation10, container, c, formGroup, fieldSet, input, FILE_EXTENSION, FILE_NAME, FILE_TYPE, str, blob, FILE;
|
|
354
|
+
return _regeneratorRuntime().wrap(function _callee10$(_context10) {
|
|
355
|
+
while (1) switch (_context10.prev = _context10.next) {
|
|
356
|
+
case 0:
|
|
357
|
+
ID = 'component';
|
|
358
|
+
NESTED_CONTAINER_ID = 'nested-container-component';
|
|
359
|
+
NESTED_ID = 'nested-component';
|
|
360
|
+
COMPONENT = {
|
|
361
|
+
id: ID,
|
|
362
|
+
fieldId: ID,
|
|
363
|
+
type: _models.ComponentTypes.CHECKBOXES,
|
|
364
|
+
label: 'Checkboxes component',
|
|
365
|
+
data: {
|
|
366
|
+
options: [{
|
|
367
|
+
value: 'EPSILON',
|
|
368
|
+
label: 'Epsilon Label'
|
|
369
|
+
}, {
|
|
370
|
+
value: 'GAMMA',
|
|
371
|
+
label: 'Gamma Label',
|
|
372
|
+
nested: [{
|
|
373
|
+
id: NESTED_CONTAINER_ID,
|
|
374
|
+
fieldId: NESTED_CONTAINER_ID,
|
|
375
|
+
type: _models.ComponentTypes.CONTAINER,
|
|
376
|
+
components: [{
|
|
377
|
+
id: NESTED_ID,
|
|
378
|
+
fieldId: NESTED_ID,
|
|
379
|
+
label: 'File upload',
|
|
380
|
+
type: _models.ComponentTypes.FILE
|
|
381
|
+
}]
|
|
382
|
+
}]
|
|
383
|
+
}]
|
|
384
|
+
}
|
|
385
|
+
};
|
|
386
|
+
DATA = {
|
|
387
|
+
component: 'GAMMA'
|
|
388
|
+
};
|
|
389
|
+
ON_CHANGE_ARGS = [];
|
|
390
|
+
ON_CHANGE_COUNT = 0;
|
|
391
|
+
ON_CHANGE = function ON_CHANGE(_ref13) {
|
|
392
|
+
var target = _ref13.target;
|
|
393
|
+
ON_CHANGE_ARGS.push(target);
|
|
394
|
+
ON_CHANGE_COUNT += 1;
|
|
395
|
+
};
|
|
396
|
+
_renderWithValidation10 = (0, _setupTests.renderWithValidation)( /*#__PURE__*/_react.default.createElement(_FormComponent.default, {
|
|
397
|
+
"data-testid": ID,
|
|
398
|
+
component: COMPONENT,
|
|
399
|
+
value: DATA[ID],
|
|
400
|
+
onChange: ON_CHANGE,
|
|
401
|
+
formData: DATA
|
|
402
|
+
})), container = _renderWithValidation10.container; // Get hold of the file input.
|
|
403
|
+
c = container.childNodes[0];
|
|
404
|
+
formGroup = c.childNodes[0];
|
|
405
|
+
fieldSet = formGroup.childNodes[2];
|
|
406
|
+
input = fieldSet.childNodes[2].childNodes[0].childNodes[0].childNodes[2].childNodes[0];
|
|
407
|
+
FILE_EXTENSION = 'json';
|
|
408
|
+
FILE_NAME = "test.".concat(FILE_EXTENSION);
|
|
409
|
+
FILE_TYPE = 'application/JSON';
|
|
410
|
+
str = JSON.stringify({
|
|
411
|
+
alpha: 'bravo'
|
|
412
|
+
});
|
|
413
|
+
blob = new Blob([str]);
|
|
414
|
+
FILE = new File([blob], FILE_NAME, {
|
|
415
|
+
type: FILE_TYPE
|
|
416
|
+
});
|
|
417
|
+
_userEvent.default.upload(input, FILE);
|
|
418
|
+
expect(ON_CHANGE_COUNT).toEqual(3);
|
|
419
|
+
case 21:
|
|
420
|
+
case "end":
|
|
421
|
+
return _context10.stop();
|
|
422
|
+
}
|
|
423
|
+
}, _callee10);
|
|
424
|
+
})));
|
|
350
425
|
});
|
|
351
426
|
});
|