tf-checkout-react 1.0.87 → 1.0.91

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.
@@ -30,11 +30,14 @@ var Checkbox = _interopDefault(require('@mui/material/Checkbox'));
30
30
  var Select = _interopDefault(require('@mui/material/Select'));
31
31
  var MuiPhoneNumber = _interopDefault(require('material-ui-phone-number'));
32
32
  var styles$1 = require('@mui/material/styles');
33
+ var Backdrop = _interopDefault(require('@mui/material/Backdrop'));
33
34
  var Container = _interopDefault(require('@mui/material/Container'));
34
35
  var CircularProgress = _interopDefault(require('@mui/material/CircularProgress'));
35
36
  var Alert = _interopDefault(require('@mui/material/Alert'));
36
37
  var reactStripeJs = require('@stripe/react-stripe-js');
37
38
  var stripeJs = require('@stripe/stripe-js');
39
+ var Countdown$1 = _interopDefault(require('react-countdown'));
40
+ var _isNumber = _interopDefault(require('lodash/isNumber'));
38
41
  var reactShare = require('react-share');
39
42
  var _some = _interopDefault(require('lodash/some'));
40
43
  var _every = _interopDefault(require('lodash/every'));
@@ -42,7 +45,6 @@ var _find = _interopDefault(require('lodash/find'));
42
45
  var Button$1 = _interopDefault(require('react-bootstrap/Button'));
43
46
  var jwt_decode = _interopDefault(require('jwt-decode'));
44
47
  var _sortBy = _interopDefault(require('lodash/sortBy'));
45
- var _has = _interopDefault(require('lodash/has'));
46
48
  var FormControl = _interopDefault(require('@mui/material/FormControl'));
47
49
  var MenuItem = _interopDefault(require('@mui/material/MenuItem'));
48
50
  var SVG = _interopDefault(require('react-inlinesvg'));
@@ -57,6 +59,7 @@ var TableRow = _interopDefault(require('@mui/material/TableRow'));
57
59
  var Paper = _interopDefault(require('@mui/material/Paper'));
58
60
  var TablePagination = _interopDefault(require('@mui/material/TablePagination'));
59
61
  var Autocomplete = _interopDefault(require('@mui/material/Autocomplete'));
62
+ var _has = _interopDefault(require('lodash/has'));
60
63
 
61
64
  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
62
65
  try {
@@ -1053,7 +1056,11 @@ var downloadPDF = function downloadPDF(pdfUrl) {
1053
1056
  });
1054
1057
  };
1055
1058
 
1056
- var createCheckoutDataBodyWithDefaultHolder = function createCheckoutDataBodyWithDefaultHolder(ticketsQuantity, logedInValues) {
1059
+ var createCheckoutDataBodyWithDefaultHolder = function createCheckoutDataBodyWithDefaultHolder(ticketsQuantity, logedInValues, includeDob) {
1060
+ if (includeDob === void 0) {
1061
+ includeDob = false;
1062
+ }
1063
+
1057
1064
  var ticket_holders = [];
1058
1065
  var first_name = _get(logedInValues, 'firstName') || _get(logedInValues, 'first_name') || '';
1059
1066
  var last_name = _get(logedInValues, 'lastName', '') || _get(logedInValues, 'last_name') || '';
@@ -1086,6 +1093,14 @@ var createCheckoutDataBodyWithDefaultHolder = function createCheckoutDataBodyWit
1086
1093
  ticket_holders: ticket_holders
1087
1094
  })
1088
1095
  };
1096
+
1097
+ if (includeDob) {
1098
+ var holderAgeDate = new Date(_get(logedInValues, 'holderAge', ''));
1099
+ body.attributes.dob_day = holderAgeDate.getDate();
1100
+ body.attributes.dob_month = holderAgeDate.getMonth() + 1;
1101
+ body.attributes.dob_year = holderAgeDate.getFullYear();
1102
+ }
1103
+
1089
1104
  return body;
1090
1105
  };
1091
1106
 
@@ -1323,6 +1338,12 @@ var LoginModal = function LoginModal(_ref) {
1323
1338
  error = _useState[0],
1324
1339
  setError = _useState[1];
1325
1340
 
1341
+ var handleForgotPassword = function handleForgotPassword() {
1342
+ if (typeof window !== 'undefined') {
1343
+ window.open(CONFIGS.BASE_URL + "/password-restore/");
1344
+ }
1345
+ };
1346
+
1326
1347
  return React__default.createElement(Modal, {
1327
1348
  open: true,
1328
1349
  onClose: onClose,
@@ -1501,7 +1522,11 @@ var LoginModal = function LoginModal(_ref) {
1501
1522
  className: "login-action-button"
1502
1523
  }, React__default.createElement("button", {
1503
1524
  type: "submit"
1504
- }, "Login"))));
1525
+ }, "Login")), React__default.createElement("div", {
1526
+ className: 'forgot-password'
1527
+ }, React__default.createElement("span", {
1528
+ onClick: handleForgotPassword
1529
+ }, "Forgot password?"))));
1505
1530
  }))));
