summit-registration-lite 5.0.45-beta.2 → 5.0.46

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/index.js CHANGED
@@ -11,7 +11,7 @@
11
11
  return /******/ (() => { // webpackBootstrap
12
12
  /******/ var __webpack_modules__ = ({
13
13
 
14
- /***/ 168:
14
+ /***/ 590:
15
15
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
16
16
 
17
17
  "use strict";
@@ -30,9 +30,12 @@ var external_prop_types_default = /*#__PURE__*/__webpack_require__.n(external_pr
30
30
  ;// CONCATENATED MODULE: external "react-otp-input"
31
31
  const external_react_otp_input_namespaceObject = require("react-otp-input");
32
32
  var external_react_otp_input_default = /*#__PURE__*/__webpack_require__.n(external_react_otp_input_namespaceObject);
33
+ ;// CONCATENATED MODULE: external "moment-timezone"
34
+ const external_moment_timezone_namespaceObject = require("moment-timezone");
35
+ var external_moment_timezone_default = /*#__PURE__*/__webpack_require__.n(external_moment_timezone_namespaceObject);
33
36
  ;// CONCATENATED MODULE: ./src/components/login-passwordless/index.module.scss
34
37
  // extracted by mini-css-extract-plugin
35
- /* harmony default export */ const index_module = ({"passwordlessWrapper":"passwordlessWrapper___BRQ_s","codeSent":"codeSent___NzYb_","innerWrapper":"innerWrapper___nRLDi","logo":"logo___qNVrv","logoDark":"logoDark___VVYee","digits":"digits___Vu5iy","codeInput":"codeInput___LnTZe","error":"error___wZflZ","verify":"verify___IBgMl","button":"button___nBhtQ","link":"link___f6fDT","resend":"resend___Nma1U","logoLight":"logoLight___vSbn_"});
38
+ /* harmony default export */ const index_module = ({"passwordlessWrapper":"passwordlessWrapper___BRQ_s","codeSent":"codeSent___NzYb_","innerWrapper":"innerWrapper___nRLDi","logo":"logo___qNVrv","logoDark":"logoDark___VVYee","digits":"digits___Vu5iy","codeInput":"codeInput___LnTZe","error":"error___wZflZ","verify":"verify___IBgMl","button":"button___nBhtQ","link":"link___f6fDT","resend":"resend___Nma1U","disabled":"disabled___fMnzY","logoLight":"logoLight___vSbn_"});
36
39
  // EXTERNAL MODULE: ./src/assets/FNid_WHT_logo_rgb.svg
37
40
  var FNid_WHT_logo_rgb = __webpack_require__(802);
38
41
  var FNid_WHT_logo_rgb_default = /*#__PURE__*/__webpack_require__.n(FNid_WHT_logo_rgb);
@@ -41,6 +44,43 @@ var FNid_BLK_logo_rgb = __webpack_require__(107);
41
44
  var FNid_BLK_logo_rgb_default = /*#__PURE__*/__webpack_require__.n(FNid_BLK_logo_rgb);
42
45
  // EXTERNAL MODULE: ./src/utils/utils.js + 1 modules
43
46
  var utils = __webpack_require__(452);
47
+ // EXTERNAL MODULE: ./src/utils/constants.js
48
+ var constants = __webpack_require__(243);
49
+ ;// CONCATENATED MODULE: ./src/utils/hooks/useCountdown.js
50
+
51
+
52
+ const useCountdown = initialTime => {
53
+ const [countdown, setCountdown] = (0,external_react_.useState)(initialTime);
54
+ const intervalRef = (0,external_react_.useRef)(null);
55
+
56
+ const resetCountdown = newTime => {
57
+ const time = newTime !== undefined ? newTime : initialTime;
58
+ if (intervalRef.current) clearInterval(intervalRef.current);
59
+ setCountdown(time);
60
+
61
+ if (time > 0) {
62
+ intervalRef.current = setInterval(() => {
63
+ setCountdown(prevCountdown => {
64
+ if (prevCountdown <= 1) {
65
+ clearInterval(intervalRef.current);
66
+ return 0;
67
+ }
68
+
69
+ return prevCountdown - 1;
70
+ });
71
+ }, 1000);
72
+ }
73
+ };
74
+
75
+ (0,external_react_.useEffect)(() => {
76
+ // Initialize the countdown when the hook is first used
77
+ resetCountdown(initialTime);
78
+ return () => clearInterval(intervalRef.current);
79
+ }, [initialTime]);
80
+ return [countdown, resetCountdown];
81
+ };
82
+
83
+ /* harmony default export */ const hooks_useCountdown = (useCountdown);
44
84
  ;// CONCATENATED MODULE: ./src/components/login-passwordless/index.js
45
85
  /**
46
86
  * Copyright 2020 OpenStack Foundation
@@ -62,9 +102,13 @@ var utils = __webpack_require__(452);
62
102
 
63
103
 
64
104
 
105
+
106
+
107
+
65
108
  const PasswordlessLoginComponent = ({
66
109
  email,
67
110
  codeLength,
111
+ codeLifeTime,
68
112
  passwordlessLogin,
69
113
  loginWithCode,
70
114
  codeError,
@@ -79,6 +123,13 @@ const PasswordlessLoginComponent = ({
79
123
  const [otpError, setOtpError] = (0,external_react_.useState)(false);
80
124
  const [codeSent, setCodeSent] = (0,external_react_.useState)(false);
81
125
  const [isLoading, setIsLoading] = (0,external_react_.useState)(false);
126
+ const [resendCountdown, resetResendCountdown] = hooks_useCountdown(0);
127
+ const [lifetimeCountdown, resetLifetimeCountdown] = hooks_useCountdown(0);
128
+ (0,external_react_.useEffect)(() => {
129
+ if (codeLifeTime > 0) {
130
+ resetLifetimeCountdown(codeLifeTime);
131
+ }
132
+ }, [codeLifeTime]);
82
133
 
83
134
  const tryPasswordlessLogin = code => {
84
135
  if (code.length === codeLength) {
@@ -94,6 +145,7 @@ const PasswordlessLoginComponent = ({
94
145
  getLoginCode(email, getPasswordlessCode).then(() => {
95
146
  setCodeSent(true);
96
147
  setTimeout(() => setCodeSent(false), 3000);
148
+ resetResendCountdown(constants/* RESEND_TIME */.Jr);
97
149
  }).catch(err => {
98
150
  (0,utils/* handleSentryException */.Gj)(err);
99
151
  });
@@ -104,11 +156,14 @@ const PasswordlessLoginComponent = ({
104
156
  tryPasswordlessLogin(otpCode);
105
157
  };
106
158
 
159
+ const formatDuration = seconds => {
160
+ const duration = external_moment_timezone_default().duration(seconds, 'seconds');
161
+ return external_moment_timezone_default().utc(duration.asMilliseconds()).format('mm:ss');
162
+ };
163
+
107
164
  return /*#__PURE__*/external_react_default().createElement("div", {
108
165
  className: `${index_module.passwordlessWrapper} step-wrapper`
109
- }, /*#__PURE__*/external_react_default().createElement((external_react_default()).Fragment, null, codeSent && /*#__PURE__*/external_react_default().createElement("div", {
110
- className: index_module.codeSent
111
- }, "Code has been resent."), /*#__PURE__*/external_react_default().createElement("div", {
166
+ }, /*#__PURE__*/external_react_default().createElement((external_react_default()).Fragment, null, /*#__PURE__*/external_react_default().createElement("div", {
112
167
  className: `${index_module.innerWrapper}`
113
168
  }, /*#__PURE__*/external_react_default().createElement("img", {
114
169
  src: idpLogoDark || (FNid_BLK_logo_rgb_default()),
@@ -145,7 +200,11 @@ const PasswordlessLoginComponent = ({
145
200
  }))), codeError && /*#__PURE__*/external_react_default().createElement("span", {
146
201
  className: index_module.error,
147
202
  "data-testid": "error"
148
- }, "The code you entered it's incorrect. ", /*#__PURE__*/external_react_default().createElement("br", null), " Please try again."), /*#__PURE__*/external_react_default().createElement("div", {
203
+ }, "The code you entered it's incorrect. ", /*#__PURE__*/external_react_default().createElement("br", null), " Please try again."), codeSent && /*#__PURE__*/external_react_default().createElement("p", {
204
+ className: index_module.codeSent
205
+ }, "Code has been resent."), lifetimeCountdown > 0 && /*#__PURE__*/external_react_default().createElement("p", {
206
+ className: index_module.codeSent
207
+ }, "Code expires in ", formatDuration(lifetimeCountdown), " minutes."), /*#__PURE__*/external_react_default().createElement("div", {
149
208
  className: index_module.verify
150
209
  }, /*#__PURE__*/external_react_default().createElement("button", {
151
210
  className: `${index_module.button} button`,
@@ -158,16 +217,18 @@ const PasswordlessLoginComponent = ({
158
217
  "data-testid": "go-back"
159
218
  }, "try another way")))), /*#__PURE__*/external_react_default().createElement("div", {
160
219
  className: index_module.resend
161
- }, "Didn\u2019t receive it? Check your spam/junk folder, or ", /*#__PURE__*/external_react_default().createElement("span", {
162
- className: index_module.link,
220
+ }, "Didn\u2019t receive it? Check your spam/junk folder, or\xA0", /*#__PURE__*/external_react_default().createElement("button", {
221
+ className: `${index_module.link} ${resendCountdown > 0 ? index_module.disabled : ''}`,
222
+ disabled: resendCountdown > 0,
163
223
  onClick: () => resendCode(),
164
224
  "data-testid": "resend"
165
- }, "resend code"), " now.")));
225
+ }, "resend code ", ' ', " ", resendCountdown > 0 && /*#__PURE__*/external_react_default().createElement("span", null, "(", resendCountdown, ")")), "\xA0now.")));
166
226
  };
167
227
 
168
228
  PasswordlessLoginComponent.propTypes = {
169
229
  email: (external_prop_types_default()).string.isRequired,
170
230
  codeLength: (external_prop_types_default()).number.isRequired,
231
+ codeLifeTime: (external_prop_types_default()).number.isRequired,
171
232
  passwordlessLogin: (external_prop_types_default()).func.isRequired,
172
233
  loginWithCode: (external_prop_types_default()).func,
173
234
  codeError: (external_prop_types_default()).bool,
@@ -487,6 +548,7 @@ const getTicketMaxQuantity = ticket => {
487
548
  /* harmony export */ "G2": () => (/* binding */ ADD_TO_CART),
488
549
  /* harmony export */ "GB": () => (/* binding */ TICKET_TYPE_SUBTYPE_PREPAID),
489
550
  /* harmony export */ "I6": () => (/* binding */ VIEW_ITEM),
551
+ /* harmony export */ "Jr": () => (/* binding */ RESEND_TIME),
490
552
  /* harmony export */ "K8": () => (/* binding */ VirtualAccessLevel),
491
553
  /* harmony export */ "NR": () => (/* binding */ BEGIN_CHECKOUT),
492
554
  /* harmony export */ "QN": () => (/* binding */ DefaultHintColor),
@@ -533,7 +595,8 @@ const ORDER_PAYMENT_METHOD_OFFLINE = 'Offline';
533
595
  const STEP_SELECT_TICKET_TYPE = 0;
534
596
  const STEP_PERSONAL_INFO = 1;
535
597
  const STEP_PAYMENT = 2;
536
- const STEP_COMPLETE = 3; // ANALYTICS
598
+ const STEP_COMPLETE = 3;
599
+ const RESEND_TIME = 60; // ANALYTICS
537
600
 
538
601
  const VIEW_ITEM = 'view_item';
539
602
  const ADD_TO_CART = 'add_to_cart';
@@ -1175,7 +1238,7 @@ const DELETE_RESERVATION_ERROR = 'DELETE_RESERVATION_ERROR';
1175
1238
  const PAY_RESERVATION = 'PAY_RESERVATION';
1176
1239
  const CLEAR_RESERVATION = 'CLEAR_RESERVATION';
1177
1240
  const SET_PASSWORDLESS_LOGIN = 'SET_PASSWORDLESS_LOGIN';
1178
- const SET_PASSWORDLESS_LENGTH = 'SET_PASSWORDLESS_LENGTH';
1241
+ const SET_PASSWORDLESS_SETTINGS = 'SET_PASSWORDLESS_SETTINGS';
1179
1242
  const SET_PASSWORDLESS_ERROR = 'SET_PASSWORDLESS_ERROR';
1180
1243
  const GO_TO_LOGIN = 'GO_TO_LOGIN';
1181
1244
  const GET_MY_INVITATION = 'GET_MY_INVITATION';
@@ -1577,7 +1640,7 @@ const getLoginCode = (email, getPasswordlessCode) => async (dispatch, getState)
1577
1640
  dispatch((0,actions_namespaceObject.createAction)(SET_PASSWORDLESS_LOGIN)(email));
1578
1641
  return new Promise((resolve, reject) => {
1579
1642
  getPasswordlessCode(email).then(res => {
1580
- dispatch((0,actions_namespaceObject.createAction)(SET_PASSWORDLESS_LENGTH)(res.response));
1643
+ dispatch((0,actions_namespaceObject.createAction)(SET_PASSWORDLESS_SETTINGS)(res.response));
1581
1644
  resolve(res);
1582
1645
  }, err => {
1583
1646
  const errorMessage = err.response?.body?.error || err.message;
@@ -1710,6 +1773,7 @@ const DEFAULT_STATE = {
1710
1773
  passwordless: {
1711
1774
  email: null,
1712
1775
  otp_length: 0,
1776
+ otp_lifetime: 0,
1713
1777
  code_sent: false,
1714
1778
  error: false
1715
1779
  },
@@ -1830,19 +1894,22 @@ const RegistrationLiteReducer = (state = DEFAULT_STATE, action) => {
1830
1894
  return reducer_objectSpread(reducer_objectSpread({}, state), {}, {
1831
1895
  passwordless: reducer_objectSpread(reducer_objectSpread({}, state.passwordless), {}, {
1832
1896
  email: payload,
1833
- error: false
1897
+ error: false,
1898
+ otp_lifetime: 0
1834
1899
  })
1835
1900
  });
1836
1901
  }
1837
1902
 
1838
- case SET_PASSWORDLESS_LENGTH:
1903
+ case SET_PASSWORDLESS_SETTINGS:
1839
1904
  {
1840
1905
  const {
1841
- otp_length
1906
+ otp_length,
1907
+ otp_lifetime
1842
1908
  } = payload;
1843
1909
  return reducer_objectSpread(reducer_objectSpread({}, state), {}, {
1844
1910
  passwordless: reducer_objectSpread(reducer_objectSpread({}, state.passwordless), {}, {
1845
1911
  otp_length,
1912
+ otp_lifetime,
1846
1913
  code_sent: true,
1847
1914
  error: false
1848
1915
  })
@@ -3678,8 +3745,8 @@ const PurchaseComplete = _ref2 => {
3678
3745
  };
3679
3746
 
3680
3747
  /* harmony default export */ const purchase_complete = (PurchaseComplete);
3681
- // EXTERNAL MODULE: ./src/components/login-passwordless/index.js + 2 modules
3682
- var login_passwordless = __webpack_require__(168);
3748
+ // EXTERNAL MODULE: ./src/components/login-passwordless/index.js + 4 modules
3749
+ var login_passwordless = __webpack_require__(590);
3683
3750
  ;// CONCATENATED MODULE: ./src/components/ticket-owned/index.module.scss
3684
3751
  // extracted by mini-css-extract-plugin
3685
3752
  /* harmony default export */ const ticket_owned_index_module = ({"ticketOwnedWrapper":"ticketOwnedWrapper___nhkDY","alert":"alert___c49oP"});
@@ -3789,7 +3856,7 @@ const TicketTaxesError = ({
3789
3856
 
3790
3857
  /* harmony default export */ const ticket_taxes_error = (TicketTaxesError);
3791
3858
  ;// CONCATENATED MODULE: ./src/components/registration-lite.js
3792
- const registration_lite_excluded = ["loadSession", "setMarketingSettings", "changeStep", "removeReservedTicket", "reserveTicket", "payTicketWithProvider", "trackEvent", "onPurchaseComplete", "getTicketTypesAndTaxes", "getLoginCode", "passwordlessLogin", "goToLogin", "loginOptions", "allowsNativeAuth", "allowsOtpAuth", "reservation", "checkout", "ticketTypes", "taxTypes", "step", "passwordlessCodeSent", "passwordlessEmail", "passwordlessCode", "getPasswordlessCode", "passwordlessCodeError", "loginWithCode", "goToExtraQuestions", "goToMyOrders", "goToEvent", "profileData", "summitData", "supportEmail", "ticketOwned", "ownedTickets", "widgetLoading", "loading", "inPersonDisclaimer", "userProfile", "handleCompanyError", "stripeOptions", "invitation", "loginInitialEmailInputValue", "getMyInvitation", "showMultipleTicketTexts", "noAllowedTicketsMessage", "ticketTaxesErrorMessage", "authErrorCallback", "clearWidgetState", "requestedTicketTypes", "allowPromoCodes", "showCompanyInput", "companyDDLPlaceholder", "nowUtc", "updateClock", "completedExtraQuestions", "loadProfileData", "closeWidget", "hasVirtualAccessLevel", "hidePostalCode", "idpLogoLight", "idpLogoDark", "idpLogoAlt", "showCompanyInputDefaultOptions", "companyDDLOptions2Show", "promoCode", "hasDiscount", "getTicketDiscount", "removePromoCode", "applyPromoCode", "validatePromoCode"];
3859
+ const registration_lite_excluded = ["loadSession", "setMarketingSettings", "changeStep", "removeReservedTicket", "reserveTicket", "payTicketWithProvider", "trackEvent", "onPurchaseComplete", "getTicketTypesAndTaxes", "getLoginCode", "passwordlessLogin", "goToLogin", "loginOptions", "allowsNativeAuth", "allowsOtpAuth", "reservation", "checkout", "ticketTypes", "taxTypes", "step", "passwordlessCodeSent", "passwordlessEmail", "passwordlessCode", "passwordlessCodeLifeTime", "getPasswordlessCode", "passwordlessCodeError", "loginWithCode", "goToExtraQuestions", "goToMyOrders", "goToEvent", "profileData", "summitData", "supportEmail", "ticketOwned", "ownedTickets", "widgetLoading", "loading", "inPersonDisclaimer", "userProfile", "handleCompanyError", "stripeOptions", "invitation", "loginInitialEmailInputValue", "getMyInvitation", "showMultipleTicketTexts", "noAllowedTicketsMessage", "ticketTaxesErrorMessage", "authErrorCallback", "clearWidgetState", "requestedTicketTypes", "allowPromoCodes", "showCompanyInput", "companyDDLPlaceholder", "nowUtc", "updateClock", "completedExtraQuestions", "loadProfileData", "closeWidget", "hasVirtualAccessLevel", "hidePostalCode", "idpLogoLight", "idpLogoDark", "idpLogoAlt", "showCompanyInputDefaultOptions", "companyDDLOptions2Show", "promoCode", "hasDiscount", "getTicketDiscount", "removePromoCode", "applyPromoCode", "validatePromoCode"];
3793
3860
 
3794
3861
  function registration_lite_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
3795
3862
 
@@ -3878,6 +3945,7 @@ const RegistrationLite = _ref => {
3878
3945
  passwordlessCodeSent,
3879
3946
  passwordlessEmail,
3880
3947
  passwordlessCode,
3948
+ passwordlessCodeLifeTime,
3881
3949
  getPasswordlessCode,
3882
3950
  passwordlessCodeError,
3883
3951
  loginWithCode,
@@ -4119,6 +4187,7 @@ const RegistrationLite = _ref => {
4119
4187
  initialEmailValue: loginInitialEmailInputValue
4120
4188
  }), !profileData && passwordlessCodeSent && /*#__PURE__*/external_react_default().createElement(login_passwordless["default"], {
4121
4189
  codeLength: passwordlessCode,
4190
+ codeLifeTime: passwordlessCodeLifeTime,
4122
4191
  email: passwordlessEmail,
4123
4192
  passwordlessLogin: passwordlessLogin,
4124
4193
  loginWithCode: loginWithCode,
@@ -4142,6 +4211,9 @@ const RegistrationLite = _ref => {
4142
4211
  applyPromoCode: applyPromoCode,
4143
4212
  removePromoCode: () => {
4144
4213
  setFormErrors({});
4214
+ setFormValues(registration_lite_objectSpread(registration_lite_objectSpread({}, formValues), {}, {
4215
+ promoCode: ""
4216
+ }));
4145
4217
  removePromoCode();
4146
4218
  },
4147
4219
  promoCode: promoCode,
@@ -4250,6 +4322,7 @@ const mapStateToProps = ({
4250
4322
  step: registrationLiteState.step,
4251
4323
  passwordlessEmail: registrationLiteState.passwordless.email,
4252
4324
  passwordlessCode: registrationLiteState.passwordless.otp_length,
4325
+ passwordlessCodeLifeTime: registrationLiteState.passwordless.otp_lifetime,
4253
4326
  passwordlessCodeSent: registrationLiteState.passwordless.code_sent,
4254
4327
  passwordlessCodeError: registrationLiteState.passwordless.error,
4255
4328
  nowUtc: registrationLiteState.nowUtc,