@stokr/components-library 2.3.41-beta.22 → 2.3.41-beta.24

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.
@@ -36,7 +36,7 @@ exports.Title = Title;
36
36
  var Items = _styledComponents.default.ul.withConfig({
37
37
  displayName: "FooterMenustyles__Items",
38
38
  componentId: "sc-40ddqf-4"
39
- })(["display:flex;flex-wrap:wrap;justify-content:center;list-style:none;padding:0 24px;padding-bottom:24px;@media screen and (min-width:768px){justify-content:flex-start;}@media screen and (min-width:992px){display:block;flex-wrap:unset;justify-content:unset;padding:0;margin-top:22px;margin:0 -8px;width:224px;", "}@media screen and (max-width:992px){padding-top:15px;padding-left:0;padding-bottom:0;}"], function (props) {
39
+ })(["display:flex;list-style:none;padding:0 24px;padding-bottom:24px;@media screen and (min-width:768px){justify-content:flex-start;}@media screen and (min-width:992px){display:block;padding:0;margin-top:22px;margin:0 -8px;width:224px;", "}@media screen and (max-width:992px){padding-top:15px;padding-left:0;padding-bottom:0;}"], function (props) {
40
40
  return props.social && "\n margin-top: 14px;\n ";
41
41
  });
42
42
  exports.Items = Items;
@@ -97,15 +97,9 @@ var ForgotPasswordModal = /*#__PURE__*/function (_PureComponent) {
97
97
  var values = _ref.values,
98
98
  errors = _ref.errors,
99
99
  touched = _ref.touched,
100
- handleBlur = _ref.handleBlur,
101
- setFieldValue = _ref.setFieldValue,
102
- setFieldTouched = _ref.setFieldTouched;
103
- var onChangeWithTouch = function onChangeWithTouch(e) {
104
- var field = e.target;
105
- setFieldValue(field.name, field.value, false);
106
- setFieldTouched(field.name);
107
- };
108
- var submitDisabled = !touched.email || !!errors.email || isActionLoading === 'forgot';
100
+ handleChange = _ref.handleChange,
101
+ handleBlur = _ref.handleBlur;
102
+ var submitDisabled = !values.email || !!errors.email || isActionLoading === 'forgot';
109
103
  return /*#__PURE__*/_react.default.createElement(_Form.default, null, /*#__PURE__*/_react.default.createElement(_ComponentWrapper.default, {
110
104
  noPadding: true
111
105
  }, /*#__PURE__*/_react.default.createElement(_Form.FormField, null, /*#__PURE__*/_react.default.createElement(_Input.default, {
@@ -114,10 +108,12 @@ var ForgotPasswordModal = /*#__PURE__*/function (_PureComponent) {
114
108
  type: "email",
115
109
  label: "Your email",
116
110
  value: values.email,
117
- onChange: onChangeWithTouch,
118
- onBlur: handleBlur,
119
111
  error: !!errors.email,
120
- touched: !!touched.email
112
+ touched: !!touched.email,
113
+ onChange: handleChange,
114
+ onBlur: handleBlur,
115
+ validateOnChange: true,
116
+ validateOnBlur: true
121
117
  }), /*#__PURE__*/_react.default.createElement(_Form.FormError, {
122
118
  show: errors.email && touched.email
123
119
  }, errors.email))), /*#__PURE__*/_react.default.createElement(_ComponentWrapper.default, {
@@ -133,14 +129,7 @@ var ForgotPasswordModal = /*#__PURE__*/function (_PureComponent) {
133
129
  }, /*#__PURE__*/_react.default.createElement(_Form.FormError, {
134
130
  show: popupError.popup === 'forgot'
135
131
  }, popupError.message)));
136
- }) :
137
- /*#__PURE__*/
138
- // <ComponentWrapper paddingVeticalHalf noPaddingHorizontal>
139
- // <FormError show={popupSuccess.popup === 'forgot'}>
140
- // {popupSuccess.message}
141
- // </FormError>
142
- // </ComponentWrapper>
143
- _react.default.createElement(_Text.default, null, /*#__PURE__*/_react.default.createElement("br", null), /*#__PURE__*/_react.default.createElement("br", null), /*#__PURE__*/_react.default.createElement("p", null, popupSuccess.message))))));
132
+ }) : /*#__PURE__*/_react.default.createElement(_Text.default, null, /*#__PURE__*/_react.default.createElement("br", null), /*#__PURE__*/_react.default.createElement("br", null), /*#__PURE__*/_react.default.createElement("p", null, popupSuccess.message))))));
144
133
  }
