@comicrelief/component-library 5.8.1 → 5.8.4

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.
@@ -154,13 +154,13 @@ describe('MarketingPreferencesDSForm component', () => {
154
154
  cy.get('@default')
155
155
  .find('.field-sms span[data-test=error-message] span')
156
156
  .should('exist')
157
- .contains('Please enter a valid mobile number');
157
+ .contains('Please enter a valid UK mobile number');
158
158
 
159
159
  // Phone
160
160
  cy.get('@default')
161
161
  .find('.field-phone span[data-test=error-message] span')
162
162
  .should('exist')
163
- .contains('Please enter a valid phone number');
163
+ .contains('Please enter a valid UK phone number');
164
164
 
165
165
  // Address1
166
166
  cy.get('@default')
@@ -424,7 +424,7 @@ describe('MarketingPreferencesDSForm component', () => {
424
424
  cy.get('@customised')
425
425
  .find('.field-phone span[data-test=error-message] span')
426
426
  .should('exist')
427
- .contains('Please enter a valid phone number');
427
+ .contains('Please enter a valid UK phone number');
428
428
 
429
429
  // Address1
430
430
  cy.get('@customised')
@@ -28,7 +28,12 @@ var CheckAnswer = function CheckAnswer(_ref) {
28
28
  if (e.target.checked) {
29
29
  newVal = e.target.value === 'yes' ? e.target.value : 'no';
30
30
  } else {
31
- newVal = '';
31
+ newVal = ''; // To ensure we're not letting invalid values get passed, reset any associated fields:
32
+
33
+ var theseFields = _AssociatedFields.default[name];
34
+ theseFields.forEach(function (fieldName) {
35
+ setValue(fieldName, '');
36
+ });
32
37
  } // Update the checkbox field itself
33
38
 
34
39
 
@@ -39,8 +44,9 @@ var CheckAnswer = function CheckAnswer(_ref) {
39
44
  var reValidate = !mpValidationOptions[name][newVal];
40
45
 
41
46
  if (reValidate) {
42
- var theseFields = _AssociatedFields.default[name];
43
- theseFields.forEach(function (fieldName) {
47
+ var _theseFields = _AssociatedFields.default[name];
48
+
49
+ _theseFields.forEach(function (fieldName) {
44
50
  clearErrors(fieldName);
45
51
  });
46
52
  }
@@ -117,7 +117,8 @@ var MarketingPreferencesDS = function MarketingPreferencesDS(_ref) {
117
117
  }, /*#__PURE__*/_react.default.createElement(_MarketingPreferencesDS.ShowHideInputWrapper, {
118
118
  show: showEmailField
119
119
  }, emailChoice[0] === 'no' && /*#__PURE__*/_react.default.createElement(_NoMessage.default, {
120
- askingFor: "an email"
120
+ askingFor: "an email",
121
+ optInType: "email"
121
122
  }), /*#__PURE__*/_react.default.createElement(_TextInput.default, {
122
123
  placeholder: "",
123
124
  fieldName: "mp_email",
@@ -147,7 +148,8 @@ var MarketingPreferencesDS = function MarketingPreferencesDS(_ref) {
147
148
  }, /*#__PURE__*/_react.default.createElement(_MarketingPreferencesDS.ShowHideInputWrapper, {
148
149
  show: showSMSField
149
150
  }, smsChoice[0] === 'no' && /*#__PURE__*/_react.default.createElement(_NoMessage.default, {
150
- askingFor: "a mobile number"
151
+ askingFor: "a mobile number",
152
+ optInType: "SMS"
151
153
  }), /*#__PURE__*/_react.default.createElement(_TextInput.default, {
152
154
  placeholder: "",
153
155
  fieldName: "mp_mobile",
@@ -175,7 +177,8 @@ var MarketingPreferencesDS = function MarketingPreferencesDS(_ref) {
175
177
  }, /*#__PURE__*/_react.default.createElement(_MarketingPreferencesDS.ShowHideInputWrapper, {
176
178
  show: showPhoneField
177
179
  }, phoneChoice[0] === 'no' ? /*#__PURE__*/_react.default.createElement(_NoMessage.default, {
178
- askingFor: "a phone number"
180
+ askingFor: "a phone number",
181
+ optInType: "phone"
179
182
  }) : '', /*#__PURE__*/_react.default.createElement(_TextInput.default, {
180
183
  placeholder: "",
181
184
  fieldName: "mp_phone",
@@ -203,7 +206,8 @@ var MarketingPreferencesDS = function MarketingPreferencesDS(_ref) {
203
206
  }, /*#__PURE__*/_react.default.createElement(_MarketingPreferencesDS.ShowHideInputWrapper, {
204
207
  show: showPostFields
205
208
  }, postChoice[0] === 'no' ? /*#__PURE__*/_react.default.createElement(_NoMessage.default, {
206
- askingFor: "an address"
209
+ askingFor: "an address",
210
+ optInType: "postal"
207
211
  }) : '', /*#__PURE__*/_react.default.createElement(_TextInput.default, {
208
212
  placeholder: "",
209
213
  fieldName: "mp_address1",
@@ -7,8 +7,6 @@ exports.buildValidationSchema = exports.setInitialValues = void 0;
7
7
 
8
8
  var yup = _interopRequireWildcard(require("yup"));
9
9
 
10
- require("yup-phone");
11
-
12
10
  var _lodash = require("lodash");
13
11
 
14
12
  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); }
@@ -75,6 +73,7 @@ var buildValidationSchema = function buildValidationSchema(overrideOptions) {
75
73
  }; // Override with any custom options supplied
76
74
 
77
75
  var mpValidationOptions = (0, _lodash.merge)(defaultOptions, overrideOptions);
76
+ var phoneRegex = /^(((((\+44)|(0044))\s?\d{4}|\(?0\d{4}\)?)\s?\d{3}\s?\d{3})|((((\+44)|(0044))\s?\d{3}|\(?0\d{3}\)?)\s?\d{3}\s?\d{4})|((((\+44)|(0044))\s?\d{2}|\(?0\d{2}\)?)\s?\d{4}\s?\d{4}))(\s?\\#(\d{4}|\d{3}))?$/;
78
77
  var mpValidationSchema = yup.object({
79
78
  mp_email: yup.string().when('mp_permissionEmail', {
80
79
  is: function is(val) {
@@ -86,13 +85,13 @@ var buildValidationSchema = function buildValidationSchema(overrideOptions) {
86
85
  is: function is(val) {
87
86
  return !mpValidationOptions.mp_permissionSMS.disableOption && mpValidationOptions.mp_permissionSMS[val];
88
87
  },
89
- then: yup.string().required('Please enter your mobile number').phone('GB', false, 'Please enter a valid mobile number')
88
+ then: yup.string().required('Please enter your mobile number').matches(phoneRegex, 'Please enter a valid UK mobile number')
90
89
  }),
91
90
  mp_phone: yup.string().when('mp_permissionPhone', {
92
91
  is: function is(val) {
93
92
  return !mpValidationOptions.mp_permissionPhone.disableOption && mpValidationOptions.mp_permissionPhone[val];
94
93
  },
95
- then: yup.string().required('Please enter your phone number').phone('GB', false, 'Please enter a valid phone number')
94
+ then: yup.string().required('Please enter your phone number').matches(phoneRegex, 'Please enter a valid UK phone number')
96
95
  }),
97
96
  mp_address1: yup.string().when('mp_permissionPost', {
98
97
  is: function is(val) {
@@ -9,16 +9,31 @@ exports.default = void 0;
9
9
 
10
10
  var _react = _interopRequireDefault(require("react"));
11
11
 
12
+ var _styledComponents = _interopRequireWildcard(require("styled-components"));
13
+
12
14
  var _Text = _interopRequireDefault(require("../../Atoms/Text/Text"));
13
15
 
14
- var NoMessage = function NoMessage(_ref) {
15
- var askingFor = _ref.askingFor;
16
- var message = "Please provide ".concat(askingFor, " so we can remove it from our database, otherwise untick this option.");
17
- return /*#__PURE__*/_react.default.createElement(_Text.default, {
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
+
20
+ var NoMessageWrapper = _styledComponents.default.div.withConfig({
21
+ displayName: "_NoMessage__NoMessageWrapper",
22
+ componentId: "sc-2h3k46-0"
23
+ })(["", ""], function (_ref) {
24
+ var theme = _ref.theme;
25
+ return (0, _styledComponents.css)(["background-color:", ";padding:15px;margin-bottom:15px;"], theme.color('red'));
26
+ });
27
+
28
+ var NoMessage = function NoMessage(_ref2) {
29
+ var askingFor = _ref2.askingFor,
30
+ optInType = _ref2.optInType;
31
+ var message = "This will remove the supplied ".concat(askingFor, " from any *previous* ").concat(optInType, " opt-in from our database; otherwise, you can leave this unchecked.");
32
+ return /*#__PURE__*/_react.default.createElement(NoMessageWrapper, null, /*#__PURE__*/_react.default.createElement(_Text.default, {
18
33
  tag: "p",
19
34
  size: "s",
20
- color: "grey_dark"
21
- }, message);
35
+ color: "white"
36
+ }, message));
22
37
  };
23
38
 
24
39
  var _default = NoMessage;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@comicrelief/component-library",
3
3
  "author": "Comic Relief Engineering Team",
4
- "version": "5.8.1",
4
+ "version": "5.8.4",
5
5
  "main": "dist/index.js",
6
6
  "license": "ISC",
7
7
  "jest": {
@@ -41,8 +41,7 @@
41
41
  "react-uid": "^2.2.0",
42
42
  "styled-components": "^5.3.1",
43
43
  "youtube-player": "^5.5.2",
44
- "yup": "^0.32.9",
45
- "yup-phone": "^1.2.19"
44
+ "yup": "^0.32.9"
46
45
  },
47
46
  "resolutions": {
48
47
  "react-scripts/workbox-webpack-plugin/workbox-build/@surma/rollup-plugin-off-main-thread/ejs": "3.1.6"
@@ -19,6 +19,12 @@ const CheckAnswer = ({
19
19
  newVal = e.target.value === 'yes' ? e.target.value : 'no';
20
20
  } else {
21
21
  newVal = '';
22
+
23
+ // To ensure we're not letting invalid values get passed, reset any associated fields:
24
+ const theseFields = AssociatedFields[name];
25
+ theseFields.forEach(fieldName => {
26
+ setValue(fieldName, '');
27
+ });
22
28
  }
23
29
 
24
30
  // Update the checkbox field itself
@@ -87,9 +87,8 @@ const MarketingPreferencesDS = ({
87
87
  </Head>
88
88
 
89
89
  <MaybeDisabled disabled={disableEmailInput}>
90
- {/* DEBUG */}
91
90
  <ShowHideInputWrapper show={showEmailField}>
92
- {emailChoice[0] === 'no' && <NoMessage askingFor="an email" /> }
91
+ {emailChoice[0] === 'no' && <NoMessage askingFor="an email" optInType="email" /> }
93
92
  <TextInput
94
93
  placeholder=""
95
94
  fieldName="mp_email"
@@ -122,7 +121,7 @@ const MarketingPreferencesDS = ({
122
121
  </Head>
123
122
  <MaybeDisabled disabled={disableSMSInput}>
124
123
  <ShowHideInputWrapper show={showSMSField}>
125
- {smsChoice[0] === 'no' && <NoMessage askingFor="a mobile number" />}
124
+ {smsChoice[0] === 'no' && <NoMessage askingFor="a mobile number" optInType="SMS" />}
126
125
  <TextInput
127
126
  placeholder=""
128
127
  fieldName="mp_mobile"
@@ -153,7 +152,7 @@ const MarketingPreferencesDS = ({
153
152
  </Head>
154
153
  <MaybeDisabled disabled={disablePhoneInput}>
155
154
  <ShowHideInputWrapper show={showPhoneField}>
156
- {phoneChoice[0] === 'no' ? <NoMessage askingFor="a phone number" /> : ''}
155
+ {phoneChoice[0] === 'no' ? <NoMessage askingFor="a phone number" optInType="phone" /> : ''}
157
156
  <TextInput
158
157
  placeholder=""
159
158
  fieldName="mp_phone"
@@ -184,7 +183,7 @@ const MarketingPreferencesDS = ({
184
183
  </Head>
185
184
  <MaybeDisabled disabled={disablePostInput}>
186
185
  <ShowHideInputWrapper show={showPostFields}>
187
- {postChoice[0] === 'no' ? <NoMessage askingFor="an address" /> : ''}
186
+ {postChoice[0] === 'no' ? <NoMessage askingFor="an address" optInType="postal" /> : ''}
188
187
  <TextInput
189
188
  placeholder=""
190
189
  fieldName="mp_address1"
@@ -1,5 +1,4 @@
1
1
  import * as yup from 'yup';
2
- import 'yup-phone';
3
2
  import { merge } from 'lodash';
4
3
 
5
4
  const setInitialValues = overrideValues => {
@@ -65,6 +64,8 @@ const buildValidationSchema = overrideOptions => {
65
64
  // Override with any custom options supplied
66
65
  const mpValidationOptions = merge(defaultOptions, overrideOptions);
67
66
 
67
+ const phoneRegex = /^(((((\+44)|(0044))\s?\d{4}|\(?0\d{4}\)?)\s?\d{3}\s?\d{3})|((((\+44)|(0044))\s?\d{3}|\(?0\d{3}\)?)\s?\d{3}\s?\d{4})|((((\+44)|(0044))\s?\d{2}|\(?0\d{2}\)?)\s?\d{4}\s?\d{4}))(\s?\\#(\d{4}|\d{3}))?$/;
68
+
68
69
  const mpValidationSchema = yup.object({
69
70
  mp_email: yup.string()
70
71
  .when('mp_permissionEmail', {
@@ -77,14 +78,16 @@ const buildValidationSchema = overrideOptions => {
77
78
  .when('mp_permissionSMS', {
78
79
  is: val => (!(mpValidationOptions.mp_permissionSMS.disableOption)
79
80
  && mpValidationOptions.mp_permissionSMS[val]),
80
- then: yup.string().required('Please enter your mobile number').phone('GB', false, 'Please enter a valid mobile number')
81
+ then: yup.string().required('Please enter your mobile number')
82
+ .matches(phoneRegex, 'Please enter a valid UK mobile number')
81
83
  }),
82
84
 
83
85
  mp_phone: yup.string()
84
86
  .when('mp_permissionPhone', {
85
87
  is: val => (!(mpValidationOptions.mp_permissionPhone.disableOption)
86
88
  && mpValidationOptions.mp_permissionPhone[val]),
87
- then: yup.string().required('Please enter your phone number').phone('GB', false, 'Please enter a valid phone number')
89
+ then: yup.string().required('Please enter your phone number')
90
+ .matches(phoneRegex, 'Please enter a valid UK phone number')
88
91
  }),
89
92
 
90
93
  mp_address1: yup.string()
@@ -1,17 +1,27 @@
1
1
  import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
+ import styled, { css } from 'styled-components';
3
4
  import Text from '../../Atoms/Text/Text';
4
5
 
5
- const NoMessage = ({ askingFor }) => {
6
- const message = `Please provide ${askingFor} so we can remove it from our database, otherwise untick this option.`;
6
+ const NoMessageWrapper = styled.div`${({ theme }) => css`
7
+ background-color: ${theme.color('red')};
8
+ padding: 15px;
9
+ margin-bottom: 15px;
10
+ `}`;
11
+
12
+ const NoMessage = ({ askingFor, optInType }) => {
13
+ const message = `This will remove the supplied ${askingFor} from any *previous* ${optInType} opt-in from our database; otherwise, you can leave this unchecked.`;
7
14
 
8
15
  return (
9
- <Text tag="p" size="s" color="grey_dark">{message}</Text>
16
+ <NoMessageWrapper>
17
+ <Text tag="p" size="s" color="white">{message}</Text>
18
+ </NoMessageWrapper>
10
19
  );
11
20
  };
12
21
 
13
22
  NoMessage.propTypes = {
14
- askingFor: PropTypes.string.isRequired
23
+ askingFor: PropTypes.string.isRequired,
24
+ optInType: PropTypes.string.isRequired
15
25
  };
16
26
 
17
27
  export default NoMessage;