tf-checkout-react 1.0.100 → 1.0.104

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.
Files changed (84) hide show
  1. package/dist/components/billing-info-container/index.d.ts +3 -1
  2. package/dist/components/common/RedirectModal.d.ts +7 -0
  3. package/dist/components/common/SnackbarAlert.d.ts +13 -0
  4. package/dist/components/confirmationContainer/index.d.ts +2 -1
  5. package/dist/components/ticketsContainer/index.d.ts +2 -1
  6. package/dist/env.d.ts +1 -0
  7. package/dist/images/done.svg +3 -3
  8. package/dist/index.d.ts +1 -0
  9. package/dist/tf-checkout-react.cjs.development.js +317 -136
  10. package/dist/tf-checkout-react.cjs.development.js.map +1 -1
  11. package/dist/tf-checkout-react.cjs.production.min.js +1 -1
  12. package/dist/tf-checkout-react.cjs.production.min.js.map +1 -1
  13. package/dist/tf-checkout-react.esm.js +318 -138
  14. package/dist/tf-checkout-react.esm.js.map +1 -1
  15. package/dist/tf-checkout-styles.css +1 -1
  16. package/package.json +89 -89
  17. package/src/.DS_Store +0 -0
  18. package/src/.d.ts +2 -2
  19. package/src/api/index.ts +293 -278
  20. package/src/assets/images/done.svg +3 -3
  21. package/src/components/.DS_Store +0 -0
  22. package/src/components/billing-info-container/index.tsx +796 -777
  23. package/src/components/billing-info-container/style.css +105 -105
  24. package/src/components/billing-info-container/utils.ts +224 -224
  25. package/src/components/common/CheckboxField.tsx +41 -41
  26. package/src/components/common/CustomField.tsx +84 -84
  27. package/src/components/common/FormikPhoneNumberField.tsx +51 -51
  28. package/src/components/common/Loader.tsx +9 -9
  29. package/src/components/common/RadioField.tsx +35 -35
  30. package/src/components/common/RedirectModal.tsx +43 -0
  31. package/src/components/common/SelectField.tsx +80 -80
  32. package/src/components/common/SnackbarAlert.tsx +54 -0
  33. package/src/components/common/index.tsx +4 -4
  34. package/src/components/confirmModal/index.tsx +51 -51
  35. package/src/components/confirmModal/style.css +21 -21
  36. package/src/components/confirmationContainer/config.ts +72 -72
  37. package/src/components/confirmationContainer/index.tsx +197 -194
  38. package/src/components/confirmationContainer/social-buttons.tsx +94 -94
  39. package/src/components/confirmationContainer/style.css +202 -202
  40. package/src/components/countdown/index.tsx +89 -89
  41. package/src/components/countdown/style.css +9 -9
  42. package/src/components/index.ts +7 -7
  43. package/src/components/loginModal/index.tsx +209 -209
  44. package/src/components/loginModal/style.css +71 -71
  45. package/src/components/myTicketsContainer/index.tsx +196 -137
  46. package/src/components/myTicketsContainer/row.tsx +41 -41
  47. package/src/components/myTicketsContainer/style.css +39 -39
  48. package/src/components/myTicketsContainer/tableConfig.tsx +34 -34
  49. package/src/components/orderDetailsContainer/index.tsx +249 -249
  50. package/src/components/orderDetailsContainer/style.css +72 -72
  51. package/src/components/orderDetailsContainer/ticketsTable.tsx +124 -124
  52. package/src/components/paymentContainer/index.tsx +284 -284
  53. package/src/components/registerModal/index.tsx +190 -190
  54. package/src/components/stripePayment/index.tsx +253 -253
  55. package/src/components/stripePayment/style.css +59 -59
  56. package/src/components/ticketResale/index.tsx +56 -56
  57. package/src/components/ticketResaleModal/index.tsx +210 -210
  58. package/src/components/ticketResaleModal/style.css +28 -28
  59. package/src/components/ticketsContainer/PromoCodeSection.tsx +99 -99
  60. package/src/components/ticketsContainer/ReferralLogic.tsx +33 -33
  61. package/src/components/ticketsContainer/TicketRow.tsx +83 -83
  62. package/src/components/ticketsContainer/TicketsSection.tsx +81 -81
  63. package/src/components/ticketsContainer/index.tsx +427 -409
  64. package/src/components/ticketsContainer/style.css +181 -181
  65. package/src/components/ticketsContainer/utils.ts +11 -11
  66. package/src/components/timerWidget/index.tsx +70 -70
  67. package/src/components/timerWidget/style.css +26 -26
  68. package/src/components/waitingList/index.tsx +178 -178
  69. package/src/components/waitingList/style.css +26 -26
  70. package/src/env.ts +20 -19
  71. package/src/index.ts +14 -13
  72. package/src/normalizers/index.ts +45 -45
  73. package/src/types/billing-info-data.ts +37 -37
  74. package/src/types/payment-field.ts +7 -7
  75. package/src/types/referral-promotion.ts +7 -7
  76. package/src/utils/createCheckoutDataBodyWithDefaultHolder.ts +59 -59
  77. package/src/utils/downloadPDF.tsx +30 -30
  78. package/src/utils/formikErrorFocus.ts +24 -24
  79. package/src/utils/getImage.ts +14 -14
  80. package/src/utils/getQueryVariable.ts +13 -13
  81. package/src/utils/index.ts +5 -5
  82. package/src/utils/setConfigs.ts +26 -26
  83. package/src/utils/showZero.tsx +10 -10
  84. package/src/validators/index.ts +20 -20
