@ukhomeoffice/cop-react-form-renderer 5.91.1 → 5.93.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/CollectionSummary/RenderListView.js +16 -4
- package/dist/components/CollectionSummary/RenderListView.scss +4 -0
- package/dist/components/CollectionSummary/RenderListView.test.js +35 -2
- package/dist/utils/Validate/validateEmail.js +2 -1
- package/dist/utils/Validate/validateEmail.test.js +3 -0
- package/package.json +1 -1
|
@@ -29,7 +29,7 @@ var DEFAULT_DELETE_BUTTON_LABEL = exports.DEFAULT_DELETE_BUTTON_LABEL = 'Delete'
|
|
|
29
29
|
var DEFAULT_CHANGE_BUTTON_CLASS = exports.DEFAULT_CHANGE_BUTTON_CLASS = 'secondary';
|
|
30
30
|
var DEFAULT_DELETE_BUTTON_CLASS = exports.DEFAULT_DELETE_BUTTON_CLASS = 'warning';
|
|
31
31
|
var RenderListView = function RenderListView(_ref) {
|
|
32
|
-
var _config$changeAction, _config$deleteAction, _masterPage$childPage;
|
|
32
|
+
var _config$changeAction, _config$changeAction2, _config$changeAction3, _config$changeAction4, _config$deleteAction, _masterPage$childPage;
|
|
33
33
|
var id = _ref.id,
|
|
34
34
|
entryData = _ref.entryData,
|
|
35
35
|
config = _ref.config,
|
|
@@ -59,16 +59,28 @@ var RenderListView = function RenderListView(_ref) {
|
|
|
59
59
|
className: classes('actions')
|
|
60
60
|
}, /*#__PURE__*/_react.default.createElement("li", {
|
|
61
61
|
className: classes('action')
|
|
62
|
-
}, config.changeAction && typeof onFullEdit === 'function' &&
|
|
62
|
+
}, config.changeAction && typeof onFullEdit === 'function' &&
|
|
63
|
+
// If passed a value for classModifiers, render a Button with those classModifiers applied -
|
|
64
|
+
// otherwise, revert to the default GOVUK List View styling of rendering a Link button instead:
|
|
65
|
+
config.changeAction.classModifiers ? /*#__PURE__*/_react.default.createElement(_copReactComponents.Button, {
|
|
66
|
+
id: "".concat(id, ".changeButton"),
|
|
67
|
+
onClick: function onClick() {
|
|
68
|
+
return onFullEdit(config.changeAction.page, entryData.id);
|
|
69
|
+
},
|
|
70
|
+
classModifiers: config.changeAction.classModifiers,
|
|
71
|
+
"aria-label": _copReactComponents.Utils.interpolateString("".concat(((_config$changeAction = config.changeAction) === null || _config$changeAction === void 0 ? void 0 : _config$changeAction.label) || DEFAULT_CHANGE_BUTTON_LABEL, " ").concat(config.title || DEFAULT_TITLE), _objectSpread(_objectSpread({}, entryData), {}, {
|
|
72
|
+
index: entryData.index + 1
|
|
73
|
+
}))
|
|
74
|
+
}, ((_config$changeAction2 = config.changeAction) === null || _config$changeAction2 === void 0 ? void 0 : _config$changeAction2.label) || DEFAULT_CHANGE_BUTTON_LABEL) : /*#__PURE__*/_react.default.createElement("button", {
|
|
63
75
|
type: "button",
|
|
64
76
|
className: "govuk-link govuk-link-button",
|
|
65
77
|
onClick: function onClick() {
|
|
66
78
|
return onFullEdit(config.changeAction.page, entryData.id);
|
|
67
79
|
},
|
|
68
|
-
"aria-label": _copReactComponents.Utils.interpolateString("".concat(((_config$
|
|
80
|
+
"aria-label": _copReactComponents.Utils.interpolateString("".concat(((_config$changeAction3 = config.changeAction) === null || _config$changeAction3 === void 0 ? void 0 : _config$changeAction3.label) || DEFAULT_CHANGE_BUTTON_LABEL, " ").concat(config.title || DEFAULT_TITLE), _objectSpread(_objectSpread({}, entryData), {}, {
|
|
69
81
|
index: entryData.index + 1
|
|
70
82
|
}))
|
|
71
|
-
}, config.changeAction.label || DEFAULT_CHANGE_BUTTON_LABEL)), /*#__PURE__*/_react.default.createElement("li", {
|
|
83
|
+
}, ((_config$changeAction4 = config.changeAction) === null || _config$changeAction4 === void 0 ? void 0 : _config$changeAction4.label) || DEFAULT_CHANGE_BUTTON_LABEL)), /*#__PURE__*/_react.default.createElement("li", {
|
|
72
84
|
className: classes('action')
|
|
73
85
|
}, config.deleteAction && typeof onDelete === 'function' && /*#__PURE__*/_react.default.createElement(_copReactComponents.Button, {
|
|
74
86
|
id: "".concat(id, ".deleteButton"),
|
|
@@ -224,7 +224,7 @@ describe('components.CollectionSummary.RenderListView', function () {
|
|
|
224
224
|
onDeleteArgs = [];
|
|
225
225
|
onDeleteCalls = 0;
|
|
226
226
|
});
|
|
227
|
-
it('should render and handle action buttons correctly', function () {
|
|
227
|
+
it('should render and handle action buttons correctly, including a GOVUK default Change Link when no classModifiers are passed in', function () {
|
|
228
228
|
var _renderWithValidation4 = (0, _setupTests.renderWithValidation)( /*#__PURE__*/_react2.default.createElement(_RenderListView.default, {
|
|
229
229
|
id: ID,
|
|
230
230
|
entryData: ENTRY,
|
|
@@ -238,7 +238,7 @@ describe('components.CollectionSummary.RenderListView', function () {
|
|
|
238
238
|
var listViewDiv = container.querySelector('.govuk-summary-card');
|
|
239
239
|
expect(listViewDiv).not.toBeNull();
|
|
240
240
|
|
|
241
|
-
// Check for change
|
|
241
|
+
// Check for change link
|
|
242
242
|
var changeLink = listViewDiv.querySelector('.govuk-link');
|
|
243
243
|
expect(changeLink.textContent).toEqual(CONFIG.changeAction.label);
|
|
244
244
|
expect(changeLink.getAttribute('aria-label')).toEqual("".concat(CONFIG.changeAction.label, " ").concat(CONFIG.title));
|
|
@@ -257,5 +257,38 @@ describe('components.CollectionSummary.RenderListView', function () {
|
|
|
257
257
|
expect(onDeleteCalls).toEqual(1);
|
|
258
258
|
expect(onDeleteArgs[0]).toEqual(ENTRY);
|
|
259
259
|
});
|
|
260
|
+
it('should render and handle an Update button instead of the GOVUK default Change link when classModifiers are passed in', function () {
|
|
261
|
+
var CONFIG_WITH_BUTTON = _objectSpread(_objectSpread({}, CONFIG), {}, {
|
|
262
|
+
changeAction: {
|
|
263
|
+
label: 'Update label',
|
|
264
|
+
page: 'testPage',
|
|
265
|
+
classModifiers: 'primary'
|
|
266
|
+
}
|
|
267
|
+
});
|
|
268
|
+
var _renderWithValidation5 = (0, _setupTests.renderWithValidation)( /*#__PURE__*/_react2.default.createElement(_RenderListView.default, {
|
|
269
|
+
id: ID,
|
|
270
|
+
entryData: ENTRY,
|
|
271
|
+
config: CONFIG_WITH_BUTTON,
|
|
272
|
+
onFullEdit: ON_CHANGE,
|
|
273
|
+
onDelete: ON_DELETE,
|
|
274
|
+
masterPage: MASTER_PAGE,
|
|
275
|
+
getComponentRow: getComponentRow
|
|
276
|
+
})),
|
|
277
|
+
container = _renderWithValidation5.container;
|
|
278
|
+
var listViewDiv = container.querySelector('.govuk-summary-card');
|
|
279
|
+
expect(listViewDiv).not.toBeNull();
|
|
280
|
+
|
|
281
|
+
// Check for update button
|
|
282
|
+
var changeButton = listViewDiv.querySelector('.hods-button');
|
|
283
|
+
expect(changeButton.classList).toContain('hods-button--primary');
|
|
284
|
+
expect(changeButton.textContent).toEqual(CONFIG_WITH_BUTTON.changeAction.label);
|
|
285
|
+
expect(changeButton.getAttribute('aria-label')).toEqual("".concat(CONFIG_WITH_BUTTON.changeAction.label, " ").concat(CONFIG_WITH_BUTTON.title));
|
|
286
|
+
_react.fireEvent.click(changeButton, {});
|
|
287
|
+
expect(onChangeCalls).toEqual(1);
|
|
288
|
+
expect(onChangeArgs[0]).toMatchObject({
|
|
289
|
+
page: CONFIG_WITH_BUTTON.changeAction.page,
|
|
290
|
+
id: ENTRY.id
|
|
291
|
+
});
|
|
292
|
+
});
|
|
260
293
|
});
|
|
261
294
|
});
|
|
@@ -7,6 +7,7 @@ exports.default = void 0;
|
|
|
7
7
|
// eslint-disable-next-line no-control-regex
|
|
8
8
|
// const EMAIL_REGEX = /(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])/i;
|
|
9
9
|
var HODS_EMAIL_REGEX = /^[a-z0-9._\-']+@(digital\.)?homeoffice.gov.uk$/i;
|
|
10
|
+
var JMSC_EMAIL_REGEX = /^[a-z0-9._\-']+@jmsc.gov.uk$/i;
|
|
10
11
|
|
|
11
12
|
/**
|
|
12
13
|
* Validates an email address, ensuring it is in the correct domain and
|
|
@@ -26,7 +27,7 @@ var validateEmail = function validateEmail(value) {
|
|
|
26
27
|
if (!!value) {
|
|
27
28
|
var name = label ? label.toLowerCase() : 'email address';
|
|
28
29
|
if (typeof value === 'string') {
|
|
29
|
-
if (HODS_EMAIL_REGEX.test(value)) {
|
|
30
|
+
if (HODS_EMAIL_REGEX.test(value) || JMSC_EMAIL_REGEX.test(value)) {
|
|
30
31
|
return undefined;
|
|
31
32
|
}
|
|
32
33
|
}
|
|
@@ -14,6 +14,9 @@ describe('utils', function () {
|
|
|
14
14
|
it('should return no error when the value is a valid .gov.uk address', function () {
|
|
15
15
|
expect((0, _validateEmail.default)('alpha@homeoffice.gov.uk', LABEL)).toBeUndefined();
|
|
16
16
|
});
|
|
17
|
+
it('should return no error when the value is a valid jmsc.gov.uk address', function () {
|
|
18
|
+
expect((0, _validateEmail.default)('alpha@jmsc.gov.uk', LABEL)).toBeUndefined();
|
|
19
|
+
});
|
|
17
20
|
it('should return no error when the value is a capitalised digital.homeoffice.gov.uk address', function () {
|
|
18
21
|
expect((0, _validateEmail.default)('ALPHA.BRAVO@DIGITAL.HOMEOFFICE.GOV.UK', LABEL)).toBeUndefined();
|
|
19
22
|
});
|