145
134
  }]);
146
135
  return ForgotPasswordModal;
@@ -31,6 +31,29 @@ var _default = {
31
31
  type: 'function',
32
32
  action: 'onModalSwitch',
33
33
  required: true
34
+ },
35
+ isActionLoading: {
36
+ control: {
37
+ type: 'select',
38
+ options: [false, 'forgot']
39
+ },
40
+ description: 'Loading state for the form submission'
41
+ },
42
+ background: {
43
+ control: 'text',
44
+ description: 'Background style for the modal'
45
+ },
46
+ isResettingExpiredToken: {
47
+ control: 'boolean',
48
+ description: 'Changes modal content for expired token reset'
49
+ },
50
+ popupError: {
51
+ control: 'object',
52
+ description: 'Error object to display form errors'
53
+ },
54
+ popupSuccess: {
55
+ control: 'object',
56
+ description: 'Success object to display success messages'
34
57
  }
35
58
  }
36
59
  };
@@ -41,6 +64,10 @@ var Template = function Template(args) {
41
64
  var ForgotPasswordModalOverview = Template.bind({});
42
65
  exports.ForgotPasswordModalOverview = ForgotPasswordModalOverview;
43
66
  ForgotPasswordModalOverview.args = {
67
+ isModalOpen: true,
44
68
  popupError: {},
45
- popupSuccess: {}
69
+ popupSuccess: {},
70
+ isActionLoading: false,
71
+ background: '',
72
+ isResettingExpiredToken: false
46
73
  };
@@ -51,20 +51,29 @@ var Input = function Input(props) {
51
51
  (0, _react.useEffect)(function () {
52
52
  if (value && !labelUp) setLabelUp(true);
53
53
  }, [value, labelUp]);
54
- var onFocus = function onFocus(e, field) {
55
- var onFocus = props.onFocus;
56
- onFocus && onFocus(e, field);
57
- checkLabel(true);
58
- };
59
54
  var onBlur = function onBlur(e, field) {
60
55
  var onBlur = props.onBlur;
56
+
57
+ // formik handler MUST be called before our logic !
61
58
  onBlur && onBlur(e, field);
59
+
60
+ // our logic follows
62
61
  checkLabel(false);
63
62
  };
63
+ var onFocus = function onFocus(e, field) {
64
+ var onFocus = props.onFocus;
65
+
66
+ // formik handler MUST be called before our logic !
67
+ onFocus && onFocus(e, field);
68
+
69
+ // our logic follows
70
+ checkLabel(true);
71
+ };
64
72
  var onChange = function onChange(e, field) {
65
73
  var onChange = props.onChange;
66
- onChange && onChange(e, field);
74
+ onChange && onChange(e, field); // formik handler
67
75
  };
76
+
68
77
  var checkLabel = function checkLabel(focus) {
69
78
  setHasFocus(focus);
70
79
  setLabelUp(focus || !!value);
@@ -10,7 +10,6 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
10
10
  var _reactRouterDom = require("react-router-dom");
11
11
  var _formik = require("formik");
12
12
  var Yup = _interopRequireWildcard(require("yup"));
13
- var _formikPersist = require("formik-persist");
14
13
  var _Modal = require("../Modal/Modal");
15
14
  var _Form = _interopRequireWildcard(require("../Form/Form"));
16
15
  var _Text = _interopRequireDefault(require("../Text/Text.styles"));
@@ -34,20 +33,20 @@ var LoginModal = function LoginModal(props) {
34
33
  var _React$useState = _react.default.useState(),
35
34
  _React$useState2 = _slicedToArray(_React$useState, 2),
36
35
  email = _React$useState2[0],
37
- setemail = _React$useState2[1];
36
+ setEmail = _React$useState2[1];
38
37
  var location = (0, _reactRouterDom.useLocation)();
39
- var emailSetRef = _react.default.useRef(false);
40
38
  _react.default.useEffect(function () {
41
39
  //the URL will look like this: /login?email=some.email@email.com
42
40
  var search = location.search;
43
41
  var query = new URLSearchParams(search);
44
42
  var email = query.get('email');
45
43
  if (email) {
46
- setemail(email);
44
+ setEmail(email);
47
45
  }
48
46
  }, []);
49
47
  var validationSchema = Yup.object().shape({
50
- email: Yup.string().matches(_globalVariables.emailRegex, "Oops, that's not a valid address").required('Oops, this cant be blank')
48
+ email: Yup.string().matches(_globalVariables.emailRegex, "Oops, that's not a valid address").required("Oops, this can't be blank"),
49
+ password: Yup.string().min(6, 'Password must be at least 6 characters').required('Password is required')
51
50
  });
52
51
  var popupError = props.popupError,
53
52
  isModalOpen = props.isModalOpen,
@@ -77,9 +76,9 @@ var LoginModal = function LoginModal(props) {
77
76
  initialValues: {
78
77
  email: email || '',
79
78
  password: ''
80
- }
81
- // initialTouched={{ email: false, password: false }}
82
- ,
79
+ },
80
+ validateOnChange: true,
81
+ validateOnBlur: true,
83
82
  validationSchema: validationSchema,
84
83
  onSubmit: function onSubmit(values) {
85
84
  onFormSend(values);
@@ -89,26 +88,8 @@ var LoginModal = function LoginModal(props) {
89
88
  errors = _ref.errors,
90
89
  touched = _ref.touched,
91
90
  handleChange = _ref.handleChange,
92
- handleBlur = _ref.handleBlur,
93
- setFieldValue = _ref.setFieldValue,
94
- setFieldTouched = _ref.setFieldTouched,
95
- setErrors = _ref.setErrors;
96
- var onChangeWithTouch = function onChangeWithTouch(e) {
97
- var field = e.target;
98
- setFieldValue(field.name, field.value, false);
99
- setFieldTouched(field.name);
100
- };
101
- if (email && values.email !== email && !emailSetRef.current) {
102
- setFieldValue('email', email);
103
- emailSetRef.current = true;
104
- }
105
-
106
- //hack to avoid error when autofill from browser
107
- if (values.password && errors.password && values.email && !errors.email) {
108
- setErrors({});
109
- setFieldValue('password', values.password, false);
110
- }
111
- var submitDisabled = !touched.email || !touched.password || !!errors.email || !!errors.password || isActionLoading === 'login';
91
+ handleBlur = _ref.handleBlur;
92
+ var submitDisabled = !values.email || !values.password || !!errors.email || !!errors.password || isActionLoading === 'login';
112
93
  return /*#__PURE__*/_react.default.createElement(_Form.default, null, /*#__PURE__*/_react.default.createElement(_ComponentWrapper.default, {
113
94
  noPadding: true
114
95
  }, /*#__PURE__*/_react.default.createElement(_Form.FormField, null, /*#__PURE__*/_react.default.createElement(_Input.default, {
@@ -117,7 +98,7 @@ var LoginModal = function LoginModal(props) {
117
98
  type: "email",
118
99
  label: "Your email",
119
100
  value: values.email,
120
- onChange: onChangeWithTouch,
101
+ onChange: handleChange,
121
102
  onBlur: handleBlur,
122
103
  error: !!errors.email,
123
104
  touched: !!touched.email
@@ -132,7 +113,7 @@ var LoginModal = function LoginModal(props) {
132
113
  type: "password",
133
114
  label: "Password",
134
115
  value: values.password,
135
- onChange: onChangeWithTouch,
116
+ onChange: handleChange,
136
117
  onBlur: handleBlur,
137
118
  error: !!errors.password,
138
119
  touched: !!touched.password
@@ -13,37 +13,35 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
13
13
  var _default = {
14
14
  title: 'Components Library/LoginModal',
15
15
  component: _LoginModal.default,
16
+ parameters: {
17
+ layout: 'fullscreen'
18
+ },
16
19
  argTypes: {
17
20
  popupError: {
18
- type: 'object',
19
- defaultValue: {
20
- message: null,
21
- popup: null
22
- },
23
- required: true
21
+ control: 'object'
24
22
  },
25
23
  isActionLoading: {
26
- type: 'boolean',
27
- defaultValue: false
24
+ control: {
25
+ type: 'select'
26
+ },
27
+ options: [false, 'login']
28
28
  },
29
29
  isModalOpen: {
30
- type: 'boolean',
31
- defaultValue: true
30
+ control: 'boolean'
31
+ },
32
+ background: {
33
+ control: 'text'
32
34
  },
33
35
  onFormSend: {
34
- type: 'function',
35
36
  action: 'onFormSend'
36
37
  },
37
38
  onModalSwitch: {
38
- type: 'function',
39
39
  action: 'onModalSwitch'
40
40
  },
41
41
  onForgotPassword: {
42
- type: 'function',
43
42
  action: 'onForgotPassword'
44
43
  },
45
44
  onModalClose: {
46
- type: 'function',
47
45
  action: 'onModalClose'
48
46
  }
49
47
  }
@@ -55,6 +53,7 @@ var Template = function Template(args) {
55
53
  var LoginModalOpen = Template.bind({});
56
54
  exports.LoginModalOpen = LoginModalOpen;
57
55
  LoginModalOpen.args = {
56
+ isModalOpen: true,
58
57
  popupError: {
59
58
  message: null,
60
59
  popup: null
@@ -74,5 +73,6 @@ LoginModalOpen.args = {
74
73
  },
75
74
  onForgotPassword: function onForgotPassword(data) {
76
75
  console.log('forgot password');
77
- }
76
+ },
77
+ isActionLoading: false
78
78
  };
@@ -211,7 +211,7 @@ var RegisterModal = function RegisterModal(props) {
211
211
  handleChange(e);
212
212
  }
213
213
  };
214
- var submitDisabled = !!errors.email || !!errors.terms || values.password.length <= 5 || isActionLoading === 'signUp' || popupError.popup === 'register';
214
+ var submitDisabled = !values.email || !!errors.email || !!errors.terms || values.password.length <= 5 || isActionLoading === 'signUp' || popupError.popup === 'register';
215
215
  return /*#__PURE__*/_react.default.createElement(_Form.default, null, /*#__PURE__*/_react.default.createElement(_ComponentWrapper.default, {
216
216
  noPadding: true
217
217
  }, /*#__PURE__*/_react.default.createElement(_Form.FormField, null, /*#__PURE__*/_react.default.createElement(_Input.default, {
@@ -243,16 +243,9 @@ var RegisterModal = function RegisterModal(props) {
243
243
  error: !!errors.password,
244
244
  touched: !!touched.password,
245
245
  info: "For a stronger password, try a mix of lowercase, capitals, numbers and special characters."
246
- // showStrength
247
246
  }), /*#__PURE__*/_react.default.createElement(_Form.FormError, {
248
247
  show: errors.password && touched.password
249
- }, errors.password), /*#__PURE__*/_react.default.createElement(_Form.FormError
250
- // show={
251
- // !errors.password &&
252
- // touched.password &&
253
- // passwordStrengthMeter(values.password) !== 5
254
- // }
255
- , {
248
+ }, errors.password), /*#__PURE__*/_react.default.createElement(_Form.FormError, {
256
249
  show: !errors.password && touched.password && values.password.length <= 5
257
250
  }, "The password must be at least 6 characters long"))), /*#__PURE__*/_react.default.createElement(_ComponentWrapper.default, {
258
251
  noPaddingBottom: true,
@@ -100,6 +100,8 @@ var RenderErrorModal = function RenderErrorModal(props) {
100
100
  email: userEmail || ''
101
101
  },
102
102
  validationSchema: validationSchema,
103
+ validateOnBlur: true,
104
+ validateOnChange: true,
103
105
  onSubmit: function onSubmit(values) {
104
106
  startCooldown();
105
107
  onResend(values);
@@ -109,14 +111,8 @@ var RenderErrorModal = function RenderErrorModal(props) {
109
111
  errors = _ref2.errors,
110
112
  touched = _ref2.touched,
111
113
  handleBlur = _ref2.handleBlur,
112
- setFieldValue = _ref2.setFieldValue,
113
- setFieldTouched = _ref2.setFieldTouched;
114
- var onChangeWithTouch = function onChangeWithTouch(e) {
115
- var field = e.target;
116
- setFieldValue(field.name, field.value, false);
117
- setFieldTouched(field.name);
118
- };
119
- var submitDisabled = !touched.email || !!errors.email || isDisabled || isActionLoading === 'resend';
114
+ handleChange = _ref2.handleChange;
115
+ var submitDisabled = !values.email || !!errors.email || isDisabled || isActionLoading === 'resend';
120
116
  return /*#__PURE__*/_react.default.createElement(_Form2.default, null, /*#__PURE__*/_react.default.createElement(_ComponentWrapper.default, {
121
117
  noPadding: true
122
118
  }, /*#__PURE__*/_react.default.createElement(_Form.FormField, null, /*#__PURE__*/_react.default.createElement(_Input.default, {
@@ -125,7 +121,7 @@ var RenderErrorModal = function RenderErrorModal(props) {
125
121
  type: "email",
126
122
  label: "Your email",
127
123
  value: values.email,
128
- onChange: onChangeWithTouch,
124
+ onChange: handleChange,
129
125
  onBlur: handleBlur,
130
126
  error: !!errors.email,
131
127
  touched: !!touched.email
@@ -135,9 +131,7 @@ var RenderErrorModal = function RenderErrorModal(props) {
135
131
  noPaddingBottom: true,
136
132
  noPaddingHorizontal: true
137
133
  }, /*#__PURE__*/_react.default.createElement(_Button.default, {
138
- type: "submit"
139
- //fluid
140
- ,
134
+ type: "submit",
141
135
  disabled: submitDisabled
142
136
  }, isActionLoading === 'resend' ? 'Resending email' : 'Resend email')), /*#__PURE__*/_react.default.createElement(_ComponentWrapper.default, {
143
137
  paddingVeticalHalf: true,
@@ -699,6 +699,11 @@ var HeaderHoClass = /*#__PURE__*/function (_Component) {
699
699
  popupError: this.state.popupError,
700
700
  isModalOpen: isModalOpen.resetPassword,
701
701
  onModalClose: function onModalClose() {
702
+ // clean up URL params
703
+ var url = new URL(window.location);
704
+ url.searchParams.delete('oobCode');
705
+ url.searchParams.delete('mode');
706
+ window.history.replaceState({}, '', url.toString());
702
707
  _this2.setOpenModalStatus('resetPassword', false);
703
708
  _this2.clearPopupError();
704
709
  _this2.setIsActionLoading(undefined);
@@ -743,7 +748,7 @@ var HeaderHoClass = /*#__PURE__*/function (_Component) {
743
748
  };
744
749
  }(),
745
750
  onLoad: /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee7() {
746
- var location, query, oobCode;
751
+ var location, query, oobCode, url;
747
752
  return _regeneratorRuntime().wrap(function _callee7$(_context7) {
748
753
  while (1) switch (_context7.prev = _context7.next) {
749
754
  case 0:
@@ -773,11 +778,17 @@ var HeaderHoClass = /*#__PURE__*/function (_Component) {
773
778
  });
774
779
  });
775
780
 
781
+ // before switching to Forgot Password modal, we need to clean up
782
+ // the URL parameters that keep the reset password modal open.
783
+ url = new URL(window.location);
784
+ url.searchParams.delete('oobCode');
785
+ url.searchParams.delete('mode');
786
+ window.history.replaceState({}, '', url.toString());
787
+
776
788
  // we use a special version of Forgot Password modal
777
789
  // adjusted to handle and resend expired tokens.
778
790
  // isResettingExpiredToken makes it adjust.
779
791
  _this2.switchOpenModal('resetPassword', 'forgot');
780
- _this2.setPopupError('forgot', 'This password reset link has expired or is invalid. Please request a new one.');
781
792
  } else {
782
793
  _this2.setPopupError('resetPassword', 'Something went wrong with the password reset link. Please try again.');
783
794
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stokr/components-library",
3
- "version": "2.3.41-beta.22",
3
+ "version": "2.3.41-beta.24",
4
4
  "description": "STOKR - Components Library",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",