tf-checkout-react 1.0.101 → 1.0.102

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 (81) hide show
  1. package/dist/components/billing-info-container/index.d.ts +3 -1
  2. package/dist/components/common/SnackbarAlert.d.ts +13 -0
  3. package/dist/components/confirmationContainer/index.d.ts +2 -1
  4. package/dist/components/ticketsContainer/index.d.ts +2 -1
  5. package/dist/env.d.ts +1 -0
  6. package/dist/images/done.svg +3 -3
  7. package/dist/tf-checkout-react.cjs.development.js +242 -117
  8. package/dist/tf-checkout-react.cjs.development.js.map +1 -1
  9. package/dist/tf-checkout-react.cjs.production.min.js +1 -1
  10. package/dist/tf-checkout-react.cjs.production.min.js.map +1 -1
  11. package/dist/tf-checkout-react.esm.js +243 -118
  12. package/dist/tf-checkout-react.esm.js.map +1 -1
  13. package/dist/tf-checkout-styles.css +1 -1
  14. package/package.json +89 -89
  15. package/src/.DS_Store +0 -0
  16. package/src/.d.ts +2 -2
  17. package/src/api/index.ts +278 -278
  18. package/src/assets/images/done.svg +3 -3
  19. package/src/components/.DS_Store +0 -0
  20. package/src/components/billing-info-container/index.tsx +796 -777
  21. package/src/components/billing-info-container/style.css +105 -105
  22. package/src/components/billing-info-container/utils.ts +224 -224
  23. package/src/components/common/CheckboxField.tsx +41 -41
  24. package/src/components/common/CustomField.tsx +84 -84
  25. package/src/components/common/FormikPhoneNumberField.tsx +51 -51
  26. package/src/components/common/Loader.tsx +9 -9
  27. package/src/components/common/RadioField.tsx +35 -35
  28. package/src/components/common/SelectField.tsx +80 -80
  29. package/src/components/common/SnackbarAlert.tsx +54 -0
  30. package/src/components/common/index.tsx +4 -4
  31. package/src/components/confirmModal/index.tsx +51 -51
  32. package/src/components/confirmModal/style.css +21 -21
  33. package/src/components/confirmationContainer/config.ts +72 -72
  34. package/src/components/confirmationContainer/index.tsx +197 -194
  35. package/src/components/confirmationContainer/social-buttons.tsx +94 -94
  36. package/src/components/confirmationContainer/style.css +202 -202
  37. package/src/components/countdown/index.tsx +89 -89
  38. package/src/components/countdown/style.css +9 -9
  39. package/src/components/index.ts +7 -7
  40. package/src/components/loginModal/index.tsx +209 -209
  41. package/src/components/loginModal/style.css +71 -71
  42. package/src/components/myTicketsContainer/index.tsx +196 -137
  43. package/src/components/myTicketsContainer/row.tsx +41 -41
  44. package/src/components/myTicketsContainer/style.css +39 -39
  45. package/src/components/myTicketsContainer/tableConfig.tsx +34 -34
  46. package/src/components/orderDetailsContainer/index.tsx +249 -249
  47. package/src/components/orderDetailsContainer/style.css +72 -72
  48. package/src/components/orderDetailsContainer/ticketsTable.tsx +124 -124
  49. package/src/components/paymentContainer/index.tsx +284 -284
  50. package/src/components/registerModal/index.tsx +190 -190
  51. package/src/components/stripePayment/index.tsx +253 -253
  52. package/src/components/stripePayment/style.css +59 -59
  53. package/src/components/ticketResale/index.tsx +56 -56
  54. package/src/components/ticketResaleModal/index.tsx +210 -210
  55. package/src/components/ticketResaleModal/style.css +28 -28
  56. package/src/components/ticketsContainer/PromoCodeSection.tsx +99 -99
  57. package/src/components/ticketsContainer/ReferralLogic.tsx +33 -33
  58. package/src/components/ticketsContainer/TicketRow.tsx +83 -83
  59. package/src/components/ticketsContainer/TicketsSection.tsx +81 -81
  60. package/src/components/ticketsContainer/index.tsx +430 -422
  61. package/src/components/ticketsContainer/style.css +181 -181
  62. package/src/components/ticketsContainer/utils.ts +11 -11
  63. package/src/components/timerWidget/index.tsx +70 -70
  64. package/src/components/timerWidget/style.css +26 -26
  65. package/src/components/waitingList/index.tsx +178 -178
  66. package/src/components/waitingList/style.css +26 -26
  67. package/src/env.ts +20 -19
  68. package/src/index.ts +13 -13
  69. package/src/normalizers/index.ts +45 -45
  70. package/src/types/billing-info-data.ts +37 -37
  71. package/src/types/payment-field.ts +7 -7
  72. package/src/types/referral-promotion.ts +7 -7
  73. package/src/utils/createCheckoutDataBodyWithDefaultHolder.ts +59 -59
  74. package/src/utils/downloadPDF.tsx +30 -30
  75. package/src/utils/formikErrorFocus.ts +24 -24
  76. package/src/utils/getImage.ts +14 -14
  77. package/src/utils/getQueryVariable.ts +13 -13
  78. package/src/utils/index.ts +5 -5
  79. package/src/utils/setConfigs.ts +26 -26
  80. package/src/utils/showZero.tsx +10 -10
  81. package/src/validators/index.ts +20 -20