@@ -32,12 +32,12 @@ var CircularProgress = _interopDefault(require('@mui/material/CircularProgress')
32
32
  var Select = _interopDefault(require('@mui/material/Select'));
33
33
  var styles$1 = require('@mui/material/styles');
34
34
  var Backdrop = _interopDefault(require('@mui/material/Backdrop'));
35
+ var Countdown$1 = _interopDefault(require('react-countdown'));
36
+ var _isNumber = _interopDefault(require('lodash/isNumber'));
35
37
  var Container = _interopDefault(require('@mui/material/Container'));
36
38
  var Alert = _interopDefault(require('@mui/material/Alert'));
37
39
  var reactStripeJs = require('@stripe/react-stripe-js');
38
40
  var stripeJs = require('@stripe/stripe-js');
39
- var Countdown$1 = _interopDefault(require('react-countdown'));
40
- var _isNumber = _interopDefault(require('lodash/isNumber'));
41
41
  var reactShare = require('react-share');
42
42
  var _some = _interopDefault(require('lodash/some'));
43
43
  var _every = _interopDefault(require('lodash/every'));
@@ -1121,6 +1121,13 @@ var publicRequest = /*#__PURE__*/axios.create({
1121
1121
  headers: ttfHeaders
1122
1122
  });
1123
1123
  publicRequest.interceptors.response.use(function (response) {
1124
+ var authGuestToken = _get(response, 'headers.authorization-guest');
1125
+
1126
+ if (isWindowDefined && authGuestToken) {
1127
+ window.localStorage.setItem('auth_guest_token', authGuestToken);
1128
+ publicRequest.setGuestToken(authGuestToken);
1129
+ }
1130
+
1124
1131
  return response;
1125
1132
  }, function (error) {
1126
1133
  var _error$response;
@@ -1129,7 +1136,6 @@ publicRequest.interceptors.response.use(function (response) {
1129
1136
  if (isWindowDefined) {
1130
1137
  var _error$response2, _error$response2$data;
1131
1138
 
1132
- window.localStorage.removeItem('auth_guest_token');
1133
1139
  window.localStorage.removeItem('user_data');
1134
1140
  window.localStorage.removeItem('access_token');
1135
1141
  var errorType = error == null ? void 0 : (_error$response2 = error.response) == null ? void 0 : (_error$response2$data = _error$response2.data) == null ? void 0 : _error$response2$data.error;
@@ -1140,6 +1146,13 @@ publicRequest.interceptors.response.use(function (response) {
1140
1146
  }
1141
1147
  }
1142
1148
 
1149
+ var authGuestToken = _get(error, 'response.headers.authorization-guest');
1150
+
1151
+ if (isWindowDefined && authGuestToken) {
1152
+ window.localStorage.setItem('auth_guest_token', authGuestToken);
1153
+ publicRequest.setGuestToken(authGuestToken);
1154
+ }
1155
+
1143
1156
  return Promise.reject(error);
1144
1157
  });
1145
1158
  publicRequest.interceptors.request.use(function (config) {
@@ -2167,6 +2180,99 @@ var SelectField = function SelectField(_ref) {
2167
2180
  }, error) : null);
2168
2181
  };
2169
2182
 
2183
+ var showZero = function showZero(value) {
2184
+ if (value === void 0) {
2185
+ value = 0;
2186
+ }
2187
+
2188
+ var intNumber = Number(value);
2189
+ return _isNumber(intNumber) ? intNumber >= 0 && intNumber < 10 ? '0' + intNumber : intNumber : null;
2190
+ };
2191
+
2192
+ var TimerWidget = function TimerWidget(_ref) {
2193
+ var expires_at = _ref.expires_at,
2194
+ buyLoading = _ref.buyLoading,
2195
+ _ref$onCountdownFinis = _ref.onCountdownFinish,
2196
+ onCountdownFinish = _ref$onCountdownFinis === void 0 ? function () {} : _ref$onCountdownFinis;
2197
+
2198
+ var _useState = React.useState(true),
2199
+ showTimer = _useState[0],
2200
+ setShowTimer = _useState[1];
2201
+
2202
+ var handleCountdownFinish = function handleCountdownFinish() {
2203
+ setShowTimer(false);
2204
+
2205
+ if (!buyLoading) {
2206
+ onCountdownFinish();
2207
+ }
2208
+ };
2209
+
2210
+ var _renderer = function renderer(_ref2) {
2211
+ var minutes = _ref2.minutes,
2212
+ seconds = _ref2.seconds,
2213
+ completed = _ref2.completed,
2214
+ handleCountdownFinish = _ref2.handleCountdownFinish;
2215
+
2216
+ if (completed) {
2217
+ handleCountdownFinish();
2218
+ return null;
2219
+ }
2220
+
2221
+ return React__default.createElement("span", null, showZero(minutes), ":", showZero(seconds));
2222
+ };
2223
+
2224
+ return showTimer && !!expires_at ? React__default.createElement("div", {
2225
+ className: "timer"
2226
+ }, React__default.createElement("div", {
2227
+ className: "toast-message"
2228
+ }, React__default.createElement("p", null, "Please complete your purchase before the timer reaches zero."), React__default.createElement("p", {
2229
+ className: "countdown"
2230
+ }, React__default.createElement(Countdown$1, {
2231
+ date: Date.now() + expires_at * 1000,
2232
+ renderer: function renderer(props) {
2233
+ return _renderer(_extends({}, props, {
2234
+ handleCountdownFinish: handleCountdownFinish
2235
+ }));
2236
+ }
2237
+ })))) : null;
2238
+ };
2239
+
2240
+ var SnackbarAlert = function SnackbarAlert(_ref) {
2241
+ var isOpen = _ref.isOpen,
2242
+ message = _ref.message,
2243
+ type = _ref.type,
2244
+ position = _ref.position,
2245
+ _ref$autoHideDuration = _ref.autoHideDuration,
2246
+ autoHideDuration = _ref$autoHideDuration === void 0 ? 3000 : _ref$autoHideDuration,
2247
+ variant = _ref.variant,
2248
+ onClose = _ref.onClose;
2249
+ return React__default.createElement("div", {
2250
+ className: "snackbar-alert-container"
2251
+ }, React__default.createElement(material.Snackbar, {
2252
+ autoHideDuration: autoHideDuration,
2253
+ open: isOpen,
2254
+ anchorOrigin: position || {
2255
+ vertical: 'top',
2256
+ horizontal: 'center'
2257
+ },
2258
+ onClose: onClose,
2259
+ classes: {
2260
+ root: 'snackbar-alert-snackbar-root'
2261
+ }
2262
+ }, React__default.createElement(material.Alert, {
2263
+ severity: type,
2264
+ onClose: onClose,
2265
+ variant: variant || 'filled',
2266
+ classes: {
2267
+ icon: 'snackbar-alert-icon',
2268
+ root: 'snackbar-alert-alert-root',
2269
+ action: 'snackbar-alert-action',
2270
+ message: 'snackbar-alert-message',
2271
+ filled: 'snackbar-alert-filled'
2272
+ }
2273
+ }, message)));
2274
+ };
2275
+
2170
2276
  var LogicRunner = function LogicRunner(_ref) {
2171
2277
  var values = _ref.values,
2172
2278
  setStates = _ref.setStates,
@@ -2329,7 +2435,11 @@ var BillingInfoContainer = function BillingInfoContainer(_ref3) {
2329
2435
  _ref3$skipPage = _ref3.skipPage,
2330
2436
  skipPage = _ref3$skipPage === void 0 ? false : _ref3$skipPage,
2331
2437
  _ref3$canSkipHolderNa = _ref3.canSkipHolderNames,
2332
- canSkipHolderNames = _ref3$canSkipHolderNa === void 0 ? false : _ref3$canSkipHolderNa;
2438
+ canSkipHolderNames = _ref3$canSkipHolderNa === void 0 ? false : _ref3$canSkipHolderNa,
2439
+ _ref3$onCountdownFini = _ref3.onCountdownFinish,
2440
+ onCountdownFinish = _ref3$onCountdownFini === void 0 ? function () {} : _ref3$onCountdownFini,
2441
+ _ref3$enableTimer = _ref3.enableTimer,
2442
+ enableTimer = _ref3$enableTimer === void 0 ? false : _ref3$enableTimer;
2333
2443
 
2334
2444
  var themeMui = styles$1.createTheme(themeOptions);
2335
2445
  var isWindowDefined = typeof window !== 'undefined';
@@ -2418,6 +2528,8 @@ var BillingInfoContainer = function BillingInfoContainer(_ref3) {
2418
2528
 
2419
2529
  var hideTtfOptIn = _get(cartInfoData, 'hide_ttf_opt_in', true);
2420
2530
 
2531
+ var expirationTime = _get(cartInfoData, 'expires_at');
2532
+
2421
2533
  var flagRequirePhone = getQueryVariable('phone_required') === 'true'; // Get prevProps
2422
2534
 
2423
2535
  var prevData = React.useRef(data);
@@ -2692,7 +2804,10 @@ var BillingInfoContainer = function BillingInfoContainer(_ref3) {
2692
2804
 
2693
2805
  return React__default.createElement(styles$1.ThemeProvider, {
2694
2806
  theme: themeMui
2695
- }, React__default.createElement(formik.Formik, {
2807
+ }, expirationTime && enableTimer && React__default.createElement(TimerWidget, {
2808
+ expires_at: expirationTime,
2809
+ onCountdownFinish: onCountdownFinish
2810
+ }), React__default.createElement(formik.Formik, {
2696
2811
  initialValues: getInitialValues(dataWithUniqueIds, _extends({}, initialValues, {
2697
2812
  country: _get(userData, 'country', '') || '1',
2698
2813
  state: _get(userData, 'state', '') || '1',
@@ -2789,6 +2904,10 @@ var BillingInfoContainer = function BillingInfoContainer(_ref3) {
2789
2904
  setShowModalLogin(true);
2790
2905
  }
2791
2906
 
2907
+ if (_includes(_error, 'The cart is expired') && !hideErrorsAlertSection) {
2908
+ setError(_error);
2909
+ }
2910
+
2792
2911
  onRegisterError(_context6.t0, values.email);
2793
2912
  }
2794
2913
 
@@ -2831,11 +2950,7 @@ var BillingInfoContainer = function BillingInfoContainer(_ref3) {
2831
2950
  }
2832
2951
  }
2833
2952
 
2834
- if ((_e$response3 = _context6.t1.response) != null && _e$response3.data.message) {
2835
- if (typeof document !== undefined) {
2836
- document.body.scrollTop = document.documentElement.scrollTop = 0;
2837
- }
2838
-
2953
+ if ((_e$response3 = _context6.t1.response) != null && _e$response3.data.message && !hideErrorsAlertSection) {
2839
2954
  setError(_get(_context6.t1, 'response.data.message'));
2840
2955
  }
2841
2956
 
@@ -2869,11 +2984,15 @@ var BillingInfoContainer = function BillingInfoContainer(_ref3) {
2869
2984
  onGetStatesError: onGetStatesError
2870
2985
  }), React__default.createElement("div", {
2871
2986
  className: "billing-info-container " + theme
2872
- }, error && !hideErrorsAlertSection && React__default.createElement(material.Alert, {
2873
- severity: "error",
2874
- onClose: onErrorClose,
2875
- variant: "filled"
2876
- }, error), !isLoggedIn && React__default.createElement("div", {
2987
+ }, React__default.createElement(SnackbarAlert, {
2988
+ type: "error",
2989
+ isOpen: !!error,
2990
+ message: error || '',
2991
+ onClose: function onClose() {
2992
+ setError(null);
2993
+ onErrorClose();
2994
+ }
2995
+ }), !isLoggedIn && React__default.createElement("div", {
2877
2996
  className: "account-actions-block"
2878
2997
  }, React__default.createElement("div", null, accountInfoTitle), React__default.createElement("div", null, "Login & skip ahead:"), React__default.createElement("div", {
2879
2998
  className: "login-block"
@@ -3279,63 +3398,6 @@ var CheckoutForm = function CheckoutForm(_ref) {
3279
3398
  }) : "Pay " + getCurrencySymbolByCurrency(currency) + total))));
3280
3399
  };
3281
3400
 
3282
- var showZero = function showZero(value) {
3283
- if (value === void 0) {
3284
- value = 0;
3285
- }
3286
-
3287
- var intNumber = Number(value);
3288
- return _isNumber(intNumber) ? intNumber >= 0 && intNumber < 10 ? '0' + intNumber : intNumber : null;
3289
- };
3290
-
3291
- var TimerWidget = function TimerWidget(_ref) {
3292
- var expires_at = _ref.expires_at,
3293
- buyLoading = _ref.buyLoading,
3294
- _ref$onCountdownFinis = _ref.onCountdownFinish,
3295
- onCountdownFinish = _ref$onCountdownFinis === void 0 ? function () {} : _ref$onCountdownFinis;
3296
-
3297
- var _useState = React.useState(true),
3298
- showTimer = _useState[0],
3299
- setShowTimer = _useState[1];
3300
-
3301
- var handleCountdownFinish = function handleCountdownFinish() {
3302
- setShowTimer(false);
3303
-
3304
- if (!buyLoading) {
3305
- onCountdownFinish();
3306
- }
3307
- };
3308
-
3309
- var _renderer = function renderer(_ref2) {
3310
- var minutes = _ref2.minutes,
3311
- seconds = _ref2.seconds,
3312
- completed = _ref2.completed,
3313
- handleCountdownFinish = _ref2.handleCountdownFinish;
3314
-
3315
- if (completed) {
3316
- handleCountdownFinish();
3317
- return null;
3318
- }
3319
-
3320
- return React__default.createElement("span", null, showZero(minutes), ":", showZero(seconds));
3321
- };
3322
-
3323
- return showTimer && !!expires_at ? React__default.createElement("div", {
3324
- className: "timer"
3325
- }, React__default.createElement("div", {
3326
- className: "toast-message"
3327
- }, React__default.createElement("p", null, "Please complete your purchase before the timer reaches zero."), React__default.createElement("p", {
3328
- className: "countdown"
3329
- }, React__default.createElement(Countdown$1, {
3330
- date: Date.now() + expires_at * 1000,
3331
- renderer: function renderer(props) {
3332
- return _renderer(_extends({}, props, {
3333
- handleCountdownFinish: handleCountdownFinish
3334
- }));
3335
- }
3336
- })))) : null;
3337
- };
3338
-
3339
3401
  var publishableKey = CONFIGS.STRIPE_PUBLISHABLE_KEY || '';
3340
3402
 
3341
3403
  var getStripePromise = function getStripePromise(reviewData) {
@@ -3837,7 +3899,9 @@ var ConfirmationContainer = function ConfirmationContainer(_ref) {
3837
3899
  onGetConfirmationDataSuccess = _ref$onGetConfirmatio === void 0 ? function () {} : _ref$onGetConfirmatio,
3838
3900
  _ref$onGetConfirmatio2 = _ref.onGetConfirmationDataError,
3839
3901
  onGetConfirmationDataError = _ref$onGetConfirmatio2 === void 0 ? function () {} : _ref$onGetConfirmatio2,
3840
- orderHash = _ref.orderHash;
3902
+ orderHash = _ref.orderHash,
3903
+ _ref$onLinkCopied = _ref.onLinkCopied,
3904
+ onLinkCopied = _ref$onLinkCopied === void 0 ? function () {} : _ref$onLinkCopied;
3841
3905
  var inputRef = React.useRef(null);
3842
3906
 
3843
3907
  var _useState = React.useState(null),
@@ -3975,7 +4039,8 @@ var ConfirmationContainer = function ConfirmationContainer(_ref) {
3975
4039
  }), React__default.createElement("div", {
3976
4040
  className: "share-by-link-copy-icon",
3977
4041
  onClick: function onClick() {
3978
- return navigator.clipboard.writeText(_get(inputRef, 'current.value'));
4042
+ navigator.clipboard.writeText(_get(inputRef, 'current.value'));
4043
+ onLinkCopied();
3979
4044
  }
3980
4045
  }, React__default.createElement("img", {
3981
4046
  src: "https://img.icons8.com/office/50/000000/copy.png",
@@ -4521,7 +4586,9 @@ var TicketsContainer = function TicketsContainer(_ref) {
4521
4586
  _ref$hideSessionButto = _ref.hideSessionButtons,
4522
4587
  hideSessionButtons = _ref$hideSessionButto === void 0 ? false : _ref$hideSessionButto,
4523
4588
  _ref$hideWaitingList = _ref.hideWaitingList,
4524
- hideWaitingList = _ref$hideWaitingList === void 0 ? false : _ref$hideWaitingList;
4589
+ hideWaitingList = _ref$hideWaitingList === void 0 ? false : _ref$hideWaitingList,
4590
+ _ref$isButtonScrollab = _ref.isButtonScrollable,
4591
+ isButtonScrollable = _ref$isButtonScrollab === void 0 ? false : _ref$isButtonScrollab;
4525
4592
 
4526
4593
  var _useState = React.useState({}),
4527
4594
  selectedTickets = _useState[0],
@@ -4533,50 +4600,51 @@ var TicketsContainer = function TicketsContainer(_ref) {
4533
4600
  isLogged = _useState2[0],
4534
4601
  setIsLogged = _useState2[1];
4535
4602
 
4536
- var _React$useState = React__default.useState(false),
4537
- showLoginModal = _React$useState[0],
4538
- setShowLoginModal = _React$useState[1];
4539
-
4540
- var _useState3 = React.useState([]),
4541
- tickets = _useState3[0],
4542
- setTickets = _useState3[1];
4603
+ var _useState3 = React.useState(false),
4604
+ showLoginModal = _useState3[0],
4605
+ setShowLoginModal = _useState3[1];
4543
4606
 
4544
- var _useState4 = React.useState(null),
4545
- event = _useState4[0],
4546
- setEvent = _useState4[1];
4607
+ var _useState4 = React.useState([]),
4608
+ tickets = _useState4[0],
4609
+ setTickets = _useState4[1];
4547
4610
 
4548
- var _useState5 = React.useState(false),
4549
- showWaitingList = _useState5[0],
4550
- setShowWaitingList = _useState5[1];
4611
+ var _useState5 = React.useState(null),
4612
+ event = _useState5[0],
4613
+ setEvent = _useState5[1];
4551
4614
 
4552
4615
  var _useState6 = React.useState(false),
4553
- isLoading = _useState6[0],
4554
- setIsLoading = _useState6[1];
4616
+ showWaitingList = _useState6[0],
4617
+ setShowWaitingList = _useState6[1];
4555
4618
 
4556
- var _useState7 = React.useState(false),
4557
- isPromoLoading = _useState7[0],
4558
- setIsPromoLoading = _useState7[1];
4619
+ var _useState7 = React.useState(true),
4620
+ isLoading = _useState7[0],
4621
+ setIsLoading = _useState7[1];
4559
4622
 
4560
4623
  var _useState8 = React.useState(false),
4561
- handleBookIsLoading = _useState8[0],
4562
- setHandleBookIsLoading = _useState8[1];
4624
+ isPromoLoading = _useState8[0],
4625
+ setIsPromoLoading = _useState8[1];
4563
4626
 
4564
- var _useState9 = React.useState(''),
4565
- promoCode = _useState9[0],
4566
- setPromoCode = _useState9[1];
4627
+ var _useState9 = React.useState(false),
4628
+ handleBookIsLoading = _useState9[0],
4629
+ setHandleBookIsLoading = _useState9[1];
4567
4630
 
4568
- var _useState10 = React.useState(getQueryVariable('r') || queryPromoCode),
4569
- promoCodeUpdated = _useState10[0],
4570
- setPromoCodeUpdated = _useState10[1];
4631
+ var _useState10 = React.useState(''),
4632
+ promoCode = _useState10[0],
4633
+ setPromoCode = _useState10[1];
4571
4634
 
4572
- var _useState11 = React.useState(false),
4573
- showPromoInput = _useState11[0],
4574
- setShowPromoInput = _useState11[1];
4635
+ var _useState11 = React.useState(getQueryVariable('r') || queryPromoCode),
4636
+ promoCodeUpdated = _useState11[0],
4637
+ setPromoCodeUpdated = _useState11[1];
4575
4638
 
4576
4639
  var _useState12 = React.useState(false),
4577
- promoCodeIsApplied = _useState12[0],
4578
- setPromoCodeIsApplied = _useState12[1];
4640
+ showPromoInput = _useState12[0],
4641
+ setShowPromoInput = _useState12[1];
4642
+
4643
+ var _useState13 = React.useState(false),
4644
+ promoCodeIsApplied = _useState13[0],
4645
+ setPromoCodeIsApplied = _useState13[1];
4579
4646
 
4647
+ var ticketsContainerRef = React.useRef(null);
4580
4648
  React.useEffect(function () {
4581
4649
  if (typeof window !== 'undefined') {
4582
4650
  var access_token = window.localStorage.getItem('access_token');
@@ -4607,6 +4675,19 @@ var TicketsContainer = function TicketsContainer(_ref) {
4607
4675
  }
4608
4676
  };
4609
4677
 
4678
+ React.useEffect(function () {
4679
+ try {
4680
+ if (typeof window !== 'undefined') {
4681
+ var userData = window.localStorage.getItem('user_data') ? JSON.parse(window.localStorage.getItem('user_data') || '{}') : {};
4682
+
4683
+ if (userData.country === '') {
4684
+ handleLogout();
4685
+ window.open("https://www.ticketfairy.com/account/change_information?need_country=true");
4686
+ }
4687
+ }
4688
+ } catch (e) {}
4689
+ }, []);
4690
+
4610
4691
  var handleExternalLogin = function handleExternalLogin() {
4611
4692
  setIsLogged(true);
4612
4693
  };
@@ -4651,7 +4732,6 @@ var TicketsContainer = function TicketsContainer(_ref) {
4651
4732
  eventResponse = _context2.sent;
4652
4733
 
4653
4734
  if (response.data.success) {
4654
- setCustomHeader(response);
4655
4735
  attributes = _get(response, 'data.data.attributes');
4656
4736
  setPromoCodeIsApplied(attributes.ValidPromoCode);
4657
4737
  setTickets(_get(attributes, 'tickets'));
@@ -4747,11 +4827,10 @@ var TicketsContainer = function TicketsContainer(_ref) {
4747
4827
  result = _context.sent;
4748
4828
 
4749
4829
  if (!(result.status === 200)) {
4750
- _context.next = 27;
4830
+ _context.next = 26;
4751
4831
  break;
4752
4832
  }
4753
4833
 
4754
- setCustomHeader(result);
4755
4834
  skipBillingPage = (_result$data$data$att = result == null ? void 0 : (_result$data = result.data) == null ? void 0 : (_result$data$data = _result$data.data) == null ? void 0 : (_result$data$data$att2 = _result$data$data.attributes) == null ? void 0 : _result$data$data$att2.skip_billing_page) != null ? _result$data$data$att : false;
4756
4835
  nameIsRequired = (_result$data$data$att3 = result == null ? void 0 : (_result$data2 = result.data) == null ? void 0 : (_result$data2$data = _result$data2.data) == null ? void 0 : (_result$data2$data$at = _result$data2$data.attributes) == null ? void 0 : _result$data2$data$at.names_required) != null ? _result$data$data$att3 : false;
4757
4836
  ageIsRequired = (_result$data$data$att4 = result == null ? void 0 : (_result$data3 = result.data) == null ? void 0 : (_result$data3$data = _result$data3.data) == null ? void 0 : (_result$data3$data$at = _result$data3$data.attributes) == null ? void 0 : _result$data3$data$at.age_required) != null ? _result$data$data$att4 : false;
@@ -4759,7 +4838,7 @@ var TicketsContainer = function TicketsContainer(_ref) {
4759
4838
  hash = '';
4760
4839
 
4761
4840
  if (!skipBillingPage) {
4762
- _context.next = 26;
4841
+ _context.next = 25;
4763
4842
  break;
4764
4843
  }
4765
4844
 
@@ -4768,14 +4847,14 @@ var TicketsContainer = function TicketsContainer(_ref) {
4768
4847
  userData = _isWindowDefined && window.localStorage.getItem('user_data') ? JSON.parse(window.localStorage.getItem('user_data') || '') : {};
4769
4848
  access_token = _isWindowDefined && window.localStorage.getItem('access_token') ? window.localStorage.getItem('access_token') || '' : '';
4770
4849
  checkoutBody = createCheckoutDataBodyWithDefaultHolder(ticketQuantity, userData);
4771
- _context.next = 24;
4850
+ _context.next = 23;
4772
4851
  return postOnCheckout(checkoutBody, access_token);
4773
4852
 
4774
- case 24:
4853
+ case 23:
4775
4854
  checkoutResult = _context.sent;
4776
4855
  hash = _get(checkoutResult, 'data.data.attributes.hash');
4777
4856
 
4778
- case 26:
4857
+ case 25:
4779
4858
  onAddToCartSuccess({
4780
4859
  skip_billing_page: skipBillingPage,
4781
4860
  names_required: nameIsRequired,
@@ -4785,29 +4864,29 @@ var TicketsContainer = function TicketsContainer(_ref) {
4785
4864
  hash: hash
4786
4865
  });
4787
4866
 
4788
- case 27:
4789
- _context.next = 32;
4867
+ case 26:
4868
+ _context.next = 31;
4790
4869
  break;
4791
4870
 
4792
- case 29:
4793
- _context.prev = 29;
4871
+ case 28:
4872
+ _context.prev = 28;
4794
4873
  _context.t0 = _context["catch"](6);
4795
4874
 
4796
4875
  if (axios.isAxiosError(_context.t0)) {
4797
4876
  onAddToCartError(_context.t0);
4798
4877
  }
4799
4878
 
4800
- case 32:
4801
- _context.prev = 32;
4879
+ case 31:
4880
+ _context.prev = 31;
4802
4881
  setHandleBookIsLoading(false);
4803
- return _context.finish(32);
4882
+ return _context.finish(31);
4804
4883
 
4805
- case 35:
4884
+ case 34:
4806
4885
  case "end":
4807
4886
  return _context.stop();
4808
4887
  }
4809
4888
  }
4810
- }, _callee, null, [[6, 29, 32, 35]]);
4889
+ }, _callee, null, [[6, 28, 31, 34]]);
4811
4890
  }));
4812
4891
 
4813
4892
  return function handleBook() {
@@ -4840,14 +4919,32 @@ var TicketsContainer = function TicketsContainer(_ref) {
4840
4919
  isWindowDefined && window.document.removeEventListener('custom-login', handleExternalLogin);
4841
4920
  };
4842
4921
  }, []);
4922
+
4923
+ var handleGetTicketClick = function handleGetTicketClick() {
4924
+ if (!handleBookIsLoading && !_isEmpty(selectedTickets) && Object.values(selectedTickets)[0] > 0) {
4925
+ handleBook();
4926
+ } else {
4927
+ if (isButtonScrollable && ticketsContainerRef && ticketsContainerRef.current) {
4928
+ ticketsContainerRef.current.scrollIntoView({
4929
+ behavior: 'smooth',
4930
+ block: 'center',
4931
+ inline: 'nearest'
4932
+ });
4933
+ }
4934
+ }
4935
+ };
4936
+
4937
+ var bookButtonIsDisabled = handleBookIsLoading || _isEmpty(selectedTickets) || Object.values(selectedTickets)[0] === 0;
4843
4938
  return React__default.createElement(privateTheming.ThemeProvider, {
4844
4939
  theme: themeMui
4845
- }, React__default.createElement(ReferralLogic, {
4940
+ }, !isLoading && React__default.createElement(ReferralLogic, {
4846
4941
  eventId: eventId
4847
4942
  }), React__default.createElement("div", {
4848
4943
  className: "get-tickets-page " + theme,
4849
4944
  style: contentStyle
4850
- }, isLoading ? React__default.createElement(Loader, null) : React__default.createElement("div", null, React__default.createElement(TicketsSection, {
4945
+ }, isLoading ? React__default.createElement(Loader, null) : React__default.createElement("div", {
4946
+ ref: ticketsContainerRef
4947
+ }, React__default.createElement(TicketsSection, {
4851
4948
  ticketsList: tickets,
4852
4949
  selectedTickets: selectedTickets,
4853
4950
  handleTicketSelect: handleTicketSelect,
@@ -4876,8 +4973,8 @@ var TicketsContainer = function TicketsContainer(_ref) {
4876
4973
  isPromoLoading: isPromoLoading
4877
4974
  }), (isTicketOnSale || !(event != null && event.salesEnded)) && React__default.createElement(Button$1, {
4878
4975
  "aria-hidden": true,
4879
- className: "book-button " + (handleBookIsLoading || _isEmpty(selectedTickets) || Object.values(selectedTickets)[0] === 0 ? 'disabled' : ''),
4880
- onClick: !handleBookIsLoading && !_isEmpty(selectedTickets) && Object.values(selectedTickets)[0] > 0 ? handleBook : function () {}
4976
+ className: "book-button \n " + (bookButtonIsDisabled ? 'disabled' : '') + " \n " + (isButtonScrollable ? 'is-scrollable' : '') + "\n ",
4977
+ onClick: handleGetTicketClick
4881
4978
  }, getTicketsLabel || 'GET TICKETS'), isLogged && !hideSessionButtons ? React__default.createElement("div", {
4882
4979
  className: "session-wrapper"
4883
4980
  }, React__default.createElement("span", {
@@ -4987,16 +5084,30 @@ var MyTicketsContainer = function MyTicketsContainer(_ref) {
4987
5084
 
4988
5085
  var _useState4 = React.useState(''),
4989
5086
  filter = _useState4[0],
4990
- setFilter = _useState4[1]; //just once
5087
+ setFilter = _useState4[1];
5088
+
5089
+ var isWindowDefined = typeof window !== 'undefined';
5090
+
5091
+ var _useState5 = React.useState(isWindowDefined ? !!window.localStorage.getItem('access_token') : false),
5092
+ isLogged = _useState5[0],
5093
+ setIsLogged = _useState5[1];
5094
+
5095
+ var _useState6 = React.useState(false),
5096
+ showModalLogin = _useState6[0],
5097
+ setShowModalLogin = _useState6[1];
5098
+
5099
+ var _useState7 = React.useState(false),
5100
+ userExpired = _useState7[0],
5101
+ setUserExpired = _useState7[1]; //just once
4991
5102
 
4992
5103
 
4993
5104
  React.useEffect(function () {
4994
5105
  fetchData(1, limit, filter);
4995
- }, []);
5106
+ }, [isLogged]);
4996
5107
 
4997
5108
  var fetchData = /*#__PURE__*/function () {
4998
5109
  var _ref2 = _asyncToGenerator( /*#__PURE__*/runtime_1.mark(function _callee(page, limit, filter) {
4999
- var response, _data;
5110
+ var response, _data, _error$response;
5000
5111
 
5001
5112
  return runtime_1.wrap(function _callee$(_context) {
5002
5113
  while (1) {
@@ -5013,25 +5124,37 @@ var MyTicketsContainer = function MyTicketsContainer(_ref) {
5013
5124
  _data = _get(response, 'data.data.attributes');
5014
5125
  _data.page -= 1;
5015
5126
  setData(_data);
5016
- _context.next = 14;
5127
+ _context.next = 15;
5017
5128
  break;
5018
5129
 
5019
5130
  case 11:
5020
5131
  _context.prev = 11;
5021
5132
  _context.t0 = _context["catch"](0);
5133
+
5134
+ if (axios.isAxiosError(_context.t0)) {
5135
+ if (((_error$response = _context.t0.response) == null ? void 0 : _error$response.data.error) === 'invalid_token') {
5136
+ if (isWindowDefined) {
5137
+ window.localStorage.removeItem('user_data');
5138
+ window.localStorage.removeItem('access_token');
5139
+ setUserExpired(true);
5140
+ setShowModalLogin(true);
5141
+ }
5142
+ }
5143
+ }
5144
+
5022
5145
  onGetOrdersError(_context.t0);
5023
5146
 
5024
- case 14:
5025
- _context.prev = 14;
5147
+ case 15:
5148
+ _context.prev = 15;
5026
5149
  setLoading(false);
5027
- return _context.finish(14);
5150
+ return _context.finish(15);
5028
5151
 
5029
- case 17:
5152
+ case 18:
5030
5153
  case "end":
5031
5154
  return _context.stop();
5032
5155
  }
5033
5156
  }
5034
- }, _callee, null, [[0, 11, 14, 17]]);
5157
+ }, _callee, null, [[0, 11, 15, 18]]);
5035
5158
  }));
5036
5159
 
5037
5160
  return function fetchData(_x, _x2, _x3) {
@@ -5057,7 +5180,22 @@ var MyTicketsContainer = function MyTicketsContainer(_ref) {
5057
5180
  className: "my-ticket " + theme
5058
5181
  }, loading && React__default.createElement("div", {
5059
5182
  className: "loading"
5060
- }, React__default.createElement(CircularProgress, null)), data && React__default.createElement(React__default.Fragment, null, React__default.createElement(Autocomplete, {
5183
+ }, React__default.createElement(CircularProgress, null)), !isLogged ? React__default.createElement("div", {
5184
+ className: "account-actions-block"
5185
+ }, React__default.createElement("div", {
5186
+ className: "login-block"
5187
+ }, React__default.createElement("button", {
5188
+ className: "login-register-button",
5189
+ type: "button",
5190
+ onClick: function onClick() {
5191
+ setShowModalLogin(true);
5192
+ }
5193
+ }, "Login"), React__default.createElement("div", {
5194
+ className: "logo-image-container"
5195
+ }, React__default.createElement("img", {
5196
+ src: theme === 'dark' ? 'https://www.ticketfairy.com/resources/images/logo-ttf.svg' : 'https://www.ticketfairy.com/resources/images/logo-ttf-black.svg',
5197
+ alt: "nodata"
5198
+ })))) : null, data && React__default.createElement(React__default.Fragment, null, React__default.createElement(Autocomplete, {
5061
5199
  disablePortal: true,
5062
5200
  id: "combo-box-demo",
5063
5201
  getOptionLabel: function getOptionLabel(option) {
@@ -5096,6 +5234,16 @@ var MyTicketsContainer = function MyTicketsContainer(_ref) {
5096
5234
  page: data.page,
5097
5235
  onPageChange: handleChangePage,
5098
5236
  onRowsPerPageChange: handleChangeRowsPerPage
5237
+ })), React__default.createElement(React__default.Fragment, null, showModalLogin && React__default.createElement(LoginModal, {
5238
+ onClose: function onClose() {
5239
+ setShowModalLogin(false);
5240
+ },
5241
+ onLogin: function onLogin() {
5242
+ setShowModalLogin(false);
5243
+ setUserExpired(false);
5244
+ setIsLogged(true);
5245
+ },
5246
+ userExpired: userExpired
5099
5247
  })));
5100
5248
  };
5101
5249
 
@@ -5692,12 +5840,45 @@ var TicketResaleContainer = function TicketResaleContainer(_ref) {
5692
5840
  }, React__default.createElement("h3", null, error)));
5693
5841
  };
5694
5842
 
5843
+ var style$3 = {
5844
+ position: 'absolute',
5845
+ top: '10%',
5846
+ left: '50%',
5847
+ transform: 'translate(-50%, -50%)',
5848
+ minWidth: 480,
5849
+ backgroundColor: '#e3e3e3',
5850
+ border: '1px solid white',
5851
+ outline: 'none',
5852
+ padding: '14px',
5853
+ maxHeight: '85vh',
5854
+ overflow: 'auto'
5855
+ };
5856
+ var RedirectModal = function RedirectModal(_ref) {
5857
+ var _ref$message = _ref.message,
5858
+ message = _ref$message === void 0 ? 'Your cart has expired. Please click on "OK" to return to the ticket selection page.' : _ref$message,
5859
+ _ref$onClickOk = _ref.onClickOk,
5860
+ onClickOk = _ref$onClickOk === void 0 ? function () {} : _ref$onClickOk;
5861
+ return React__default.createElement(Modal, {
5862
+ open: true,
5863
+ "aria-labelledby": "modal-modal-title",
5864
+ "aria-describedby": "modal-modal-description",
5865
+ className: "redirect-modal"
5866
+ }, React__default.createElement(Box, {
5867
+ style: style$3
5868
+ }, React__default.createElement("p", null, message), React__default.createElement("div", {
5869
+ className: "footer"
5870
+ }, React__default.createElement("button", {
5871
+ onClick: onClickOk
5872
+ }, "OK"))));
5873
+ };
5874
+
5695
5875
  exports.BillingInfoContainer = BillingInfoContainer;
5696
5876
  exports.ConfirmationContainer = ConfirmationContainer;
5697
5877
  exports.LoginModal = LoginModal;
5698
5878
  exports.MyTicketsContainer = MyTicketsContainer;
5699
5879
  exports.OrderDetailsContainer = OrderDetailsContainer;
5700
5880
  exports.PaymentContainer = PaymentContainer;
5881
+ exports.RedirectModal = RedirectModal;
5701
5882
  exports.TicketResaleContainer = TicketResaleContainer;
5702
5883
  exports.TicketsContainer = TicketsContainer;
5703
5884
  exports.createFixedFloatNormalizer = createFixedFloatNormalizer;