@stokr/components-library 2.3.41-beta.10 → 2.3.41-beta.12

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.
@@ -58,6 +58,18 @@ var ResetPasswordModal = function ResetPasswordModal(_ref) {
58
58
  _useState4 = _slicedToArray(_useState3, 2),
59
59
  isCheckingToken = _useState4[0],
60
60
  setIsCheckingToken = _useState4[1];
61
+ var _useState5 = (0, _react.useState)(false),
62
+ _useState6 = _slicedToArray(_useState5, 2),
63
+ isSubmitting = _useState6[0],
64
+ setIsSubmitting = _useState6[1];
65
+ var _useState7 = (0, _react.useState)(false),
66
+ _useState8 = _slicedToArray(_useState7, 2),
67
+ activationSuccess = _useState8[0],
68
+ setActivationSuccess = _useState8[1];
69
+ var _useState9 = (0, _react.useState)(false),
70
+ _useState10 = _slicedToArray(_useState9, 2),
71
+ passwordResetSuccess = _useState10[0],
72
+ setPasswordResetSuccess = _useState10[1];
61
73
  var location = (0, _reactRouterDom.useLocation)();
62
74
  var initialValues = {
63
75
  password: '',
@@ -75,6 +87,18 @@ var ResetPasswordModal = function ResetPasswordModal(_ref) {
75
87
  var emailValidationSchema = Yup.object().shape({
76
88
  email: Yup.string().required("Oops, this can't be blank").matches(/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/, 'Please enter a valid email address')
77
89
  });
90
+
91
+ // Close modal after successful reset
92
+ (0, _react.useEffect)(function () {
93
+ if (passwordResetSuccess) {
94
+ var timer = setTimeout(function () {
95
+ onModalClose();
96
+ }, 1500);
97
+ return function () {
98
+ return clearTimeout(timer);
99
+ };
100
+ }
101
+ }, [passwordResetSuccess, onModalClose]);
78
102
  var checkTokenExpiration = /*#__PURE__*/function () {
79
103
  var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
80
104
  var search, query, oobCode, result;
@@ -129,28 +153,58 @@ var ResetPasswordModal = function ResetPasswordModal(_ref) {
129
153
  };
130
154
  }();
131
155
  var handleResendActivationMail = /*#__PURE__*/function () {
132
- var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(values) {
133
- var response;
156
+ var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(values, formikActions) {
157
+ var response, urlObj, params, newOobCode, currentUrl;
134
158
  return _regeneratorRuntime().wrap(function _callee2$(_context2) {
135
159
  while (1) switch (_context2.prev = _context2.next) {
136
160
  case 0:
137
161
  _context2.prev = 0;
138
- _context2.next = 3;
162
+ setIsSubmitting(true);
163
+ _context2.next = 4;
139
164
  return _Auth.default.resendActivationEmail(values.email);
140
- case 3:
165
+ case 4:
141
166
  response = _context2.sent;
167
+ // new oobCode is in response URL
168
+ if (response) {
169
+ urlObj = new URL(response);
170
+ params = new URLSearchParams(urlObj.search);
171
+ newOobCode = params.get('oobCode');
172
+ if (newOobCode) {
173
+ // update the URL with the new oobCode without reloading the page
174
+ currentUrl = new URL(window.location.href);
175
+ currentUrl.searchParams.set('oobCode', newOobCode);
176
+ window.history.replaceState({}, '', currentUrl.toString());
177
+
178
+ // reset states to show the password reset form
179
+ setIsTokenExpired(false);
180
+ setActivationSuccess(true);
181
+
182
+ // small delay for UI sakes
183
+ setTimeout(function () {
184
+ setIsSubmitting(false);
185
+ }, 1000);
186
+ } else {
187
+ console.error('New oobCode not found in response');
188
+ setIsSubmitting(false);
189
+ }
190
+ } else {
191
+ console.error('Unexpected response format', response);
192
+ setIsSubmitting(false);
193
+ }
142
194
  return _context2.abrupt("return", response);
143
- case 7:
144
- _context2.prev = 7;
195
+ case 9:
196
+ _context2.prev = 9;
145
197
  _context2.t0 = _context2["catch"](0);
146
198
  console.error('There was an error while resending the activation email.', _context2.t0);
147
- case 10:
199
+ setIsSubmitting(false);
200
+ formikActions.setSubmitting(false);
201
+ case 14:
148
202
  case "end":
149
203
  return _context2.stop();
150
204
  }
151
- }, _callee2, null, [[0, 7]]);
205
+ }, _callee2, null, [[0, 9]]);
152
206
  }));
153
- return function handleResendActivationMail(_x) {
207
+ return function handleResendActivationMail(_x, _x2) {
154
208
  return _ref3.apply(this, arguments);
155
209
  };
156
210
  }();
@@ -175,8 +229,8 @@ var ResetPasswordModal = function ResetPasswordModal(_ref) {
175
229
  email: ''
176
230
  },
177
231
  validationSchema: emailValidationSchema,
178
- onSubmit: function onSubmit(values) {
179
- handleResendActivationMail(values);
232
+ onSubmit: function onSubmit(values, formikActions) {
233
+ handleResendActivationMail(values, formikActions);
180
234
  }
181
235
  }, function (_ref4) {
182
236
  var values = _ref4.values,
@@ -184,7 +238,8 @@ var ResetPasswordModal = function ResetPasswordModal(_ref) {
184
238
  touched = _ref4.touched,
185
239
  handleBlur = _ref4.handleBlur,
186
240
  setFieldValue = _ref4.setFieldValue,
187
- setFieldTouched = _ref4.setFieldTouched;
241
+ setFieldTouched = _ref4.setFieldTouched,
242
+ isSubmitting = _ref4.isSubmitting;
188
243
  var onChangeWithTouch = function onChangeWithTouch(e) {
189
244
  var field = e.target;
190
245
  setFieldValue(field.name, field.value, false);
@@ -210,8 +265,9 @@ var ResetPasswordModal = function ResetPasswordModal(_ref) {
210
265
  noPaddingHorizontal: true
211
266
  }, /*#__PURE__*/_react.default.createElement(_Button.default, {
212
267
  type: "submit",
213
- fluid: true
214
- }, isActionLoading === 'resetPassword' ? 'Sending' : 'Resend link')), /*#__PURE__*/_react.default.createElement(_ComponentWrapper.default, {
268
+ fluid: true,
269
+ disabled: isSubmitting || isActionLoading === 'resetPassword'
270
+ }, isSubmitting || isActionLoading === 'resetPassword' ? 'Sending' : 'Resend link')), /*#__PURE__*/_react.default.createElement(_ComponentWrapper.default, {
215
271
  paddingVeticalHalf: true,
216
272
  noPaddingHorizontal: true
217
273
  }, /*#__PURE__*/_react.default.createElement(_Form.FormError, {
@@ -227,14 +283,33 @@ var ResetPasswordModal = function ResetPasswordModal(_ref) {
227
283
  part: 16
228
284
  }, /*#__PURE__*/_react.default.createElement(_Modal.ModalInner, null, /*#__PURE__*/_react.default.createElement(_Text.default, null, /*#__PURE__*/_react.default.createElement("p", null, "Verifying your reset link..."))))));
229
285
  };
286
+ var renderSuccessNotification = function renderSuccessNotification() {
287
+ return /*#__PURE__*/_react.default.createElement(_Modal.Modal, {
288
+ isOpen: true,
289
+ onClose: onModalClose
290
+ }, /*#__PURE__*/_react.default.createElement(_Grid.Row, null, /*#__PURE__*/_react.default.createElement(_Grid.Column, {
291
+ part: 16
292
+ }, /*#__PURE__*/_react.default.createElement(_Modal.ModalInner, null, /*#__PURE__*/_react.default.createElement(_Text.default, null, /*#__PURE__*/_react.default.createElement("h3", null, "NEW LINK GENERATED"), /*#__PURE__*/_react.default.createElement("p", null, "Your new activation link has been processed successfully. You can now reset your password."))))));
293
+ };
230
294
  (0, _react.useEffect)(function () {
231
295
  console.log('Component mounted, checking token');
232
296
  checkTokenExpiration();
233
297
  }, []);
298
+
299
+ // show the success message briefly then reset to show the password form
300
+ (0, _react.useEffect)(function () {
301
+ if (activationSuccess) {
302
+ setTimeout(function () {
303
+ setActivationSuccess(false);
304
+ }, 2000); // Show success message for 2 seconds
305
+ }
306
+ }, [activationSuccess]);
234
307
  console.log('Render state:', {
235
308
  isTokenExpired: isTokenExpired,
236
309
  isCheckingToken: isCheckingToken,
237
- isModalOpen: isModalOpen
310
+ isModalOpen: isModalOpen,
311
+ activationSuccess: activationSuccess,
312
+ passwordResetSuccess: passwordResetSuccess
238
313
  });
239
314
  if (!isModalOpen) {
240
315
  return null;
@@ -242,6 +317,9 @@ var ResetPasswordModal = function ResetPasswordModal(_ref) {
242
317
  if (isCheckingToken) {
243
318
  return renderLoadingContent();
244
319
  }
320
+ if (activationSuccess) {
321
+ return renderSuccessNotification();
322
+ }
245
323
  if (isTokenExpired) {
246
324
  return renderExpiredTokenContent();
247
325
  }
@@ -260,16 +338,30 @@ var ResetPasswordModal = function ResetPasswordModal(_ref) {
260
338
  onClick: onModalSwitch
261
339
  }, "Log in")))), /*#__PURE__*/_react.default.createElement(_Grid.Column, {
262
340
  part: 8
263
- }, /*#__PURE__*/_react.default.createElement(_Modal.ModalInner, null, /*#__PURE__*/_react.default.createElement(_formik.Formik, {
341
+ }, /*#__PURE__*/_react.default.createElement(_Modal.ModalInner, null, passwordResetSuccess ? /*#__PURE__*/_react.default.createElement(_Text.default, null, /*#__PURE__*/_react.default.createElement("h3", null, "SUCCESS!"), /*#__PURE__*/_react.default.createElement("p", null, "Your password has been reset successfully."), /*#__PURE__*/_react.default.createElement("p", null, "Redirecting to login...")) : /*#__PURE__*/_react.default.createElement(_formik.Formik, {
264
342
  initialValues: initialValues,
265
343
  validationSchema: validationSchema,
266
344
  onSubmit: function onSubmit(values) {
267
345
  var search = location.search;
268
346
  var query = new URLSearchParams(search);
269
347
  var oobCode = query.get('oobCode');
270
- onFormSend(_objectSpread(_objectSpread({}, values), {}, {
348
+ var promise = onFormSend(_objectSpread(_objectSpread({}, values), {}, {
271
349
  oobCode: oobCode
272
350
  }));
351
+
352
+ // If onFormSend returns a promise, handle it
353
+ if (promise && typeof promise.then === 'function') {
354
+ promise.then(function (response) {
355
+ // Assuming response.success or some equivalent would indicate success
356
+ // Adjust according to your actual API response
357
+ setPasswordResetSuccess(true);
358
+ }).catch(function (err) {
359
+ console.error('Error during password reset:', err);
360
+ });
361
+ } else {
362
+ // If onFormSend doesn't return a promise, assume it was successful
363
+ setPasswordResetSuccess(true);
364
+ }
273
365
  }
274
366
  }, function (_ref5) {
275
367
  var values = _ref5.values,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stokr/components-library",
3
- "version": "2.3.41-beta.10",
3
+ "version": "2.3.41-beta.12",
4
4
  "description": "STOKR - Components Library",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",