@@ -42,5 +42,7 @@ export interface IBillingInfoPage {
42
42
  onSkipBillingPage: (data: any) => void;
43
43
  skipPage?: boolean;
44
44
  canSkipHolderNames?: boolean;
45
+ onCountdownFinish?: () => void;
46
+ enableTimer?: boolean;
45
47
  }
46
- export declare const BillingInfoContainer: ({ data, ticketHoldersFields, initialValues, buttonName, handleSubmit, theme, onRegisterSuccess, onRegisterError, onSubmitError, onGetCartSuccess, onGetCartError, onGetCountriesSuccess, onGetCountriesError, onGetStatesSuccess, onGetStatesError, onGetProfileDataSuccess, onGetProfileDataError, onAuthorizeSuccess, onAuthorizeError, onLogin, onLoginSuccess, isLoggedIn: pIsLoggedIn, accountInfoTitle, hideLogo, themeOptions, onErrorClose, hideErrorsAlertSection, onSkipBillingPage, skipPage, canSkipHolderNames }: IBillingInfoPage) => JSX.Element;
48
+ export declare const BillingInfoContainer: ({ data, ticketHoldersFields, initialValues, buttonName, handleSubmit, theme, onRegisterSuccess, onRegisterError, onSubmitError, onGetCartSuccess, onGetCartError, onGetCountriesSuccess, onGetCountriesError, onGetStatesSuccess, onGetStatesError, onGetProfileDataSuccess, onGetProfileDataError, onAuthorizeSuccess, onAuthorizeError, onLogin, onLoginSuccess, isLoggedIn: pIsLoggedIn, accountInfoTitle, hideLogo, themeOptions, onErrorClose, hideErrorsAlertSection, onSkipBillingPage, skipPage, canSkipHolderNames, onCountdownFinish, enableTimer }: IBillingInfoPage) => JSX.Element;
@@ -0,0 +1,13 @@
1
+ /// <reference types="react" />
2
+ import { AlertColor, SnackbarOrigin } from '@mui/material';
3
+ interface ISnackbarAlertProps {
4
+ isOpen: boolean;
5
+ message: string;
6
+ type: AlertColor;
7
+ position?: SnackbarOrigin;
8
+ autoHideDuration?: number;
9
+ variant?: 'filled' | 'standard' | 'outlined';
10
+ onClose: () => void;
11
+ }
12
+ declare const SnackbarAlert: ({ isOpen, message, type, position, autoHideDuration, variant, onClose, }: ISnackbarAlertProps) => JSX.Element;
13
+ export default SnackbarAlert;
@@ -14,6 +14,7 @@ export interface IConfirmationPage {
14
14
  shareButtons: IShareButton[];
15
15
  onGetConfirmationDataSuccess: (res: any) => void;
16
16
  onGetConfirmationDataError: (e: AxiosError) => void;
17
+ onLinkCopied: () => void;
17
18
  orderHash?: string;
18
19
  }
19
- export declare const ConfirmationContainer: ({ isReferralEnabled, showDefaultShareButtons, messengerAppId, shareButtons, onGetConfirmationDataSuccess, onGetConfirmationDataError, orderHash, }: IConfirmationPage) => JSX.Element;
20
+ export declare const ConfirmationContainer: ({ isReferralEnabled, showDefaultShareButtons, messengerAppId, shareButtons, onGetConfirmationDataSuccess, onGetConfirmationDataError, orderHash, onLinkCopied }: IConfirmationPage) => JSX.Element;
@@ -30,6 +30,7 @@ export interface IGetTickets {
30
30
  isAccessCodeEnabled?: boolean;
31
31
  hideSessionButtons?: boolean;
32
32
  hideWaitingList?: boolean;
33
+ isButtonScrollable?: boolean;
33
34
  }