1506
1531
  };
1507
1532
 
@@ -2261,7 +2286,13 @@ var BillingInfoContainer = function BillingInfoContainer(_ref3) {
2261
2286
  _ref3$onErrorClose = _ref3.onErrorClose,
2262
2287
  onErrorClose = _ref3$onErrorClose === void 0 ? function () {} : _ref3$onErrorClose,
2263
2288
  _ref3$hideErrorsAlert = _ref3.hideErrorsAlertSection,
2264
- hideErrorsAlertSection = _ref3$hideErrorsAlert === void 0 ? false : _ref3$hideErrorsAlert;
2289
+ hideErrorsAlertSection = _ref3$hideErrorsAlert === void 0 ? false : _ref3$hideErrorsAlert,
2290
+ _ref3$onSkipBillingPa = _ref3.onSkipBillingPage,
2291
+ onSkipBillingPage = _ref3$onSkipBillingPa === void 0 ? function () {} : _ref3$onSkipBillingPa,
2292
+ _ref3$skipPage = _ref3.skipPage,
2293
+ skipPage = _ref3$skipPage === void 0 ? false : _ref3$skipPage,
2294
+ _ref3$canSkipHolderNa = _ref3.canSkipHolderNames,
2295
+ canSkipHolderNames = _ref3$canSkipHolderNa === void 0 ? false : _ref3$canSkipHolderNa;
2265
2296
 
2266
2297
  var themeMui = styles$1.createTheme(themeOptions);
2267
2298
  var isWindowDefined = typeof window !== 'undefined';
@@ -2326,9 +2357,13 @@ var BillingInfoContainer = function BillingInfoContainer(_ref3) {
2326
2357
  userValues = _useState11[0],
2327
2358
  setUserValues = _useState11[1];
2328
2359
 
2329
- var _useState12 = React.useState(null),
2330
- error = _useState12[0],
2331
- setError = _useState12[1];
2360
+ var _useState12 = React.useState(true),
2361
+ loading = _useState12[0],
2362
+ setLoading = _useState12[1];
2363
+
2364
+ var _useState13 = React.useState(null),
2365
+ error = _useState13[0],
2366
+ setError = _useState13[1];
2332
2367
 
2333
2368
  var emailLogged = _get(userData, 'email', '') || _get(userValues, 'email', '');
2334
2369
 
@@ -2337,6 +2372,7 @@ var BillingInfoContainer = function BillingInfoContainer(_ref3) {
2337
2372
  var lastNameLogged = _get(userData, 'last_name', '') || _get(userValues, 'last_name', '');
2338
2373
 
2339
2374
  var showDOB = getQueryVariable('age_required') === 'true';
2375
+ var showTicketHolders = getQueryVariable('names_required') === 'true';
2340
2376
  var eventId = getQueryVariable('event_id');
2341
2377
 
2342
2378
  var optedInFieldValue = _get(cartInfoData, 'optedIn', false);
@@ -2534,6 +2570,88 @@ var BillingInfoContainer = function BillingInfoContainer(_ref3) {
2534
2570
  React.useEffect(function () {
2535
2571
  fetchUserData(access_token);
2536
2572
  }, [access_token]);
2573
+ React.useEffect(function () {
2574
+ var collectPaymentData = /*#__PURE__*/function () {
2575
+ var _ref7 = _asyncToGenerator( /*#__PURE__*/runtime_1.mark(function _callee5() {
2576
+ var checkoutBody, res;
2577
+ return runtime_1.wrap(function _callee5$(_context5) {
2578
+ while (1) {
2579
+ switch (_context5.prev = _context5.next) {
2580
+ case 0:
2581
+ if (!(skipPage && !_isEmpty(ticketsQuantity))) {
2582
+ _context5.next = 16;
2583
+ break;
2584
+ }
2585
+
2586
+ setLoading(true);
2587
+ checkoutBody = createCheckoutDataBodyWithDefaultHolder(ticketsQuantity.length, userData);
2588
+ _context5.prev = 3;
2589
+ _context5.next = 6;
2590
+ return postOnCheckout(checkoutBody, access_token);
2591
+
2592
+ case 6:
2593
+ res = _context5.sent;
2594
+ onSkipBillingPage(_get(res, 'data.data.attributes'));
2595
+ setLoading(false);
2596
+ _context5.next = 14;
2597
+ break;
2598
+
2599
+ case 11:
2600
+ _context5.prev = 11;
2601
+ _context5.t0 = _context5["catch"](3);
2602
+ onSubmitError(_context5.t0);
2603
+
2604
+ case 14:
2605
+ _context5.next = 17;
2606
+ break;
2607
+
2608
+ case 16:
2609
+ setLoading(false);
2610
+
2611
+ case 17:
2612
+ case "end":
2613
+ return _context5.stop();
2614
+ }
2615
+ }
2616
+ }, _callee5, null, [[3, 11]]);
2617
+ }));
2618
+
2619
+ return function collectPaymentData() {
2620
+ return _ref7.apply(this, arguments);
2621
+ };
2622
+ }();
2623
+
2624
+ collectPaymentData();
2625
+ }, [skipPage, ticketsQuantity]);
2626
+
2627
+ var collectCheckoutBody = function collectCheckoutBody(values) {
2628
+ var checkoutBody = {}; // Auto collect ticket holders name when it was skipped optionally
2629
+
2630
+ if (showDOB && !showTicketHolders && canSkipHolderNames) {
2631
+ checkoutBody = createCheckoutDataBodyWithDefaultHolder(ticketsQuantity.length, values, true);
2632
+ } else {
2633
+ checkoutBody = createCheckoutDataBody(ticketsQuantity.length, values, {
2634
+ emailLogged: emailLogged,
2635
+ firstNameLogged: firstNameLogged,
2636
+ lastNameLogged: lastNameLogged
2637
+ }, showDOB);
2638
+ }
2639
+
2640
+ return checkoutBody;
2641
+ }; // Displaying loader
2642
+
2643
+
2644
+ if (loading) {
2645
+ return React__default.createElement(Backdrop, {
2646
+ sx: {
2647
+ color: '#fff'
2648
+ },
2649
+ open: true
2650
+ }, React__default.createElement(material.CircularProgress, {
2651
+ color: "inherit"
2652
+ }));
2653
+ }
2654
+
2537
2655
  return React__default.createElement(styles$1.ThemeProvider, {
2538
2656
  theme: themeMui
2539
2657
  }, React__default.createElement(formik.Formik, {
@@ -2545,30 +2663,30 @@ var BillingInfoContainer = function BillingInfoContainer(_ref3) {
2545
2663
  }), userValues),
2546
2664
  enableReinitialize: true,
2547
2665
  onSubmit: function () {
2548
- var _onSubmit = _asyncToGenerator( /*#__PURE__*/runtime_1.mark(function _callee5(values, formikHelpers) {
2666
+ var _onSubmit = _asyncToGenerator( /*#__PURE__*/runtime_1.mark(function _callee6(values, formikHelpers) {
2549
2667
  var updatedUserData, _profileSpecifiedData, _profileDataObj, _checkoutBody, _res, checkoutBodyForRegistration, bodyFormData, access_token_register, resRegister, refreshToken, tokens, _e$response, _e$response$data, _error, profileData, profileSpecifiedData, profileDataObj, checkoutBody, res, _e$response2, _e$response3;
2550
2668
 
2551
- return runtime_1.wrap(function _callee5$(_context5) {
2669
+ return runtime_1.wrap(function _callee6$(_context6) {
2552
2670
  while (1) {
2553
- switch (_context5.prev = _context5.next) {
2671
+ switch (_context6.prev = _context6.next) {
2554
2672
  case 0:
2555
- _context5.prev = 0;
2673
+ _context6.prev = 0;
2556
2674
 
2557
2675
  if (!isLoggedIn) {
2558
- _context5.next = 17;
2676
+ _context6.next = 17;
2559
2677
  break;
2560
2678
  }
2561
2679
 
2562
2680
  if (!access_token) {
2563
- _context5.next = 9;
2681
+ _context6.next = 9;
2564
2682
  break;
2565
2683
  }
2566
2684
 
2567
- _context5.next = 5;
2685
+ _context6.next = 5;
2568
2686
  return getProfileData(access_token);
2569
2687
 
2570
2688
  case 5:
2571
- updatedUserData = _context5.sent;
2689
+ updatedUserData = _context6.sent;
2572
2690
  _profileSpecifiedData = _get(updatedUserData, 'data.data');
2573
2691
  _profileDataObj = setLoggedUserData(_profileSpecifiedData);
2574
2692
 
@@ -2577,22 +2695,18 @@ var BillingInfoContainer = function BillingInfoContainer(_ref3) {
2577
2695
  }
2578
2696
 
2579
2697
  case 9:
2580
- _checkoutBody = createCheckoutDataBody(ticketsQuantity.length, values, {
2581
- emailLogged: emailLogged,
2582
- firstNameLogged: firstNameLogged,
2583
- lastNameLogged: lastNameLogged
2584
- }, showDOB);
2585
- _context5.next = 12;
2698
+ _checkoutBody = collectCheckoutBody(values);
2699
+ _context6.next = 12;
2586
2700
  return postOnCheckout(_checkoutBody, access_token);
2587
2701
 
2588
2702
  case 12:
2589
- _res = _context5.sent;
2590
- _context5.next = 15;
2703
+ _res = _context6.sent;
2704
+ _context6.next = 15;
2591
2705
  return getPaymentData(_res.data.data.attributes.hash);
2592
2706
 
2593
2707
  case 15:
2594
2708
  handleSubmit(values, formikHelpers, eventId, _res);
2595
- return _context5.abrupt("return");
2709
+ return _context6.abrupt("return");
2596
2710
 
2597
2711
  case 17:
2598
2712
  checkoutBodyForRegistration = createCheckoutDataBody(ticketsQuantity.length, values, {
@@ -2602,12 +2716,12 @@ var BillingInfoContainer = function BillingInfoContainer(_ref3) {
2602
2716
  }, showDOB);
2603
2717
  bodyFormData = createRegisterFormData(values, checkoutBodyForRegistration);
2604
2718
  access_token_register = null;
2605
- _context5.prev = 20;
2606
- _context5.next = 23;
2719
+ _context6.prev = 20;
2720
+ _context6.next = 23;
2607
2721
  return register(bodyFormData);
2608
2722
 
2609
2723
  case 23:
2610
- resRegister = _context5.sent;
2724
+ resRegister = _context6.sent;
2611
2725
  access_token_register = _get(resRegister, 'data.data.attributes.access_token');
2612
2726
  refreshToken = _get(resRegister, 'data.data.attributes.refresh_token');
2613
2727
  handleSetAccessToken(access_token_register);
@@ -2616,15 +2730,15 @@ var BillingInfoContainer = function BillingInfoContainer(_ref3) {
2616
2730
  refreshToken: refreshToken
2617
2731
  };
2618
2732
  onRegisterSuccess(tokens);
2619
- _context5.next = 35;
2733
+ _context6.next = 35;
2620
2734
  break;
2621
2735
 
2622
2736
  case 31:
2623
- _context5.prev = 31;
2624
- _context5.t0 = _context5["catch"](20);
2737
+ _context6.prev = 31;
2738
+ _context6.t0 = _context6["catch"](20);
2625
2739
 
2626
- if (axios.isAxiosError(_context5.t0)) {
2627
- _error = _context5.t0 == null ? void 0 : (_e$response = _context5.t0.response) == null ? void 0 : (_e$response$data = _e$response.data) == null ? void 0 : _e$response$data.message;
2740
+ if (axios.isAxiosError(_context6.t0)) {
2741
+ _error = _context6.t0 == null ? void 0 : (_e$response = _context6.t0.response) == null ? void 0 : (_e$response$data = _e$response.data) == null ? void 0 : _e$response$data.message;
2628
2742
 
2629
2743
  if (_includes(_error, 'You must be aged')) {
2630
2744
  formikHelpers.setFieldError('holderAge', _error);
@@ -2641,17 +2755,17 @@ var BillingInfoContainer = function BillingInfoContainer(_ref3) {
2641
2755
  setShowModalLogin(true);
2642
2756
  }
2643
2757
 
2644
- onRegisterError(_context5.t0, values.email);
2758
+ onRegisterError(_context6.t0, values.email);
2645
2759
  }
2646
2760
 
2647
- return _context5.abrupt("return");
2761
+ return _context6.abrupt("return");
2648
2762
 
2649
2763
  case 35:
2650
- _context5.next = 37;
2764
+ _context6.next = 37;
2651
2765
  return getProfileData(access_token_register);
2652
2766
 
2653
2767
  case 37:
2654
- profileData = _context5.sent;
2768
+ profileData = _context6.sent;
2655
2769
  profileSpecifiedData = _get(profileData, 'data.data');
2656
2770
  profileDataObj = setLoggedUserData(profileSpecifiedData);
2657
2771
 
@@ -2659,30 +2773,26 @@ var BillingInfoContainer = function BillingInfoContainer(_ref3) {
2659
2773
  window.localStorage.setItem('user_data', JSON.stringify(profileDataObj));
2660
2774
  }
2661
2775
 
2662
- checkoutBody = createCheckoutDataBody(ticketsQuantity.length, values, {
2663
- emailLogged: emailLogged,
2664
- firstNameLogged: firstNameLogged,
2665
- lastNameLogged: lastNameLogged
2666
- }, showDOB);
2667
- _context5.next = 44;
2776
+ checkoutBody = collectCheckoutBody(values);
2777
+ _context6.next = 44;
2668
2778
  return postOnCheckout(checkoutBody, access_token_register);
2669
2779
 
2670
2780
  case 44:
2671
- res = _context5.sent;
2672
- _context5.next = 47;
2781
+ res = _context6.sent;
2782
+ _context6.next = 47;
2673
2783
  return getPaymentData(res.data.data.attributes.hash);
2674
2784
 
2675
2785
  case 47:
2676
2786
  handleSubmit(values, formikHelpers, eventId, res);
2677
- _context5.next = 53;
2787
+ _context6.next = 53;
2678
2788
  break;
2679
2789
 
2680
2790
  case 50:
2681
- _context5.prev = 50;
2682
- _context5.t1 = _context5["catch"](0);
2791
+ _context6.prev = 50;
2792
+ _context6.t1 = _context6["catch"](0);
2683
2793
 
2684
- if (axios.isAxiosError(_context5.t1)) {
2685
- if (((_e$response2 = _context5.t1.response) == null ? void 0 : _e$response2.data.error) === 'invalid_token') {
2794
+ if (axios.isAxiosError(_context6.t1)) {
2795
+ if (((_e$response2 = _context6.t1.response) == null ? void 0 : _e$response2.data.error) === 'invalid_token') {
2686
2796
  if (isWindowDefined) {
2687
2797
  window.localStorage.removeItem('user_data');
2688
2798
  window.localStorage.removeItem('access_token');
@@ -2691,23 +2801,23 @@ var BillingInfoContainer = function BillingInfoContainer(_ref3) {
2691
2801
  }
2692
2802
  }
2693
2803
 
2694
- if ((_e$response3 = _context5.t1.response) != null && _e$response3.data.message) {
2804
+ if ((_e$response3 = _context6.t1.response) != null && _e$response3.data.message) {
2695
2805
  if (typeof document !== undefined) {
2696
2806
  document.body.scrollTop = document.documentElement.scrollTop = 0;
2697
2807
  }
2698
2808
 
2699
- setError(_get(_context5.t1, 'response.data.message'));
2809
+ setError(_get(_context6.t1, 'response.data.message'));
2700
2810
  }
2701
2811
 
2702
- onSubmitError(_context5.t1);
2812
+ onSubmitError(_context6.t1);
2703
2813
  }
2704
2814
 
2705
2815
  case 53:
2706
2816
  case "end":
2707
- return _context5.stop();
2817
+ return _context6.stop();
2708
2818
  }
2709
2819
  }
2710
- }, _callee5, null, [[0, 50], [20, 31]]);
2820
+ }, _callee6, null, [[0, 50], [20, 31]]);
2711
2821
  }));
2712
2822
 
2713
2823
  function onSubmit(_x2, _x3) {
@@ -3135,6 +3245,63 @@ var CheckoutForm = function CheckoutForm(_ref) {
3135
3245
  }) : "Pay " + getCurrencySymbolByCurrency(currency) + total))));
3136
3246
  };
3137
3247
 
3248
+ var showZero = function showZero(value) {
3249
+ if (value === void 0) {
3250
+ value = 0;
3251
+ }
3252
+
3253
+ var intNumber = Number(value);
3254
+ return _isNumber(intNumber) ? intNumber >= 0 && intNumber < 10 ? '0' + intNumber : intNumber : null;
3255
+ };
3256
+
3257
+ var TimerWidget = function TimerWidget(_ref) {
3258
+ var expires_at = _ref.expires_at,
3259
+ buyLoading = _ref.buyLoading,
3260
+ _ref$onCountdownFinis = _ref.onCountdownFinish,
3261
+ onCountdownFinish = _ref$onCountdownFinis === void 0 ? function () {} : _ref$onCountdownFinis;
3262
+
3263
+ var _useState = React.useState(true),
3264
+ showTimer = _useState[0],
3265
+ setShowTimer = _useState[1];
3266
+
3267
+ var handleCountdownFinish = function handleCountdownFinish() {
3268
+ setShowTimer(false);
3269
+
3270
+ if (!buyLoading) {
3271
+ onCountdownFinish();
3272
+ }
3273
+ };
3274
+
3275
+ var _renderer = function renderer(_ref2) {
3276
+ var minutes = _ref2.minutes,
3277
+ seconds = _ref2.seconds,
3278
+ completed = _ref2.completed,
3279
+ handleCountdownFinish = _ref2.handleCountdownFinish;
3280
+
3281
+ if (completed) {
3282
+ handleCountdownFinish();
3283
+ return null;
3284
+ }
3285
+
3286
+ return React__default.createElement("span", null, showZero(minutes), ":", showZero(seconds));
3287
+ };
3288
+
3289
+ return showTimer && !!expires_at ? React__default.createElement("div", {
3290
+ className: "timer"
3291
+ }, React__default.createElement("div", {
3292
+ className: "toast-message"
3293
+ }, React__default.createElement("p", null, "Please complete your purchase before the timer reaches zero."), React__default.createElement("p", {
3294
+ className: "countdown"
3295
+ }, React__default.createElement(Countdown$1, {
3296
+ date: Date.now() + expires_at * 1000,
3297
+ renderer: function renderer(props) {
3298
+ return _renderer(_extends({}, props, {
3299
+ handleCountdownFinish: handleCountdownFinish
3300
+ }));
3301
+ }
3302
+ })))) : null;
3303
+ };
3304
+
3138
3305
  var publishableKey = CONFIGS.STRIPE_PUBLISHABLE_KEY || '';
3139
3306
 
3140
3307
  var getStripePromise = function getStripePromise(reviewData) {
@@ -3195,7 +3362,11 @@ var PaymentContainer = function PaymentContainer(_ref) {
3195
3362
  _ref$disableZipSectio = _ref.disableZipSection,
3196
3363
  disableZipSection = _ref$disableZipSectio === void 0 ? false : _ref$disableZipSectio,
3197
3364
  themeOptions = _ref.themeOptions,
3198
- elementsOptions = _ref.elementsOptions;
3365
+ elementsOptions = _ref.elementsOptions,
3366
+ _ref$onCountdownFinis = _ref.onCountdownFinish,
3367
+ onCountdownFinish = _ref$onCountdownFinis === void 0 ? function () {} : _ref$onCountdownFinis,
3368
+ _ref$enableTimer = _ref.enableTimer,
3369
+ enableTimer = _ref$enableTimer === void 0 ? false : _ref$enableTimer;
3199
3370
 
3200
3371
  var _useState = React.useState(initialReviewValues),
3201
3372
  reviewData = _useState[0],
@@ -3384,7 +3555,11 @@ var PaymentContainer = function PaymentContainer(_ref) {
3384
3555
  theme: themeMui
3385
3556
  }, React__default.createElement("div", {
3386
3557
  className: "payment_page"
3387
- }, error && React__default.createElement(Alert, {
3558
+ }, !paymentIsLoading && !error && enableTimer && React__default.createElement(TimerWidget, {
3559
+ expires_at: _get(reviewData, 'expires_at', 0),
3560
+ buyLoading: paymentIsLoading,
3561
+ onCountdownFinish: onCountdownFinish
3562
+ }), error && React__default.createElement(Alert, {
3388
3563
  severity: "error",
3389
3564
  onClose: onErrorClose,
3390
3565
  variant: "filled"
@@ -3807,9 +3982,10 @@ var TicketRow = function TicketRow(_ref) {
3807
3982
  selectedTickets = _ref.selectedTickets,
3808
3983
  handleTicketSelect = _ref.handleTicketSelect;
3809
3984
  var soldOutMessage = ticketTier.soldOutMessage ? ("" + ticketTier.soldOutMessage).toUpperCase() : 'SOLD OUT';
3810
- var isSalesClosed = !ticketTier.salesStarted || ticketTier.salesEnded || !_has(ticketTier, 'maxQuantity') || ticketTier.maxQuantity === 0;
3985
+ var isSalesClosed = !ticketTier.salesStarted || ticketTier.salesEnded;
3811
3986
  var options = getTicketSelectOptions(ticketTier.maxQuantity, ticketTier.minQuantity, ticketTier.multiplier);
3812
- var onSaleContent = isSalesClosed ? null : React__default.createElement("div", {
3987
+ var ticketsClosedMessage = !ticketTier.salesStarted ? 'Sales not started' : 'Sales Ended';
3988
+ var onSaleContent = isSalesClosed ? ticketsClosedMessage : React__default.createElement("div", {
3813
3989
  className: "get-tickets"
3814
3990
  }, React__default.createElement(Box, {
3815
3991
  className: "get-tickets__selectbox"
@@ -3845,10 +4021,6 @@ var TicketRow = function TicketRow(_ref) {
3845
4021
  returnValue = soldOutMessage;
3846
4022
  }
3847
4023
 
3848
- if (!+ticketTier.cost && !+ticketTier.price) {
3849
- returnValue = 'FREE';
3850
- }
3851
-
3852
4024
  if (ticketTier.displayTicket) {
3853
4025
  returnValue = onSaleContent;
3854
4026
  }
@@ -3882,6 +4054,8 @@ var TicketsSection = function TicketsSection(_ref) {
3882
4054
  ticketIsDiscounted = true;
3883
4055
  }
3884
4056
 
4057
+ var ticketIsFree = (+ticket.cost || +ticket.price) === 0;
4058
+ var ticketPrice = isSoldOut ? 'SOLD OUT' : ticketIsFree ? 'FREE' : "$ " + (+ticket.cost || +ticket.price).toFixed(2);
3885
4059
  return React__default.createElement("div", {
3886
4060
  key: ticket.id || ticket.name,
3887
4061
  className: "event-detail__tier " + (isSoldOut ? 'disabled' : '')
@@ -3893,21 +4067,19 @@ var TicketsSection = function TicketsSection(_ref) {
3893
4067
  className: "event-detail__tier-price"
3894
4068
  }, ticketIsDiscounted && React__default.createElement("p", {
3895
4069
  className: "old-price"
3896
- }, "$ ", (+ticket.oldPrice).toFixed(2)), React__default.createElement("p", null, isSoldOut ? 'SOLD OUT' : "$ " + (+ticket.cost || +ticket.price).toFixed(2)), !isSoldOut && React__default.createElement("p", {
4070
+ }, "$ ", (+ticket.oldPrice).toFixed(2)), React__default.createElement("p", null, ticketPrice), !isSoldOut && !ticketIsFree && React__default.createElement("p", {
3897
4071
  className: "fees"
3898
4072
  }, ticket.taxesIncluded ? '(incl. Fees)' : '(excl. Fees)')), React__default.createElement("div", {
3899
4073
  className: "event-detail__tier-state",
3900
4074
  style: {
3901
4075
  minWidth: 55
3902
4076
  }
3903
- }, ticket.salesStarted ? React__default.createElement(TicketRow, {
4077
+ }, React__default.createElement(TicketRow, {
3904
4078
  ticketTier: ticket,
3905
4079
  prevTicketTier: arr[i - 1],
3906
4080
  selectedTickets: selectedTickets,
3907
4081
  handleTicketSelect: ticketSelect
3908
- }) : React__default.createElement("p", {
3909
- className: 'ticket-not-started-message'
3910
- }, "Sales not started"))));
4082
+ }))));
3911
4083
  }));
3912
4084
  };
3913
4085
 
@@ -4255,7 +4427,9 @@ var TicketsContainer = function TicketsContainer(_ref) {
4255
4427
  _ref$isAccessCodeEnab = _ref.isAccessCodeEnabled,
4256
4428
  isAccessCodeEnabled = _ref$isAccessCodeEnab === void 0 ? false : _ref$isAccessCodeEnab,
4257
4429
  _ref$hideSessionButto = _ref.hideSessionButtons,
4258
- hideSessionButtons = _ref$hideSessionButto === void 0 ? false : _ref$hideSessionButto;
4430
+ hideSessionButtons = _ref$hideSessionButto === void 0 ? false : _ref$hideSessionButto,
4431
+ _ref$hideWaitingList = _ref.hideWaitingList,
4432
+ hideWaitingList = _ref$hideWaitingList === void 0 ? false : _ref$hideWaitingList;
4259
4433
 
4260
4434
  var _useState = React.useState({}),
4261
4435
  selectedTickets = _useState[0],
@@ -4322,7 +4496,7 @@ var TicketsContainer = function TicketsContainer(_ref) {
4322
4496
  }
4323
4497
  }, []);
4324
4498
  React.useEffect(function () {
4325
- getTicketsApi();
4499
+ !!eventId && getTicketsApi();
4326
4500
  }, [eventId, promoCodeUpdated]);
4327
4501
 
4328
4502
  var handleLogout = function handleLogout() {
@@ -4442,7 +4616,7 @@ var TicketsContainer = function TicketsContainer(_ref) {
4442
4616
  var _ref3 = _asyncToGenerator( /*#__PURE__*/runtime_1.mark(function _callee() {
4443
4617
  var _product_options, _product_options2, _ticket_types;
4444
4618
 
4445
- var ticket, optionName, ticketId, ticketQuantity, data, result, _result$data$data$att, _result$data, _result$data$data, _result$data$data$att2, _result$data$data$att3, _result$data2, _result$data2$data, _result$data2$data$at, _result$data$data$att4, _result$data3, _result$data3$data, _result$data3$data$at, skipBillingPage, nameIsRequired, ageIsRequired, hash, _isWindowDefined, userData, access_token, ticketsQuantity, checkoutBody, checkoutResult;
4619
+ var ticket, optionName, ticketId, ticketQuantity, data, result, _result$data$data$att, _result$data, _result$data$data, _result$data$data$att2, _result$data$data$att3, _result$data2, _result$data2$data, _result$data2$data$at, _result$data$data$att4, _result$data3, _result$data3$data, _result$data3$data$at, skipBillingPage, nameIsRequired, ageIsRequired, hash, _isWindowDefined, userData, access_token, checkoutBody, checkoutResult;
4446
4620
 
4447
4621
  return runtime_1.wrap(function _callee$(_context) {
4448
4622
  while (1) {
@@ -4475,7 +4649,7 @@ var TicketsContainer = function TicketsContainer(_ref) {
4475
4649
  result = _context.sent;
4476
4650
 
4477
4651
  if (!(result.status === 200)) {
4478
- _context.next = 27;
4652
+ _context.next = 26;
4479
4653
  break;
4480
4654
  }
4481
4655
 
@@ -4486,7 +4660,7 @@ var TicketsContainer = function TicketsContainer(_ref) {
4486
4660
  hash = '';
4487
4661
 
4488
4662
  if (!skipBillingPage) {
4489
- _context.next = 26;
4663
+ _context.next = 25;
4490
4664
  break;
4491
4665
  }
4492
4666
 
@@ -4494,16 +4668,15 @@ var TicketsContainer = function TicketsContainer(_ref) {
4494
4668
  _isWindowDefined = typeof window !== 'undefined';
4495
4669
  userData = _isWindowDefined && window.localStorage.getItem('user_data') ? JSON.parse(window.localStorage.getItem('user_data') || '') : {};
4496
4670
  access_token = _isWindowDefined && window.localStorage.getItem('access_token') ? window.localStorage.getItem('access_token') || '' : '';
4497
- ticketsQuantity = Object.keys(selectedTickets).length;
4498
- checkoutBody = createCheckoutDataBodyWithDefaultHolder(ticketsQuantity, userData);
4499
- _context.next = 24;
4671
+ checkoutBody = createCheckoutDataBodyWithDefaultHolder(ticketQuantity, userData);
4672
+ _context.next = 23;
4500
4673
  return postOnCheckout(checkoutBody, access_token);
4501
4674
 
4502
- case 24:
4675
+ case 23:
4503
4676
  checkoutResult = _context.sent;
4504
4677
  hash = _get(checkoutResult, 'data.data.attributes.hash');
4505
4678
 
4506
- case 26:
4679
+ case 25:
4507
4680
  onAddToCartSuccess({
4508
4681
  skip_billing_page: skipBillingPage,
4509
4682
  names_required: nameIsRequired,
@@ -4512,29 +4685,29 @@ var TicketsContainer = function TicketsContainer(_ref) {
4512
4685
  hash: hash
4513
4686
  });
4514
4687
 
4515
- case 27:
4516
- _context.next = 32;
4688
+ case 26:
4689
+ _context.next = 31;
4517
4690
  break;
4518
4691
 
4519
- case 29:
4520
- _context.prev = 29;
4692
+ case 28:
4693
+ _context.prev = 28;
4521
4694
  _context.t0 = _context["catch"](6);
4522
4695
 
4523
4696
  if (axios.isAxiosError(_context.t0)) {
4524
4697
  onAddToCartError(_context.t0);
4525
4698
  }
4526
4699
 
4527
- case 32:
4528
- _context.prev = 32;
4700
+ case 31:
4701
+ _context.prev = 31;
4529
4702
  setHandleBookIsLoading(false);
4530
- return _context.finish(32);
4703
+ return _context.finish(31);
4531
4704
 
4532
- case 35:
4705
+ case 34:
4533
4706
  case "end":
4534
4707
  return _context.stop();
4535
4708
  }
4536
4709
  }
4537
- }, _callee, null, [[6, 29, 32, 35]]);
4710
+ }, _callee, null, [[6, 28, 31, 34]]);
4538
4711
  }));
4539
4712
 
4540
4713
  return function handleBook() {
@@ -4585,7 +4758,7 @@ var TicketsContainer = function TicketsContainer(_ref) {
4585
4758
  title: "Sales start in:",
4586
4759
  message: "No tickets are currently available for this event.",
4587
4760
  callback: updateTickets
4588
- }) : null, showWaitingList && event.salesStarted && React__default.createElement(WaitingList, {
4761
+ }) : null, showWaitingList && event.salesStarted && !hideWaitingList && React__default.createElement(WaitingList, {
4589
4762
  tickets: tickets,
4590
4763
  eventId: eventId
4591
4764
  }), React__default.createElement(PromoCodeSection, {