34
35
  export interface ITicket {
35
36
  id: string | number;
@@ -38,5 +39,5 @@ export interface ITicket {
38
39
  export interface ISelectedTickets {
39
40
  [key: string]: string | number;
40
41
  }
41
- export declare const TicketsContainer: ({ onLoginSuccess, getTicketsLabel, eventId, onAddToCartSuccess, contentStyle, onAddToCartError, onGetTicketsSuccess, onGetTicketsError, theme, queryPromoCode, isPromotionsEnabled, themeOptions, isAccessCodeEnabled, hideSessionButtons, hideWaitingList }: IGetTickets) => JSX.Element;
42
+ export declare const TicketsContainer: ({ onLoginSuccess, getTicketsLabel, eventId, onAddToCartSuccess, contentStyle, onAddToCartError, onGetTicketsSuccess, onGetTicketsError, theme, queryPromoCode, isPromotionsEnabled, themeOptions, isAccessCodeEnabled, hideSessionButtons, hideWaitingList, isButtonScrollable }: IGetTickets) => JSX.Element;
42
43
  export {};
package/dist/env.d.ts CHANGED
@@ -4,6 +4,7 @@ export declare const ENV: {
4
4
  CLIENT_ID: string;
5
5
  CLIENT_SECRET: string;
6
6
  STRIPE_PUBLISHABLE_KEY: string;
7
+ BRAND_SLUG: string;
7
8
  };
8
9
  export declare const ENV_PROD: {
9
10
  EVENT_ID: number;
@@ -1,3 +1,3 @@
1
- <svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <path fill-rule="evenodd" clip-rule="evenodd" d="M10 20C15.5228 20 20 15.5228 20 10C20 4.47717 15.5228 0 10 0C4.47717 0 0 4.47717 0 10C0 15.5228 4.47717 20 10 20ZM8.14661 15.8678L16.8782 6.39722C16.9561 6.31335 17 6.19922 17 6.08008C17 5.96094 16.9561 5.8468 16.8782 5.76282L16.3016 5.12854C16.1386 4.95715 15.8796 4.95715 15.7167 5.12854L7.85004 13.661L4.28326 9.79236C4.20593 9.70776 4.10071 9.66016 3.99084 9.66016C3.9353 9.66016 3.88086 9.67236 3.83069 9.69531C3.78168 9.71777 3.73663 9.75061 3.69843 9.79236L3.12183 10.4177C3.07635 10.4667 3.04248 10.5259 3.02216 10.5905C3.00763 10.6365 3 10.6853 3 10.735C3 10.8541 3.04388 10.9683 3.12183 11.0521L7.56177 15.8678C7.6391 15.9524 7.74438 16 7.85419 16C7.96399 16 8.06927 15.9524 8.14661 15.8678Z" fill="#569F44"/>
3
- </svg>
1
+ <svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M10 20C15.5228 20 20 15.5228 20 10C20 4.47717 15.5228 0 10 0C4.47717 0 0 4.47717 0 10C0 15.5228 4.47717 20 10 20ZM8.14661 15.8678L16.8782 6.39722C16.9561 6.31335 17 6.19922 17 6.08008C17 5.96094 16.9561 5.8468 16.8782 5.76282L16.3016 5.12854C16.1386 4.95715 15.8796 4.95715 15.7167 5.12854L7.85004 13.661L4.28326 9.79236C4.20593 9.70776 4.10071 9.66016 3.99084 9.66016C3.9353 9.66016 3.88086 9.67236 3.83069 9.69531C3.78168 9.71777 3.73663 9.75061 3.69843 9.79236L3.12183 10.4177C3.07635 10.4667 3.04248 10.5259 3.02216 10.5905C3.00763 10.6365 3 10.6853 3 10.735C3 10.8541 3.04388 10.9683 3.12183 11.0521L7.56177 15.8678C7.6391 15.9524 7.74438 16 7.85419 16C7.96399 16 8.06927 15.9524 8.14661 15.8678Z" fill="#569F44"/>
3
+ </svg>
@@ -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'));
@@ -2167,6 +2167,99 @@ var SelectField = function SelectField(_ref) {
2167
2167
  }, error) : null);
2168
2168
  };
2169
2169
 
2170
+ var showZero = function showZero(value) {
2171
+ if (value === void 0) {
2172
+ value = 0;
2173
+ }
2174
+
2175
+ var intNumber = Number(value);
2176
+ return _isNumber(intNumber) ? intNumber >= 0 && intNumber < 10 ? '0' + intNumber : intNumber : null;
2177
+ };
2178
+
2179
+ var TimerWidget = function TimerWidget(_ref) {
2180
+ var expires_at = _ref.expires_at,
2181
+ buyLoading = _ref.buyLoading,
2182
+ _ref$onCountdownFinis = _ref.onCountdownFinish,
2183
+ onCountdownFinish = _ref$onCountdownFinis === void 0 ? function () {} : _ref$onCountdownFinis;
2184
+
2185
+ var _useState = React.useState(true),
2186
+ showTimer = _useState[0],
2187
+ setShowTimer = _useState[1];
2188
+
2189
+ var handleCountdownFinish = function handleCountdownFinish() {
2190
+ setShowTimer(false);
2191
+
2192
+ if (!buyLoading) {
2193
+ onCountdownFinish();
2194
+ }
2195
+ };
2196
+
2197
+ var _renderer = function renderer(_ref2) {
2198
+ var minutes = _ref2.minutes,
2199
+ seconds = _ref2.seconds,
2200
+ completed = _ref2.completed,
2201
+ handleCountdownFinish = _ref2.handleCountdownFinish;
2202
+
2203
+ if (completed) {
2204
+ handleCountdownFinish();
2205
+ return null;
2206
+ }
2207
+
2208
+ return React__default.createElement("span", null, showZero(minutes), ":", showZero(seconds));
2209
+ };
2210
+
2211
+ return showTimer && !!expires_at ? React__default.createElement("div", {
2212
+ className: "timer"
2213
+ }, React__default.createElement("div", {
2214
+ className: "toast-message"
2215
+ }, React__default.createElement("p", null, "Please complete your purchase before the timer reaches zero."), React__default.createElement("p", {
2216
+ className: "countdown"
2217
+ }, React__default.createElement(Countdown$1, {
2218
+ date: Date.now() + expires_at * 1000,
2219
+ renderer: function renderer(props) {
2220
+ return _renderer(_extends({}, props, {
2221
+ handleCountdownFinish: handleCountdownFinish
2222
+ }));
2223
+ }
2224
+ })))) : null;
2225
+ };
2226
+
2227
+ var SnackbarAlert = function SnackbarAlert(_ref) {
2228
+ var isOpen = _ref.isOpen,
2229
+ message = _ref.message,
2230
+ type = _ref.type,
2231
+ position = _ref.position,
2232
+ _ref$autoHideDuration = _ref.autoHideDuration,
2233
+ autoHideDuration = _ref$autoHideDuration === void 0 ? 3000 : _ref$autoHideDuration,
2234
+ variant = _ref.variant,
2235
+ onClose = _ref.onClose;
2236
+ return React__default.createElement("div", {
2237
+ className: "snackbar-alert-container"
2238
+ }, React__default.createElement(material.Snackbar, {
2239
+ autoHideDuration: autoHideDuration,
2240
+ open: isOpen,
2241
+ anchorOrigin: position || {
2242
+ vertical: 'top',
2243
+ horizontal: 'center'
2244
+ },
2245
+ onClose: onClose,
2246
+ classes: {
2247
+ root: 'snackbar-alert-snackbar-root'
2248
+ }
2249
+ }, React__default.createElement(material.Alert, {
2250
+ severity: type,
2251
+ onClose: onClose,
2252
+ variant: variant || 'filled',
2253
+ classes: {
2254
+ icon: 'snackbar-alert-icon',
2255
+ root: 'snackbar-alert-alert-root',
2256
+ action: 'snackbar-alert-action',
2257
+ message: 'snackbar-alert-message',
2258
+ filled: 'snackbar-alert-filled'
2259
+ }
2260
+ }, message)));
2261
+ };
2262
+
2170
2263
  var LogicRunner = function LogicRunner(_ref) {
2171
2264
  var values = _ref.values,
2172
2265
  setStates = _ref.setStates,
@@ -2329,7 +2422,11 @@ var BillingInfoContainer = function BillingInfoContainer(_ref3) {
2329
2422
  _ref3$skipPage = _ref3.skipPage,
2330
2423
  skipPage = _ref3$skipPage === void 0 ? false : _ref3$skipPage,
2331
2424
  _ref3$canSkipHolderNa = _ref3.canSkipHolderNames,
2332
- canSkipHolderNames = _ref3$canSkipHolderNa === void 0 ? false : _ref3$canSkipHolderNa;
2425
+ canSkipHolderNames = _ref3$canSkipHolderNa === void 0 ? false : _ref3$canSkipHolderNa,
2426
+ _ref3$onCountdownFini = _ref3.onCountdownFinish,
2427
+ onCountdownFinish = _ref3$onCountdownFini === void 0 ? function () {} : _ref3$onCountdownFini,
2428
+ _ref3$enableTimer = _ref3.enableTimer,
2429
+ enableTimer = _ref3$enableTimer === void 0 ? false : _ref3$enableTimer;
2333
2430
 
2334
2431
  var themeMui = styles$1.createTheme(themeOptions);
2335
2432
  var isWindowDefined = typeof window !== 'undefined';
@@ -2418,6 +2515,8 @@ var BillingInfoContainer = function BillingInfoContainer(_ref3) {
2418
2515
 
2419
2516
  var hideTtfOptIn = _get(cartInfoData, 'hide_ttf_opt_in', true);
2420
2517
 
2518
+ var expirationTime = _get(cartInfoData, 'expires_at');
2519
+
2421
2520
  var flagRequirePhone = getQueryVariable('phone_required') === 'true'; // Get prevProps
2422
2521
 
2423
2522
  var prevData = React.useRef(data);
@@ -2692,7 +2791,10 @@ var BillingInfoContainer = function BillingInfoContainer(_ref3) {
2692
2791
 
2693
2792
  return React__default.createElement(styles$1.ThemeProvider, {
2694
2793
  theme: themeMui
2695
- }, React__default.createElement(formik.Formik, {
2794
+ }, expirationTime && enableTimer && React__default.createElement(TimerWidget, {
2795
+ expires_at: expirationTime,
2796
+ onCountdownFinish: onCountdownFinish
2797
+ }), React__default.createElement(formik.Formik, {
2696
2798
  initialValues: getInitialValues(dataWithUniqueIds, _extends({}, initialValues, {
2697
2799
  country: _get(userData, 'country', '') || '1',
2698
2800
  state: _get(userData, 'state', '') || '1',
@@ -2789,6 +2891,10 @@ var BillingInfoContainer = function BillingInfoContainer(_ref3) {
2789
2891
  setShowModalLogin(true);
2790
2892
  }
2791
2893
 
2894
+ if (_includes(_error, 'The cart is expired') && !hideErrorsAlertSection) {
2895
+ setError(_error);
2896
+ }
2897
+
2792
2898
  onRegisterError(_context6.t0, values.email);
2793
2899
  }
2794
2900
 
@@ -2831,11 +2937,7 @@ var BillingInfoContainer = function BillingInfoContainer(_ref3) {
2831
2937
  }
2832
2938
  }
2833
2939
 
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
-
2940
+ if ((_e$response3 = _context6.t1.response) != null && _e$response3.data.message && !hideErrorsAlertSection) {
2839
2941
  setError(_get(_context6.t1, 'response.data.message'));
2840
2942
  }
2841
2943
 
@@ -2869,11 +2971,15 @@ var BillingInfoContainer = function BillingInfoContainer(_ref3) {
2869
2971
  onGetStatesError: onGetStatesError
2870
2972
  }), React__default.createElement("div", {
2871
2973
  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", {
2974
+ }, React__default.createElement(SnackbarAlert, {
2975
+ type: "error",
2976
+ isOpen: !!error,
2977
+ message: error || '',
2978
+ onClose: function onClose() {
2979
+ setError(null);
2980
+ onErrorClose();
2981
+ }
2982
+ }), !isLoggedIn && React__default.createElement("div", {
2877
2983
  className: "account-actions-block"
2878
2984
  }, React__default.createElement("div", null, accountInfoTitle), React__default.createElement("div", null, "Login & skip ahead:"), React__default.createElement("div", {
2879
2985
  className: "login-block"
@@ -3279,63 +3385,6 @@ var CheckoutForm = function CheckoutForm(_ref) {
3279
3385
  }) : "Pay " + getCurrencySymbolByCurrency(currency) + total))));
3280
3386
  };
3281
3387
 
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
3388
  var publishableKey = CONFIGS.STRIPE_PUBLISHABLE_KEY || '';
3340
3389
 
3341
3390
  var getStripePromise = function getStripePromise(reviewData) {
@@ -3837,7 +3886,9 @@ var ConfirmationContainer = function ConfirmationContainer(_ref) {
3837
3886
  onGetConfirmationDataSuccess = _ref$onGetConfirmatio === void 0 ? function () {} : _ref$onGetConfirmatio,
3838
3887
  _ref$onGetConfirmatio2 = _ref.onGetConfirmationDataError,
3839
3888
  onGetConfirmationDataError = _ref$onGetConfirmatio2 === void 0 ? function () {} : _ref$onGetConfirmatio2,
3840
- orderHash = _ref.orderHash;
3889
+ orderHash = _ref.orderHash,
3890
+ _ref$onLinkCopied = _ref.onLinkCopied,
3891
+ onLinkCopied = _ref$onLinkCopied === void 0 ? function () {} : _ref$onLinkCopied;
3841
3892
  var inputRef = React.useRef(null);
3842
3893
 
3843
3894
  var _useState = React.useState(null),
@@ -3975,7 +4026,8 @@ var ConfirmationContainer = function ConfirmationContainer(_ref) {
3975
4026
  }), React__default.createElement("div", {
3976
4027
  className: "share-by-link-copy-icon",
3977
4028
  onClick: function onClick() {
3978
- return navigator.clipboard.writeText(_get(inputRef, 'current.value'));
4029
+ navigator.clipboard.writeText(_get(inputRef, 'current.value'));
4030
+ onLinkCopied();
3979
4031
  }
3980
4032
  }, React__default.createElement("img", {
3981
4033
  src: "https://img.icons8.com/office/50/000000/copy.png",
@@ -4521,7 +4573,9 @@ var TicketsContainer = function TicketsContainer(_ref) {
4521
4573
  _ref$hideSessionButto = _ref.hideSessionButtons,
4522
4574
  hideSessionButtons = _ref$hideSessionButto === void 0 ? false : _ref$hideSessionButto,
4523
4575
  _ref$hideWaitingList = _ref.hideWaitingList,
4524
- hideWaitingList = _ref$hideWaitingList === void 0 ? false : _ref$hideWaitingList;
4576
+ hideWaitingList = _ref$hideWaitingList === void 0 ? false : _ref$hideWaitingList,
4577
+ _ref$isButtonScrollab = _ref.isButtonScrollable,
4578
+ isButtonScrollable = _ref$isButtonScrollab === void 0 ? false : _ref$isButtonScrollab;
4525
4579
 
4526
4580
  var _useState = React.useState({}),
4527
4581
  selectedTickets = _useState[0],
@@ -4533,50 +4587,51 @@ var TicketsContainer = function TicketsContainer(_ref) {
4533
4587
  isLogged = _useState2[0],
4534
4588
  setIsLogged = _useState2[1];
4535
4589
 
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];
4590
+ var _useState3 = React.useState(false),
4591
+ showLoginModal = _useState3[0],
4592
+ setShowLoginModal = _useState3[1];
4543
4593
 
4544
- var _useState4 = React.useState(null),
4545
- event = _useState4[0],
4546
- setEvent = _useState4[1];
4594
+ var _useState4 = React.useState([]),
4595
+ tickets = _useState4[0],
4596
+ setTickets = _useState4[1];
4547
4597
 
4548
- var _useState5 = React.useState(false),
4549
- showWaitingList = _useState5[0],
4550
- setShowWaitingList = _useState5[1];
4598
+ var _useState5 = React.useState(null),
4599
+ event = _useState5[0],
4600
+ setEvent = _useState5[1];
4551
4601
 
4552
4602
  var _useState6 = React.useState(false),
4553
- isLoading = _useState6[0],
4554
- setIsLoading = _useState6[1];
4603
+ showWaitingList = _useState6[0],
4604
+ setShowWaitingList = _useState6[1];
4555
4605
 
4556
4606
  var _useState7 = React.useState(false),
4557
- isPromoLoading = _useState7[0],
4558
- setIsPromoLoading = _useState7[1];
4607
+ isLoading = _useState7[0],
4608
+ setIsLoading = _useState7[1];
4559
4609
 
4560
4610
  var _useState8 = React.useState(false),
4561
- handleBookIsLoading = _useState8[0],
4562
- setHandleBookIsLoading = _useState8[1];
4611
+ isPromoLoading = _useState8[0],
4612
+ setIsPromoLoading = _useState8[1];
4563
4613
 
4564
- var _useState9 = React.useState(''),
4565
- promoCode = _useState9[0],
4566
- setPromoCode = _useState9[1];
4614
+ var _useState9 = React.useState(false),
4615
+ handleBookIsLoading = _useState9[0],
4616
+ setHandleBookIsLoading = _useState9[1];
4567
4617
 
4568
- var _useState10 = React.useState(getQueryVariable('r') || queryPromoCode),
4569
- promoCodeUpdated = _useState10[0],
4570
- setPromoCodeUpdated = _useState10[1];
4618
+ var _useState10 = React.useState(''),
4619
+ promoCode = _useState10[0],
4620
+ setPromoCode = _useState10[1];
4571
4621
 
4572
- var _useState11 = React.useState(false),
4573
- showPromoInput = _useState11[0],
4574
- setShowPromoInput = _useState11[1];
4622
+ var _useState11 = React.useState(getQueryVariable('r') || queryPromoCode),
4623
+ promoCodeUpdated = _useState11[0],
4624
+ setPromoCodeUpdated = _useState11[1];
4575
4625
 
4576
4626
  var _useState12 = React.useState(false),
4577
- promoCodeIsApplied = _useState12[0],
4578
- setPromoCodeIsApplied = _useState12[1];
4627
+ showPromoInput = _useState12[0],
4628
+ setShowPromoInput = _useState12[1];
4629
+
4630
+ var _useState13 = React.useState(false),
4631
+ promoCodeIsApplied = _useState13[0],
4632
+ setPromoCodeIsApplied = _useState13[1];
4579
4633
 
4634
+ var ticketsContainerRef = React.useRef(null);
4580
4635
  React.useEffect(function () {
4581
4636
  if (typeof window !== 'undefined') {
4582
4637
  var access_token = window.localStorage.getItem('access_token');
@@ -4614,6 +4669,7 @@ var TicketsContainer = function TicketsContainer(_ref) {
4614
4669
 
4615
4670
  if (userData.country === '') {
4616
4671
  handleLogout();
4672
+ window.open("https://www.ticketfairy.com/account/change_information?need_country=true");
4617
4673
  }
4618
4674
  }
4619
4675
  } catch (e) {}
@@ -4852,6 +4908,22 @@ var TicketsContainer = function TicketsContainer(_ref) {
4852
4908
  isWindowDefined && window.document.removeEventListener('custom-login', handleExternalLogin);
4853
4909
  };
4854
4910
  }, []);
4911
+
4912
+ var handleGetTicketClick = function handleGetTicketClick() {
4913
+ if (!handleBookIsLoading && !_isEmpty(selectedTickets) && Object.values(selectedTickets)[0] > 0) {
4914
+ handleBook();
4915
+ } else {
4916
+ if (isButtonScrollable && ticketsContainerRef && ticketsContainerRef.current) {
4917
+ ticketsContainerRef.current.scrollIntoView({
4918
+ behavior: 'smooth',
4919
+ block: 'center',
4920
+ inline: 'nearest'
4921
+ });
4922
+ }
4923
+ }
4924
+ };
4925
+
4926
+ var bookButtonIsDisabled = handleBookIsLoading || _isEmpty(selectedTickets) || Object.values(selectedTickets)[0] === 0;
4855
4927
  return React__default.createElement(privateTheming.ThemeProvider, {
4856
4928
  theme: themeMui
4857
4929
  }, React__default.createElement(ReferralLogic, {
@@ -4859,7 +4931,9 @@ var TicketsContainer = function TicketsContainer(_ref) {
4859
4931
  }), React__default.createElement("div", {
4860
4932
  className: "get-tickets-page " + theme,
4861
4933
  style: contentStyle
4862
- }, isLoading ? React__default.createElement(Loader, null) : React__default.createElement("div", null, React__default.createElement(TicketsSection, {
4934
+ }, isLoading ? React__default.createElement(Loader, null) : React__default.createElement("div", {
4935
+ ref: ticketsContainerRef
4936
+ }, React__default.createElement(TicketsSection, {
4863
4937
  ticketsList: tickets,
4864
4938
  selectedTickets: selectedTickets,
4865
4939
  handleTicketSelect: handleTicketSelect,
@@ -4888,8 +4962,8 @@ var TicketsContainer = function TicketsContainer(_ref) {
4888
4962
  isPromoLoading: isPromoLoading
4889
4963
  }), (isTicketOnSale || !(event != null && event.salesEnded)) && React__default.createElement(Button$1, {
4890
4964
  "aria-hidden": true,
4891
- className: "book-button " + (handleBookIsLoading || _isEmpty(selectedTickets) || Object.values(selectedTickets)[0] === 0 ? 'disabled' : ''),
4892
- onClick: !handleBookIsLoading && !_isEmpty(selectedTickets) && Object.values(selectedTickets)[0] > 0 ? handleBook : function () {}
4965
+ className: "book-button \n " + (bookButtonIsDisabled ? 'disabled' : '') + " \n " + (isButtonScrollable ? 'is-scrollable' : '') + "\n ",
4966
+ onClick: handleGetTicketClick
4893
4967
  }, getTicketsLabel || 'GET TICKETS'), isLogged && !hideSessionButtons ? React__default.createElement("div", {
4894
4968
  className: "session-wrapper"
4895
4969
  }, React__default.createElement("span", {
@@ -4999,16 +5073,30 @@ var MyTicketsContainer = function MyTicketsContainer(_ref) {
4999
5073
 
5000
5074
  var _useState4 = React.useState(''),
5001
5075
  filter = _useState4[0],
5002
- setFilter = _useState4[1]; //just once
5076
+ setFilter = _useState4[1];
5077
+
5078
+ var isWindowDefined = typeof window !== 'undefined';
5079
+
5080
+ var _useState5 = React.useState(isWindowDefined ? !!window.localStorage.getItem('access_token') : false),
5081
+ isLogged = _useState5[0],
5082
+ setIsLogged = _useState5[1];
5083
+
5084
+ var _useState6 = React.useState(false),
5085
+ showModalLogin = _useState6[0],
5086
+ setShowModalLogin = _useState6[1];
5087
+
5088
+ var _useState7 = React.useState(false),
5089
+ userExpired = _useState7[0],
5090
+ setUserExpired = _useState7[1]; //just once
5003
5091
 
5004
5092
 
5005
5093
  React.useEffect(function () {
5006
5094
  fetchData(1, limit, filter);
5007
- }, []);
5095
+ }, [isLogged]);
5008
5096
 
5009
5097
  var fetchData = /*#__PURE__*/function () {
5010
5098
  var _ref2 = _asyncToGenerator( /*#__PURE__*/runtime_1.mark(function _callee(page, limit, filter) {
5011
- var response, _data;
5099
+ var response, _data, _error$response;
5012
5100
 
5013
5101
  return runtime_1.wrap(function _callee$(_context) {
5014
5102
  while (1) {
@@ -5025,25 +5113,37 @@ var MyTicketsContainer = function MyTicketsContainer(_ref) {
5025
5113
  _data = _get(response, 'data.data.attributes');
5026
5114
  _data.page -= 1;
5027
5115
  setData(_data);
5028
- _context.next = 14;
5116
+ _context.next = 15;
5029
5117
  break;
5030
5118
 
5031
5119
  case 11:
5032
5120
  _context.prev = 11;
5033
5121
  _context.t0 = _context["catch"](0);
5122
+
5123
+ if (axios.isAxiosError(_context.t0)) {
5124
+ if (((_error$response = _context.t0.response) == null ? void 0 : _error$response.data.error) === 'invalid_token') {
5125
+ if (isWindowDefined) {
5126
+ window.localStorage.removeItem('user_data');
5127
+ window.localStorage.removeItem('access_token');
5128
+ setUserExpired(true);
5129
+ setShowModalLogin(true);
5130
+ }
5131
+ }
5132
+ }
5133
+
5034
5134
  onGetOrdersError(_context.t0);
5035
5135
 
5036
- case 14:
5037
- _context.prev = 14;
5136
+ case 15:
5137
+ _context.prev = 15;
5038
5138
  setLoading(false);
5039
- return _context.finish(14);
5139
+ return _context.finish(15);
5040
5140
 
5041
- case 17:
5141
+ case 18:
5042
5142
  case "end":
5043
5143
  return _context.stop();
5044
5144
  }
5045
5145
  }
5046
- }, _callee, null, [[0, 11, 14, 17]]);
5146
+ }, _callee, null, [[0, 11, 15, 18]]);
5047
5147
  }));
5048
5148
 
5049
5149
  return function fetchData(_x, _x2, _x3) {
@@ -5069,7 +5169,22 @@ var MyTicketsContainer = function MyTicketsContainer(_ref) {
5069
5169
  className: "my-ticket " + theme
5070
5170
  }, loading && React__default.createElement("div", {
5071
5171
  className: "loading"
5072
- }, React__default.createElement(CircularProgress, null)), data && React__default.createElement(React__default.Fragment, null, React__default.createElement(Autocomplete, {
5172
+ }, React__default.createElement(CircularProgress, null)), !isLogged ? React__default.createElement("div", {
5173
+ className: "account-actions-block"
5174
+ }, React__default.createElement("div", {
5175
+ className: "login-block"
5176
+ }, React__default.createElement("button", {
5177
+ className: "login-register-button",
5178
+ type: "button",
5179
+ onClick: function onClick() {
5180
+ setShowModalLogin(true);
5181
+ }
5182
+ }, "Login"), React__default.createElement("div", {
5183
+ className: "logo-image-container"
5184
+ }, React__default.createElement("img", {
5185
+ src: theme === 'dark' ? 'https://www.ticketfairy.com/resources/images/logo-ttf.svg' : 'https://www.ticketfairy.com/resources/images/logo-ttf-black.svg',
5186
+ alt: "nodata"
5187
+ })))) : null, data && React__default.createElement(React__default.Fragment, null, React__default.createElement(Autocomplete, {
5073
5188
  disablePortal: true,
5074
5189
  id: "combo-box-demo",
5075
5190
  getOptionLabel: function getOptionLabel(option) {
@@ -5108,6 +5223,16 @@ var MyTicketsContainer = function MyTicketsContainer(_ref) {
5108
5223
  page: data.page,
5109
5224
  onPageChange: handleChangePage,
5110
5225
  onRowsPerPageChange: handleChangeRowsPerPage
5226
+ })), React__default.createElement(React__default.Fragment, null, showModalLogin && React__default.createElement(LoginModal, {
5227
+ onClose: function onClose() {
5228
+ setShowModalLogin(false);
5229
+ },
5230
+ onLogin: function onLogin() {
5231
+ setShowModalLogin(false);
5232
+ setUserExpired(false);
5233
+ setIsLogged(true);
5234
+ },
5235
+ userExpired: userExpired
5111
5236
  })));
5112
5237
  };
5113
5238