tf-checkout-react 1.6.6-beta.18 → 1.6.6-beta.19

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 (29) hide show
  1. package/dist/adapters/customFields.d.ts +1 -0
  2. package/dist/api/common.d.ts +1 -0
  3. package/dist/api/index.d.ts +1 -0
  4. package/dist/components/addonsContainer/AddonComponent.d.ts +5 -1
  5. package/dist/components/addonsContainer/index.d.ts +3 -1
  6. package/dist/components/billing-info-container/index.d.ts +1 -0
  7. package/dist/components/ticketsContainer/TimeSlotsSection.d.ts +17 -0
  8. package/dist/tf-checkout-react.cjs.development.js +888 -635
  9. package/dist/tf-checkout-react.cjs.development.js.map +1 -1
  10. package/dist/tf-checkout-react.cjs.production.min.js +1 -1
  11. package/dist/tf-checkout-react.cjs.production.min.js.map +1 -1
  12. package/dist/tf-checkout-react.esm.js +889 -636
  13. package/dist/tf-checkout-react.esm.js.map +1 -1
  14. package/dist/types/checkoutPageConfigs.d.ts +1 -1
  15. package/dist/utils/customFields.d.ts +11 -0
  16. package/package.json +1 -1
  17. package/src/adapters/customFields.ts +7 -1
  18. package/src/api/common.ts +6 -0
  19. package/src/components/addonsContainer/AddonComponent.tsx +65 -11
  20. package/src/components/addonsContainer/index.tsx +15 -2
  21. package/src/components/billing-info-container/index.tsx +9 -1
  22. package/src/components/ticketsContainer/TicketRow.tsx +1 -1
  23. package/src/components/ticketsContainer/TicketsSection.tsx +2 -2
  24. package/src/components/ticketsContainer/TimeSlotsSection.tsx +118 -0
  25. package/src/components/ticketsContainer/index.tsx +49 -12
  26. package/src/hoc/CustomFields/index.tsx +8 -0
  27. package/src/types/api/common.d.ts +4 -0
  28. package/src/types/checkoutPageConfigs.ts +1 -1
  29. package/src/utils/customFields.ts +22 -0
@@ -28,6 +28,8 @@ var Countdown$1 = _interopDefault(require('react-countdown'));
28
28
  var SVG = _interopDefault(require('react-inlinesvg'));
29
29
  var _isNumber = _interopDefault(require('lodash/isNumber'));
30
30
  var _isNull = _interopDefault(require('lodash/isNull'));
31
+ var _flatMapDeep = _interopDefault(require('lodash/flatMapDeep'));
32
+ var _isArray = _interopDefault(require('lodash/isArray'));
31
33
  var Checkbox$1 = _interopDefault(require('@mui/material/Checkbox'));
32
34
  var FormControlLabel = _interopDefault(require('@mui/material/FormControlLabel'));
33
35
  var FormGroup = _interopDefault(require('@mui/material/FormGroup'));
@@ -53,8 +55,6 @@ var RadioGroup = _interopDefault(require('@mui/material/RadioGroup'));
53
55
  var _reverse = _interopDefault(require('lodash/reverse'));
54
56
  var _sortBy = _interopDefault(require('lodash/sortBy'));
55
57
  var Yup = require('yup');
56
- var _flatMapDeep = _interopDefault(require('lodash/flatMapDeep'));
57
- var _isArray = _interopDefault(require('lodash/isArray'));
58
58
  var Alert = _interopDefault(require('@mui/material/Alert'));
59
59
  var Container = _interopDefault(require('@mui/material/Container'));
60
60
  var reactStripeJs = require('@stripe/react-stripe-js');
@@ -808,6 +808,26 @@ var getDataWithCustomFields = function getDataWithCustomFields(initialData, tick
808
808
  ticketHoldersWithCustomFields: ticketHoldersWithCustomFields
809
809
  };
810
810
  };
811
+ var getAddOnDataWithCustomFields = function getAddOnDataWithCustomFields(customFields) {
812
+ // Custom Fields are not specified case
813
+ if (_isEmpty(customFields)) {
814
+ return {
815
+ addOnDataWithCustomFields: {}
816
+ };
817
+ }
818
+ // Add Custom Fields for Order
819
+ var orderWithCustomFields = {
820
+ id: 1,
821
+ groupClassname: 'billing-info-container__customFields',
822
+ groupItems: [].concat(customFields.addOnFields)
823
+ };
824
+ var addOnDataWithCustomFields = {
825
+ fields: orderWithCustomFields
826
+ };
827
+ return {
828
+ addOnDataWithCustomFields: addOnDataWithCustomFields
829
+ };
830
+ };
811
831
  var getFieldsKeys = function getFieldsKeys(customFields) {
812
832
  return _map(customFields, function (field) {
813
833
  return field.name;
@@ -940,19 +960,25 @@ var fieldDataAdapter = function fieldDataAdapter(field) {
940
960
  var customFieldsDataAdapter = function customFieldsDataAdapter(data) {
941
961
  var adaptedTicketFields = [];
942
962
  var adaptedOrderFields = [];
963
+ var adaptedAddOnFields = [];
943
964
  _forEach(data, function (field) {
944
965
  var ticketFields = _get(field, 'ticket.group.fields');
945
966
  var orderFields = _get(field, 'order.group.fields');
967
+ var addOnFields = _get(field, 'add-on.group.fields');
946
968
  _forEach(ticketFields, function (ticketField) {
947
969
  adaptedTicketFields.push(fieldDataAdapter(ticketField));
948
970
  });
949
971
  _forEach(orderFields, function (orderField) {
950
972
  adaptedOrderFields.push(fieldDataAdapter(orderField));
951
973
  });
974
+ _forEach(addOnFields, function (addOnField) {
975
+ adaptedAddOnFields.push(fieldDataAdapter(addOnField));
976
+ });
952
977
  });
953
978
  return {
954
979
  ticketsFields: adaptedTicketFields,
955
- orderFields: adaptedOrderFields
980
+ orderFields: adaptedOrderFields,
981
+ addOnFields: adaptedAddOnFields
956
982
  };
957
983
  };
958
984
 
@@ -1264,14 +1290,14 @@ var getTickets = /*#__PURE__*/function () {
1264
1290
  return _ref2.apply(this, arguments);
1265
1291
  };
1266
1292
  }();
1267
- var getCountries = /*#__PURE__*/function () {
1268
- var _ref3 = /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {
1293
+ var getTimeSlotsData = /*#__PURE__*/function () {
1294
+ var _ref3 = /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(eventId) {
1269
1295
  var response;
1270
1296
  return _regeneratorRuntime().wrap(function _callee3$(_context3) {
1271
1297
  while (1) switch (_context3.prev = _context3.next) {
1272
1298
  case 0:
1273
1299
  _context3.next = 2;
1274
- return publicRequest.get('/countries/list');
1300
+ return publicRequest.get("/event/" + eventId + "/time-slot-groups-dates/");
1275
1301
  case 2:
1276
1302
  response = _context3.sent;
1277
1303
  return _context3.abrupt("return", response.data);
@@ -1281,18 +1307,18 @@ var getCountries = /*#__PURE__*/function () {
1281
1307
  }
1282
1308
  }, _callee3);
1283
1309
  }));
1284
- return function getCountries() {
1310
+ return function getTimeSlotsData(_x6) {
1285
1311
  return _ref3.apply(this, arguments);
1286
1312
  };
1287
1313
  }();
1288
- var getStates = /*#__PURE__*/function () {
1289
- var _ref4 = /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4(countryId) {
1314
+ var getCountries = /*#__PURE__*/function () {
1315
+ var _ref4 = /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4() {
1290
1316
  var response;
1291
1317
  return _regeneratorRuntime().wrap(function _callee4$(_context4) {
1292
1318
  while (1) switch (_context4.prev = _context4.next) {
1293
1319
  case 0:
1294
1320
  _context4.next = 2;
1295
- return publicRequest.get("/countries/" + countryId + "/states/");
1321
+ return publicRequest.get('/countries/list');
1296
1322
  case 2:
1297
1323
  response = _context4.sent;
1298
1324
  return _context4.abrupt("return", response.data);
@@ -1302,18 +1328,18 @@ var getStates = /*#__PURE__*/function () {
1302
1328
  }
1303
1329
  }, _callee4);
1304
1330
  }));
1305
- return function getStates(_x6) {
1331
+ return function getCountries() {
1306
1332
  return _ref4.apply(this, arguments);
1307
1333
  };
1308
1334
  }();
1309
- var sendRSVPInfo = /*#__PURE__*/function () {
1310
- var _ref5 = /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee5(eventId, data) {
1335
+ var getStates = /*#__PURE__*/function () {
1336
+ var _ref5 = /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee5(countryId) {
1311
1337
  var response;
1312
1338
  return _regeneratorRuntime().wrap(function _callee5$(_context5) {
1313
1339
  while (1) switch (_context5.prev = _context5.next) {
1314
1340
  case 0:
1315
1341
  _context5.next = 2;
1316
- return publicRequest.post("v1/event/" + eventId + "/send-rsvp-info", data);
1342
+ return publicRequest.get("/countries/" + countryId + "/states/");
1317
1343
  case 2:
1318
1344
  response = _context5.sent;
1319
1345
  return _context5.abrupt("return", response.data);
@@ -1323,20 +1349,18 @@ var sendRSVPInfo = /*#__PURE__*/function () {
1323
1349
  }
1324
1350
  }, _callee5);
1325
1351
  }));
1326
- return function sendRSVPInfo(_x7, _x8) {
1352
+ return function getStates(_x7) {
1327
1353
  return _ref5.apply(this, arguments);
1328
1354
  };
1329
1355
  }();
1330
- var addToWaitingList = /*#__PURE__*/function () {
1331
- var _ref6 = /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee6(id, data) {
1356
+ var sendRSVPInfo = /*#__PURE__*/function () {
1357
+ var _ref6 = /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee6(eventId, data) {
1332
1358
  var response;
1333
1359
  return _regeneratorRuntime().wrap(function _callee6$(_context6) {
1334
1360
  while (1) switch (_context6.prev = _context6.next) {
1335
1361
  case 0:
1336
1362
  _context6.next = 2;
1337
- return publicRequest.post("v1/event/" + id + "/add_to_waiting_list", {
1338
- data: data
1339
- });
1363
+ return publicRequest.post("v1/event/" + eventId + "/send-rsvp-info", data);
1340
1364
  case 2:
1341
1365
  response = _context6.sent;
1342
1366
  return _context6.abrupt("return", response.data);
@@ -1346,19 +1370,19 @@ var addToWaitingList = /*#__PURE__*/function () {
1346
1370
  }
1347
1371
  }, _callee6);
1348
1372
  }));
1349
- return function addToWaitingList(_x9, _x10) {
1373
+ return function sendRSVPInfo(_x8, _x9) {
1350
1374
  return _ref6.apply(this, arguments);
1351
1375
  };
1352
1376
  }();
1353
- var postReferralVisits = /*#__PURE__*/function () {
1354
- var _ref7 = /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee7(eventId, referralId) {
1377
+ var addToWaitingList = /*#__PURE__*/function () {
1378
+ var _ref7 = /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee7(id, data) {
1355
1379
  var response;
1356
1380
  return _regeneratorRuntime().wrap(function _callee7$(_context7) {
1357
1381
  while (1) switch (_context7.prev = _context7.next) {
1358
1382
  case 0:
1359
1383
  _context7.next = 2;
1360
- return publicRequest.post("v1/event/" + eventId + "/referrer/", {
1361
- referrer: "" + referralId
1384
+ return publicRequest.post("v1/event/" + id + "/add_to_waiting_list", {
1385
+ data: data
1362
1386
  });
1363
1387
  case 2:
1364
1388
  response = _context7.sent;
@@ -1369,18 +1393,20 @@ var postReferralVisits = /*#__PURE__*/function () {
1369
1393
  }
1370
1394
  }, _callee7);
1371
1395
  }));
1372
- return function postReferralVisits(_x11, _x12) {
1396
+ return function addToWaitingList(_x10, _x11) {
1373
1397
  return _ref7.apply(this, arguments);
1374
1398
  };
1375
1399
  }();
1376
- var validatePhoneNumber = /*#__PURE__*/function () {
1377
- var _ref8 = /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee8(phone) {
1400
+ var postReferralVisits = /*#__PURE__*/function () {
1401
+ var _ref8 = /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee8(eventId, referralId) {
1378
1402
  var response;
1379
1403
  return _regeneratorRuntime().wrap(function _callee8$(_context8) {
1380
1404
  while (1) switch (_context8.prev = _context8.next) {
1381
1405
  case 0:
1382
1406
  _context8.next = 2;
1383
- return publicRequest.get("/v1/account/validate_phone?phone=" + phone);
1407
+ return publicRequest.post("v1/event/" + eventId + "/referrer/", {
1408
+ referrer: "" + referralId
1409
+ });
1384
1410
  case 2:
1385
1411
  response = _context8.sent;
1386
1412
  return _context8.abrupt("return", response.data);
@@ -1390,10 +1416,31 @@ var validatePhoneNumber = /*#__PURE__*/function () {
1390
1416
  }
1391
1417
  }, _callee8);
1392
1418
  }));
1393
- return function validatePhoneNumber(_x13) {
1419
+ return function postReferralVisits(_x12, _x13) {
1394
1420
  return _ref8.apply(this, arguments);
1395
1421
  };
1396
1422
  }();
1423
+ var validatePhoneNumber = /*#__PURE__*/function () {
1424
+ var _ref9 = /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee9(phone) {
1425
+ var response;
1426
+ return _regeneratorRuntime().wrap(function _callee9$(_context9) {
1427
+ while (1) switch (_context9.prev = _context9.next) {
1428
+ case 0:
1429
+ _context9.next = 2;
1430
+ return publicRequest.get("/v1/account/validate_phone?phone=" + phone);
1431
+ case 2:
1432
+ response = _context9.sent;
1433
+ return _context9.abrupt("return", response.data);
1434
+ case 4:
1435
+ case "end":
1436
+ return _context9.stop();
1437
+ }
1438
+ }, _callee9);
1439
+ }));
1440
+ return function validatePhoneNumber(_x14) {
1441
+ return _ref9.apply(this, arguments);
1442
+ };
1443
+ }();
1397
1444
 
1398
1445
  var getPaymentData = /*#__PURE__*/function () {
1399
1446
  var _ref = /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(hash) {
@@ -2078,9 +2125,12 @@ var withCustomFields = function withCustomFields(Children) {
2078
2125
  var _useState4 = React.useState([]),
2079
2126
  customFieldsTicketHolderKeys = _useState4[0],
2080
2127
  setCustomFieldsTicketHolderKeys = _useState4[1];
2128
+ var _useState5 = React.useState([]),
2129
+ customFieldsAddOnKeys = _useState5[0],
2130
+ setCustomFieldsAddOnKeys = _useState5[1];
2081
2131
  var getFields = /*#__PURE__*/function () {
2082
2132
  var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
2083
- var eventId, customFields, orderFieldsKeys, ticketHoldersFieldsKeys;
2133
+ var eventId, customFields, orderFieldsKeys, ticketHoldersFieldsKeys, addOnFieldsKeys;
2084
2134
  return _regeneratorRuntime().wrap(function _callee$(_context) {
2085
2135
  while (1) switch (_context.prev = _context.next) {
2086
2136
  case 0:
@@ -2092,25 +2142,27 @@ var withCustomFields = function withCustomFields(Children) {
2092
2142
  customFields = _context.sent;
2093
2143
  orderFieldsKeys = getFieldsKeys(_get(customFields, 'orderFields', []));
2094
2144
  ticketHoldersFieldsKeys = getFieldsKeys(_get(customFields, 'ticketsFields', []));
2145
+ addOnFieldsKeys = getFieldsKeys(_get(customFields, 'addOnFields', []));
2095
2146
  setCustomFieldsTicketHolderKeys(ticketHoldersFieldsKeys);
2096
2147
  setCustomFieldsOrderKeys(orderFieldsKeys);
2097
2148
  setCustomFieldsData(customFields);
2149
+ setCustomFieldsAddOnKeys(addOnFieldsKeys);
2098
2150
  onGetCustomFieldsSuccess(customFields);
2099
- _context.next = 16;
2151
+ _context.next = 18;
2100
2152
  break;
2101
- case 13:
2102
- _context.prev = 13;
2153
+ case 15:
2154
+ _context.prev = 15;
2103
2155
  _context.t0 = _context["catch"](0);
2104
2156
  onGetCustomFieldsError(_context.t0);
2105
- case 16:
2106
- _context.prev = 16;
2157
+ case 18:
2158
+ _context.prev = 18;
2107
2159
  setLoading(false);
2108
- return _context.finish(16);
2109
- case 19:
2160
+ return _context.finish(18);
2161
+ case 21:
2110
2162
  case "end":
2111
2163
  return _context.stop();
2112
2164
  }
2113
- }, _callee, null, [[0, 13, 16, 19]]);
2165
+ }, _callee, null, [[0, 15, 18, 21]]);
2114
2166
  }));
2115
2167
  return function getFields() {
2116
2168
  return _ref.apply(this, arguments);
@@ -2124,6 +2176,8 @@ var withCustomFields = function withCustomFields(Children) {
2124
2176
  var _getDataWithCustomFie = getDataWithCustomFields(data, ticketHoldersFields, customFieldsData),
2125
2177
  dataWithCustomFields = _getDataWithCustomFie.dataWithCustomFields,
2126
2178
  ticketHoldersWithCustomFields = _getDataWithCustomFie.ticketHoldersWithCustomFields;
2179
+ var _getAddOnDataWithCust = getAddOnDataWithCustomFields(customFieldsData),
2180
+ addOnDataWithCustomFields = _getAddOnDataWithCust.addOnDataWithCustomFields;
2127
2181
  if (lodaing) {
2128
2182
  return React__default.createElement(material.CircularProgress, {
2129
2183
  size: 50
@@ -2133,7 +2187,9 @@ var withCustomFields = function withCustomFields(Children) {
2133
2187
  data: dataWithCustomFields,
2134
2188
  ticketHoldersFields: ticketHoldersWithCustomFields,
2135
2189
  customFieldsOrderKeys: customFieldsOrderKeys,
2136
- customFieldsTicketHolderKeys: customFieldsTicketHolderKeys
2190
+ customFieldsTicketHolderKeys: customFieldsTicketHolderKeys,
2191
+ customFieldsAddOnKeys: customFieldsAddOnKeys,
2192
+ addOnDataWithCustomFields: addOnDataWithCustomFields
2137
2193
  }));
2138
2194
  };
2139
2195
  };
@@ -2515,6 +2571,44 @@ var cartAdapter = function cartAdapter(cart) {
2515
2571
  };
2516
2572
  };
2517
2573
 
2574
+ var emailRegex = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
2575
+ var combineValidators = function combineValidators() {
2576
+ for (var _len = arguments.length, validators = new Array(_len), _key = 0; _key < _len; _key++) {
2577
+ validators[_key] = arguments[_key];
2578
+ }
2579
+ return function () {
2580
+ for (var i = 0; i < validators.length; ++i) {
2581
+ var error_message = validators[i].apply(validators, arguments);
2582
+ if (error_message) return error_message;
2583
+ }
2584
+ };
2585
+ };
2586
+ function isFalsy(item) {
2587
+ try {
2588
+ if (!item ||
2589
+ // handles most, like false, 0, null, etc
2590
+ typeof item === 'object' && Object.keys(item).length === 0 &&
2591
+ // for empty objects, like {}, []
2592
+ !(typeof item.addEventListener === 'function') // omit webpage elements
2593
+ ) {
2594
+ return true;
2595
+ }
2596
+ } catch (err) {
2597
+ return true;
2598
+ }
2599
+ return false;
2600
+ }
2601
+ var requiredValidator = function requiredValidator(value, message) {
2602
+ var errorMessage = '';
2603
+ if (isFalsy(typeof value === 'string' ? value.trim() : value)) {
2604
+ errorMessage = message || 'Required';
2605
+ }
2606
+ return errorMessage;
2607
+ };
2608
+ var emailValidator = function emailValidator(email) {
2609
+ return !emailRegex.test(email) ? 'Please enter a valid email address' : '';
2610
+ };
2611
+
2518
2612
  var CheckboxField = function CheckboxField(_ref) {
2519
2613
  var label = _ref.label,
2520
2614
  field = _ref.field,
@@ -3050,230 +3144,479 @@ var RadioGroupField = function RadioGroupField(_ref) {
3050
3144
  })));
3051
3145
  };
3052
3146
 
3053
- var AddonComponent = function AddonComponent(_ref) {
3054
- var _ref$classNamePrefix = _ref.classNamePrefix,
3055
- classNamePrefix = _ref$classNamePrefix === void 0 ? '' : _ref$classNamePrefix,
3056
- data = _ref.data,
3057
- selectOptions = _ref.selectOptions,
3058
- _ref$handleAddonChang = _ref.handleAddonChange,
3059
- handleAddonChange = _ref$handleAddonChang === void 0 ? _identity : _ref$handleAddonChang;
3060
- var id = data.id,
3061
- name = data.name,
3062
- active = data.active,
3063
- stock = data.stock;
3064
- return React__default.createElement("div", {
3065
- key: id,
3066
- className: classNamePrefix + "_product_select_container"
3067
- }, React__default.createElement("div", {
3068
- className: classNamePrefix + "_product_select_block",
3069
- key: name
3070
- }, React__default.createElement("div", {
3071
- className: classNamePrefix + "_product_size"
3072
- }, name), React__default.createElement("div", {
3073
- className: classNamePrefix + "_product_qty_select_block"
3074
- }, !active || !_isNull(stock) && stock <= 0 ? React__default.createElement("div", {
3075
- className: "sold_out"
3076
- }, "SOLD OUT") : React__default.createElement("div", {
3077
- className: classNamePrefix + "_product_qty_select"
3078
- }, React__default.createElement(formik.Field, {
3079
- name: id,
3080
- selectOptions: selectOptions,
3081
- component: NativeSelectField,
3082
- onChange: function onChange(e) {
3083
- var value = e.target.value;
3084
- handleAddonChange(id, value);
3085
- }
3086
- })))));
3087
- };
3088
-
3089
- var getNormalizedPrice = function getNormalizedPrice(value) {
3090
- var minimizedValue = Number(value) / 100;
3091
- var normalized = minimizedValue.toFixed(2);
3092
- return normalized;
3093
- };
3094
-
3095
- var generateSelectOptions = function generateSelectOptions(minCount, maxCount) {
3096
- if (minCount === void 0) {
3097
- minCount = 1;
3147
+ var _excluded$3 = ["firstName", "lastName", "holderAge", "confirmEmail", "confirmPassword"];
3148
+ var getInitialValues = function getInitialValues(data, propsInitialValues, userValues, ticketHoldersFields, ticketsQuantity) {
3149
+ var _ticketHoldersFields, _ticketHoldersFields$, _ticketHoldersFields$2;
3150
+ if (data === void 0) {
3151
+ data = [];
3098
3152
  }
3099
- if (maxCount === void 0) {
3100
- maxCount = 10;
3153
+ if (propsInitialValues === void 0) {
3154
+ propsInitialValues = {};
3101
3155
  }
3102
- var options = [];
3103
- for (var i = minCount; i <= maxCount; i++) {
3104
- options.push({
3105
- label: i,
3106
- value: i
3107
- });
3156
+ if (userValues === void 0) {
3157
+ userValues = {};
3108
3158
  }
3109
- return options;
3110
- };
3111
- var generateStockBasedOnLimitations = function generateStockBasedOnLimitations(addon, ticketQuantity) {
3112
- // Generate addon available stock count based on limitations
3113
- var flagLimitToTicketQuantity = addon.flagLimitToTicketQuantity,
3114
- maxQuantity = addon.maxQuantity,
3115
- limitPerTicket = addon.limitPerTicket;
3116
- var allowedStockCount;
3117
- // Generate stock
3118
- if (flagLimitToTicketQuantity) {
3119
- // Limited to ticket quantity case
3120
- allowedStockCount = ticketQuantity;
3121
- } else if (maxQuantity && limitPerTicket) {
3122
- var stockBasedOnLimitPerTicket = limitPerTicket * ticketQuantity;
3123
- // Both maximum quantity and limited to per ticket selected case, stock is minimum of them
3124
- allowedStockCount = maxQuantity <= stockBasedOnLimitPerTicket ? maxQuantity : stockBasedOnLimitPerTicket;
3125
- } else if (maxQuantity && !limitPerTicket) {
3126
- // Limited to maximum quantity case
3127
- allowedStockCount = maxQuantity;
3128
- } else if (!maxQuantity && limitPerTicket) {
3129
- // Limited to per ticket case
3130
- allowedStockCount = limitPerTicket * ticketQuantity;
3159
+ if (ticketHoldersFields === void 0) {
3160
+ ticketHoldersFields = {};
3131
3161
  }
3132
- return Number(allowedStockCount);
3133
- };
3134
- var filterStockBasedOnAvailability = function filterStockBasedOnAvailability(generatedStock, availableStock) {
3135
- // Check generated stock count admissibility with addon stock availability
3136
- var filteredStockCount = generatedStock;
3137
- if (generatedStock) {
3138
- if (generatedStock > availableStock && !_isNull(availableStock)) {
3139
- filteredStockCount = availableStock;
3140
- }
3141
- } else {
3142
- // Not set any restriction
3143
- // Here 10 value is business logic
3144
- filteredStockCount = 10;
3145
- if (!_isNull(availableStock) && availableStock < filteredStockCount) {
3146
- filteredStockCount = availableStock;
3162
+ if (ticketsQuantity === void 0) {
3163
+ ticketsQuantity = [];
3164
+ }
3165
+ var results = _flatMapDeep(data, function (_ref) {
3166
+ var fields = _ref.fields;
3167
+ return _map(fields, function (_ref2) {
3168
+ var groupItems = _ref2.groupItems;
3169
+ return _map(groupItems, function (_ref3) {
3170
+ var name = _ref3.name,
3171
+ value = _ref3.value;
3172
+ return {
3173
+ name: name,
3174
+ value: value
3175
+ };
3176
+ });
3177
+ });
3178
+ });
3179
+ // Add Ticket Holder default values for custom fields
3180
+ var ticketHoldersCustomFields = ((_ticketHoldersFields = ticketHoldersFields) == null ? void 0 : (_ticketHoldersFields$ = _ticketHoldersFields.fields) == null ? void 0 : (_ticketHoldersFields$2 = _ticketHoldersFields$.find(function (groupItem) {
3181
+ return groupItem.customFields;
3182
+ })) == null ? void 0 : _ticketHoldersFields$2.groupItems) || [];
3183
+ var ticketHoldersCustomFieldsInitValues = {};
3184
+ var selectedTicketsCount = ticketsQuantity.length || localStorage.getItem('selectedTicketsQuantity') || 0;
3185
+ if (!_isEmpty(ticketHoldersCustomFields)) {
3186
+ for (var _iterator = _createForOfIteratorHelperLoose(ticketHoldersCustomFields), _step; !(_step = _iterator()).done;) {
3187
+ var customField = _step.value;
3188
+ for (var i = 0; i < selectedTicketsCount; i++) {
3189
+ var fieldName = customField.name + "-" + i;
3190
+ var fieldValue = customField.value;
3191
+ ticketHoldersCustomFieldsInitValues[fieldName] = fieldValue;
3192
+ }
3147
3193
  }
3148
3194
  }
3149
- return filteredStockCount;
3150
- };
3151
- var getAddonSelectOptions = function getAddonSelectOptions(addons, choosedTicketCount) {
3152
- var addonsWithOptions = {};
3153
- var groupsWithSelectedVariantsInfo = {};
3154
- var groupsWithVariants = {};
3155
- addons.forEach(function (addon) {
3156
- // Here addon can act either as simple Addon or Addon Group
3157
- var id = addon.id,
3158
- simpleAddonStock = addon.stock,
3159
- variants = addon.variants,
3160
- active = addon.active,
3161
- flagLimitToTicketQuantity = addon.flagLimitToTicketQuantity,
3162
- maxQuantity = addon.maxQuantity,
3163
- limitPerTicket = addon.limitPerTicket;
3164
- if (variants) {
3165
- // Addon Group with inside addon variants case
3166
- variants.forEach(function (variant) {
3167
- var variantId = variant.id,
3168
- variantStock = variant.stock;
3169
- // null checking is for unlimited stock value
3170
- if (active && (variantStock > 0 || _isNull(variantStock))) {
3171
- var _extends3;
3172
- // Generate Addon Group allowed stock count based on limitations
3173
- var stockBasedOnLimitation = generateStockBasedOnLimitations(addon, choosedTicketCount);
3174
- // Detect if group has limitation or not
3175
- if (flagLimitToTicketQuantity || maxQuantity || limitPerTicket) {
3176
- // Generate Group with inside variants info
3177
- if (groupsWithSelectedVariantsInfo[id]) {
3178
- var _extends2;
3179
- // Set group limit
3180
- if (groupsWithSelectedVariantsInfo[id].limit < stockBasedOnLimitation) {
3181
- groupsWithSelectedVariantsInfo[id].limit = stockBasedOnLimitation;
3182
- }
3183
- // Set choosed variants info
3184
- groupsWithSelectedVariantsInfo[id] = _extends({}, groupsWithSelectedVariantsInfo[id], {
3185
- choosedVariants: _extends({}, groupsWithSelectedVariantsInfo[id].choosedVariants, (_extends2 = {}, _extends2[variantId] = 0, _extends2))
3186
- });
3187
- } else {
3188
- var _choosedVariants;
3189
- groupsWithSelectedVariantsInfo[id] = {
3190
- limit: stockBasedOnLimitation,
3191
- selectedCount: 0,
3192
- choosedVariants: (_choosedVariants = {}, _choosedVariants[variantId] = 0, _choosedVariants)
3193
- };
3194
- }
3195
- }
3196
- // Check stock admissibility with addon stock availability
3197
- var allowedVariantStockCount = filterStockBasedOnAvailability(stockBasedOnLimitation, variantStock);
3198
- // Generate options for variant
3199
- var variantOptions = generateSelectOptions(0, allowedVariantStockCount);
3200
- addonsWithOptions[variantId] = [].concat(variantOptions);
3201
- // Generate Group with its variants list
3202
- groupsWithVariants[id] = _extends({}, groupsWithVariants[id], (_extends3 = {}, _extends3[variantId] = allowedVariantStockCount, _extends3));
3203
- }
3204
- });
3205
- } else {
3206
- // Simple addon case, null checking is for unlimited stock value
3207
- if (active && (simpleAddonStock > 0 || _isNull(simpleAddonStock))) {
3208
- // Generate Addon Group allowed stock count based on limitations
3209
- var stockBasedOnLimitation = generateStockBasedOnLimitations(addon, choosedTicketCount);
3210
- // Check stock admissibility with addon stock availability
3211
- var allowedVariantStockCount = filterStockBasedOnAvailability(stockBasedOnLimitation, simpleAddonStock);
3212
- var addonOptions = generateSelectOptions(0, allowedVariantStockCount);
3213
- addonsWithOptions[id] = [].concat(addonOptions);
3214
- }
3215
- }
3195
+ var initialValues = {};
3196
+ _forEach(results, function (groupItem) {
3197
+ var name = groupItem.name,
3198
+ value = groupItem.value;
3199
+ initialValues[name] = value || propsInitialValues[name] || userValues[name] || '';
3216
3200
  });
3217
- return {
3218
- addonsWithOptions: addonsWithOptions,
3219
- groupsWithSelectedVariantsInfo: groupsWithSelectedVariantsInfo,
3220
- groupsWithVariants: groupsWithVariants
3221
- };
3201
+ // set logged in user as first ticket holder
3202
+ initialValues['holderFirstName-0'] = propsInitialValues.firstName || userValues.firstName || '';
3203
+ initialValues['holderLastName-0'] = propsInitialValues.lastName || userValues.lastName || '';
3204
+ initialValues['holderEmail-0'] = propsInitialValues.email || userValues.email || '';
3205
+ return _extends({}, initialValues, ticketHoldersCustomFieldsInitValues);
3222
3206
  };
3223
- var getTicketRelatedAddons = function getTicketRelatedAddons(addons, ticketId) {
3224
- // Filter addons based on choosed ticket
3225
- var filteredAddons = addons.filter(function (addon) {
3226
- return _isNull(addon.prerequisiteTicketTypeIds) || addon.prerequisiteTicketTypeIds.includes(ticketId);
3207
+ var createRegisterFormData = function createRegisterFormData(values, checkoutBody, flagFreeTicket) {
3208
+ if (values === void 0) {
3209
+ values = {};
3210
+ }
3211
+ if (flagFreeTicket === void 0) {
3212
+ flagFreeTicket = false;
3213
+ }
3214
+ var bodyFormData = new FormData();
3215
+ bodyFormData.append('first_name', values.firstName);
3216
+ bodyFormData.append('last_name', values.lastName);
3217
+ bodyFormData.append('email', values.email);
3218
+ bodyFormData.append('password', values.password);
3219
+ bodyFormData.append('password_confirmation', values.confirmPassword);
3220
+ bodyFormData.append('client_id', CONFIGS.CLIENT_ID || 'e9d8f8922797b4621e562255afe90dbf');
3221
+ bodyFormData.append('client_secret', CONFIGS.CLIENT_SECRET || 'b89c191eff22fdcf84ac9bfd88d005355a151ec2c83b26b9');
3222
+ bodyFormData.append('check_cart_expiration', 'true');
3223
+ _forEach(checkoutBody.attributes, function (item, key) {
3224
+ if (!(flagFreeTicket && ['country', 'state', 'city', 'street_address'].includes(key))) {
3225
+ bodyFormData.append(key, item);
3226
+ }
3227
3227
  });
3228
- return filteredAddons;
3228
+ return bodyFormData;
3229
3229
  };
3230
- var getSortedAddons = function getSortedAddons(addons, sortDirection) {
3231
- if (sortDirection === void 0) {
3232
- sortDirection = 'asc';
3230
+ var createCheckoutDataBody = function createCheckoutDataBody(ticketsQuantity, values, logedInValues, includeDob) {
3231
+ if (values === void 0) {
3232
+ values = {};
3233
3233
  }
3234
- var addonsCopy = [].concat(addons);
3235
- addonsCopy.forEach(function (addon) {
3236
- if (addon.variants) {
3237
- var unsortedVariants = [];
3238
- addon.variants.forEach(function (variant) {
3239
- unsortedVariants.push(_extends({}, variant, {
3240
- sortOrder: Number(variant.sortOrder)
3241
- }));
3242
- });
3243
- addon.sortOrder = Number(addon.variants[0].sortOrder);
3244
- var sortedVariants = _sortBy(unsortedVariants, function (variant) {
3245
- return variant.sortOrder;
3246
- });
3247
- addon.variants = sortedVariants;
3248
- } else {
3249
- addon.sortOrder = Number(addon.sortOrder);
3234
+ if (logedInValues === void 0) {
3235
+ logedInValues = {};
3236
+ }
3237
+ if (includeDob === void 0) {
3238
+ includeDob = false;
3239
+ }
3240
+ var _values = values,
3241
+ firstName = _values.firstName,
3242
+ lastName = _values.lastName,
3243
+ holderAge = _values.holderAge,
3244
+ restValues = _objectWithoutPropertiesLoose(_values, _excluded$3);
3245
+ var holders = [];
3246
+ var ticket_holders = [];
3247
+ var _loop = function _loop(i) {
3248
+ var individualHolder = Object.fromEntries(Object.entries(values).filter(function (_ref4) {
3249
+ var key = _ref4[0];
3250
+ return key.includes(String(i));
3251
+ }));
3252
+ holders.push(individualHolder);
3253
+ };
3254
+ for (var i = 0; i <= ticketsQuantity; i++) {
3255
+ _loop(i);
3256
+ }
3257
+ var filteredHolders = holders.filter(function (holder) {
3258
+ return Object.entries(holder).length > 0;
3259
+ });
3260
+ ticket_holders = filteredHolders.map(function (item, index) {
3261
+ return {
3262
+ first_name: !index ? item["holderFirstName-" + index] || logedInValues.firstNameLogged || '' : item["holderFirstName-" + index] || '',
3263
+ last_name: !index ? item["holderLastName-" + index] || logedInValues.lastNameLogged || '' : item["holderLastName-" + index] || '',
3264
+ phone: item["holderPhone-" + index] || '',
3265
+ email: !index ? item["holderEmail-" + index] || logedInValues.emailLogged || '' : item["holderEmail-" + index] || ''
3266
+ };
3267
+ });
3268
+ var filteredRestValue = {};
3269
+ _forEach(restValues, function (value, key) {
3270
+ if (!key.includes('holder')) {
3271
+ filteredRestValue[key] = value;
3250
3272
  }
3251
3273
  });
3252
- var sortedAddons = _sortBy(addonsCopy, function (addon) {
3253
- return addon.sortOrder;
3274
+ var body = {
3275
+ attributes: _extends({}, filteredRestValue, {
3276
+ email: restValues.email || logedInValues.emailLogged,
3277
+ confirm_email: restValues.email || logedInValues.emailLogged,
3278
+ first_name: firstName || logedInValues.firstNameLogged,
3279
+ last_name: lastName || logedInValues.lastNameLogged,
3280
+ ticket_holders: ticket_holders
3281
+ })
3282
+ };
3283
+ if (includeDob) {
3284
+ var holderAgeDate = new Date(holderAge);
3285
+ body.attributes.dob_day = holderAgeDate.getDate();
3286
+ body.attributes.dob_month = holderAgeDate.getMonth() + 1;
3287
+ body.attributes.dob_year = holderAgeDate.getFullYear();
3288
+ }
3289
+ return body;
3290
+ };
3291
+ var getValidateFunctions = function getValidateFunctions(element, states, values, errors) {
3292
+ var validationFunctions = [];
3293
+ if (element.required) {
3294
+ if (element.name !== 'state' || element.name === 'state' && states.length) {
3295
+ validationFunctions.push(requiredValidator);
3296
+ }
3297
+ }
3298
+ if (element.onValidate) {
3299
+ validationFunctions.push(element.onValidate);
3300
+ }
3301
+ if (element.name === 'phone') {
3302
+ var invalidPhone = function invalidPhone() {
3303
+ return errors.phone === 'Invalid phone number' ? 'Invalid phone number' : null;
3304
+ };
3305
+ validationFunctions.push(invalidPhone);
3306
+ }
3307
+ if (element.name === 'confirmEmail') {
3308
+ var isSameEmail = function isSameEmail(confirmEmail) {
3309
+ return values.email !== confirmEmail ? 'Please confirm your email address correctly' : null;
3310
+ };
3311
+ validationFunctions.push(isSameEmail);
3312
+ }
3313
+ if (element.name === 'confirmPassword') {
3314
+ var isSame = function isSame(confirmPassword) {
3315
+ return values.password !== confirmPassword ? 'Password confirmation does not match' : null;
3316
+ };
3317
+ validationFunctions.push(isSame);
3318
+ }
3319
+ return combineValidators.apply(void 0, validationFunctions);
3320
+ };
3321
+ var assingUniqueIds = function assingUniqueIds(data) {
3322
+ if (_get(data[0], 'uniqueId')) {
3323
+ return data;
3324
+ }
3325
+ return _map(data, function (item) {
3326
+ _forEach(item, function (itemValue, key) {
3327
+ if (_isArray(itemValue) && !itemValue.some(function (item) {
3328
+ return typeof item === 'string';
3329
+ })) {
3330
+ item[key] = assingUniqueIds(itemValue);
3331
+ }
3332
+ });
3333
+ return _extends({}, item, {
3334
+ uniqueId: nanoid.nanoid()
3335
+ });
3254
3336
  });
3255
- if (sortDirection === 'desc') {
3256
- return _reverse(sortedAddons);
3337
+ };
3338
+ var isRequiredField = function isRequiredField(element, configs) {
3339
+ var name = element.name,
3340
+ required = element.required;
3341
+ var flagRequirePhone = _get(configs, 'phone_required', false);
3342
+ var collectMandatoryWalletAddress = _get(configs, 'collect_mandatory_wallet_address', false);
3343
+ if (required || name === 'phone' && flagRequirePhone || name === 'data_capture[wallet_address]' && !collectMandatoryWalletAddress) {
3344
+ return true;
3257
3345
  }
3258
- return sortedAddons;
3346
+ return false;
3259
3347
  };
3260
- var isAtLeastOneAddonSelected = function isAtLeastOneAddonSelected(value) {
3261
- var selectedAddons = Object.fromEntries(Object.entries(value).filter(function (_ref) {
3262
- var count = _ref[1];
3263
- return Number(count) !== 0;
3264
- }));
3265
- return !_isEmpty(selectedAddons);
3348
+ var getFieldLabel = function getFieldLabel(element, configs) {
3349
+ if (isRequiredField(element, configs) || React__default.isValidElement(element.label)) {
3350
+ return element.label;
3351
+ }
3352
+ return element.label + " (optional)";
3266
3353
  };
3267
-
3268
- var AddonsContainter = function AddonsContainter(_ref) {
3269
- var _ref$classNamePrefix = _ref.classNamePrefix,
3270
- classNamePrefix = _ref$classNamePrefix === void 0 ? 'add_on' : _ref$classNamePrefix,
3271
- _ref$enableBillingInf = _ref.enableBillingInfoAutoCreate,
3272
- enableBillingInfoAutoCreate = _ref$enableBillingInf === void 0 ? true : _ref$enableBillingInf,
3273
- _ref$enableTimer = _ref.enableTimer,
3274
- enableTimer = _ref$enableTimer === void 0 ? false : _ref$enableTimer,
3275
- _ref$onGetAddonsPageI = _ref.onGetAddonsPageInfoSuccess,
3276
- onGetAddonsPageInfoSuccess = _ref$onGetAddonsPageI === void 0 ? _identity : _ref$onGetAddonsPageI,
3354
+ var getFieldComponent = function getFieldComponent(element) {
3355
+ var type = _get(element, 'type', 'text');
3356
+ var fieldComponentConfigs = {
3357
+ checkbox: CheckboxField,
3358
+ select: CustomField,
3359
+ select_multi: SelectField,
3360
+ phone: PhoneNumberField,
3361
+ date: DatePickerField,
3362
+ radio: RadioGroupField,
3363
+ text: CustomField
3364
+ };
3365
+ var fieldComponent = _get(fieldComponentConfigs, type, CustomField);
3366
+ return fieldComponent;
3367
+ };
3368
+
3369
+ /* eslint-disable @typescript-eslint/no-explicit-any */
3370
+ var AddonComponent = function AddonComponent(_ref) {
3371
+ var _ref$classNamePrefix = _ref.classNamePrefix,
3372
+ classNamePrefix = _ref$classNamePrefix === void 0 ? '' : _ref$classNamePrefix,
3373
+ data = _ref.data,
3374
+ selectOptions = _ref.selectOptions,
3375
+ _ref$handleAddonChang = _ref.handleAddonChange,
3376
+ handleAddonChange = _ref$handleAddonChang === void 0 ? _identity : _ref$handleAddonChang,
3377
+ addOnDataWithCustomFields = _ref.addOnDataWithCustomFields,
3378
+ configs = _ref.configs,
3379
+ values = _ref.values,
3380
+ errors = _ref.errors;
3381
+ var id = data.id,
3382
+ name = data.name,
3383
+ active = data.active,
3384
+ stock = data.stock;
3385
+ return React__default.createElement("div", {
3386
+ key: id,
3387
+ className: classNamePrefix + "_product_select_container"
3388
+ }, React__default.createElement("div", {
3389
+ className: classNamePrefix + "_product_select_block",
3390
+ key: name
3391
+ }, React__default.createElement("div", {
3392
+ className: classNamePrefix + "_product_size"
3393
+ }, name), React__default.createElement("div", {
3394
+ className: classNamePrefix + "_product_qty_select_block"
3395
+ }, !active || !_isNull(stock) && stock <= 0 ? React__default.createElement("div", {
3396
+ className: "sold_out"
3397
+ }, "SOLD OUT") : React__default.createElement(React__default.Fragment, null, React__default.createElement("div", {
3398
+ className: classNamePrefix + "_product_qty_select"
3399
+ }, React__default.createElement(formik.Field, {
3400
+ name: id,
3401
+ selectOptions: selectOptions,
3402
+ component: NativeSelectField,
3403
+ onChange: function onChange(e) {
3404
+ var value = e.target.value;
3405
+ handleAddonChange(id, value);
3406
+ }
3407
+ })), !_isEmpty(addOnDataWithCustomFields == null ? void 0 : addOnDataWithCustomFields.fields) && React__default.createElement("div", {
3408
+ className: "ticket-holders-fields"
3409
+ }, React__default.createElement("h2", null, addOnDataWithCustomFields.label), _map(addOnDataWithCustomFields.fields, function (group) {
3410
+ var id = group.id,
3411
+ groupClassname = group.groupClassname,
3412
+ groupItems = group.groupItems;
3413
+ return React__default.createElement("div", {
3414
+ key: id
3415
+ }, React__default.createElement("div", {
3416
+ className: groupClassname
3417
+ }, _map(groupItems, function (element) {
3418
+ return React__default.createElement("div", {
3419
+ className: element.className,
3420
+ key: element.name
3421
+ }, React__default.createElement(formik.Field, Object.assign({}, element, {
3422
+ type: element.type === 'radio' || element.type === 'checkbox' ? undefined : element.type,
3423
+ name: "" + element.name,
3424
+ label: getFieldLabel(element, configs),
3425
+ component: getFieldComponent(element),
3426
+ validate: getValidateFunctions(element, [], values, errors)
3427
+ })));
3428
+ })));
3429
+ }))))));
3430
+ };
3431
+
3432
+ var getNormalizedPrice = function getNormalizedPrice(value) {
3433
+ var minimizedValue = Number(value) / 100;
3434
+ var normalized = minimizedValue.toFixed(2);
3435
+ return normalized;
3436
+ };
3437
+
3438
+ var generateSelectOptions = function generateSelectOptions(minCount, maxCount) {
3439
+ if (minCount === void 0) {
3440
+ minCount = 1;
3441
+ }
3442
+ if (maxCount === void 0) {
3443
+ maxCount = 10;
3444
+ }
3445
+ var options = [];
3446
+ for (var i = minCount; i <= maxCount; i++) {
3447
+ options.push({
3448
+ label: i,
3449
+ value: i
3450
+ });
3451
+ }
3452
+ return options;
3453
+ };
3454
+ var generateStockBasedOnLimitations = function generateStockBasedOnLimitations(addon, ticketQuantity) {
3455
+ // Generate addon available stock count based on limitations
3456
+ var flagLimitToTicketQuantity = addon.flagLimitToTicketQuantity,
3457
+ maxQuantity = addon.maxQuantity,
3458
+ limitPerTicket = addon.limitPerTicket;
3459
+ var allowedStockCount;
3460
+ // Generate stock
3461
+ if (flagLimitToTicketQuantity) {
3462
+ // Limited to ticket quantity case
3463
+ allowedStockCount = ticketQuantity;
3464
+ } else if (maxQuantity && limitPerTicket) {
3465
+ var stockBasedOnLimitPerTicket = limitPerTicket * ticketQuantity;
3466
+ // Both maximum quantity and limited to per ticket selected case, stock is minimum of them
3467
+ allowedStockCount = maxQuantity <= stockBasedOnLimitPerTicket ? maxQuantity : stockBasedOnLimitPerTicket;
3468
+ } else if (maxQuantity && !limitPerTicket) {
3469
+ // Limited to maximum quantity case
3470
+ allowedStockCount = maxQuantity;
3471
+ } else if (!maxQuantity && limitPerTicket) {
3472
+ // Limited to per ticket case
3473
+ allowedStockCount = limitPerTicket * ticketQuantity;
3474
+ }
3475
+ return Number(allowedStockCount);
3476
+ };
3477
+ var filterStockBasedOnAvailability = function filterStockBasedOnAvailability(generatedStock, availableStock) {
3478
+ // Check generated stock count admissibility with addon stock availability
3479
+ var filteredStockCount = generatedStock;
3480
+ if (generatedStock) {
3481
+ if (generatedStock > availableStock && !_isNull(availableStock)) {
3482
+ filteredStockCount = availableStock;
3483
+ }
3484
+ } else {
3485
+ // Not set any restriction
3486
+ // Here 10 value is business logic
3487
+ filteredStockCount = 10;
3488
+ if (!_isNull(availableStock) && availableStock < filteredStockCount) {
3489
+ filteredStockCount = availableStock;
3490
+ }
3491
+ }
3492
+ return filteredStockCount;
3493
+ };
3494
+ var getAddonSelectOptions = function getAddonSelectOptions(addons, choosedTicketCount) {
3495
+ var addonsWithOptions = {};
3496
+ var groupsWithSelectedVariantsInfo = {};
3497
+ var groupsWithVariants = {};
3498
+ addons.forEach(function (addon) {
3499
+ // Here addon can act either as simple Addon or Addon Group
3500
+ var id = addon.id,
3501
+ simpleAddonStock = addon.stock,
3502
+ variants = addon.variants,
3503
+ active = addon.active,
3504
+ flagLimitToTicketQuantity = addon.flagLimitToTicketQuantity,
3505
+ maxQuantity = addon.maxQuantity,
3506
+ limitPerTicket = addon.limitPerTicket;
3507
+ if (variants) {
3508
+ // Addon Group with inside addon variants case
3509
+ variants.forEach(function (variant) {
3510
+ var variantId = variant.id,
3511
+ variantStock = variant.stock;
3512
+ // null checking is for unlimited stock value
3513
+ if (active && (variantStock > 0 || _isNull(variantStock))) {
3514
+ var _extends3;
3515
+ // Generate Addon Group allowed stock count based on limitations
3516
+ var stockBasedOnLimitation = generateStockBasedOnLimitations(addon, choosedTicketCount);
3517
+ // Detect if group has limitation or not
3518
+ if (flagLimitToTicketQuantity || maxQuantity || limitPerTicket) {
3519
+ // Generate Group with inside variants info
3520
+ if (groupsWithSelectedVariantsInfo[id]) {
3521
+ var _extends2;
3522
+ // Set group limit
3523
+ if (groupsWithSelectedVariantsInfo[id].limit < stockBasedOnLimitation) {
3524
+ groupsWithSelectedVariantsInfo[id].limit = stockBasedOnLimitation;
3525
+ }
3526
+ // Set choosed variants info
3527
+ groupsWithSelectedVariantsInfo[id] = _extends({}, groupsWithSelectedVariantsInfo[id], {
3528
+ choosedVariants: _extends({}, groupsWithSelectedVariantsInfo[id].choosedVariants, (_extends2 = {}, _extends2[variantId] = 0, _extends2))
3529
+ });
3530
+ } else {
3531
+ var _choosedVariants;
3532
+ groupsWithSelectedVariantsInfo[id] = {
3533
+ limit: stockBasedOnLimitation,
3534
+ selectedCount: 0,
3535
+ choosedVariants: (_choosedVariants = {}, _choosedVariants[variantId] = 0, _choosedVariants)
3536
+ };
3537
+ }
3538
+ }
3539
+ // Check stock admissibility with addon stock availability
3540
+ var allowedVariantStockCount = filterStockBasedOnAvailability(stockBasedOnLimitation, variantStock);
3541
+ // Generate options for variant
3542
+ var variantOptions = generateSelectOptions(0, allowedVariantStockCount);
3543
+ addonsWithOptions[variantId] = [].concat(variantOptions);
3544
+ // Generate Group with its variants list
3545
+ groupsWithVariants[id] = _extends({}, groupsWithVariants[id], (_extends3 = {}, _extends3[variantId] = allowedVariantStockCount, _extends3));
3546
+ }
3547
+ });
3548
+ } else {
3549
+ // Simple addon case, null checking is for unlimited stock value
3550
+ if (active && (simpleAddonStock > 0 || _isNull(simpleAddonStock))) {
3551
+ // Generate Addon Group allowed stock count based on limitations
3552
+ var stockBasedOnLimitation = generateStockBasedOnLimitations(addon, choosedTicketCount);
3553
+ // Check stock admissibility with addon stock availability
3554
+ var allowedVariantStockCount = filterStockBasedOnAvailability(stockBasedOnLimitation, simpleAddonStock);
3555
+ var addonOptions = generateSelectOptions(0, allowedVariantStockCount);
3556
+ addonsWithOptions[id] = [].concat(addonOptions);
3557
+ }
3558
+ }
3559
+ });
3560
+ return {
3561
+ addonsWithOptions: addonsWithOptions,
3562
+ groupsWithSelectedVariantsInfo: groupsWithSelectedVariantsInfo,
3563
+ groupsWithVariants: groupsWithVariants
3564
+ };
3565
+ };
3566
+ var getTicketRelatedAddons = function getTicketRelatedAddons(addons, ticketId) {
3567
+ // Filter addons based on choosed ticket
3568
+ var filteredAddons = addons.filter(function (addon) {
3569
+ return _isNull(addon.prerequisiteTicketTypeIds) || addon.prerequisiteTicketTypeIds.includes(ticketId);
3570
+ });
3571
+ return filteredAddons;
3572
+ };
3573
+ var getSortedAddons = function getSortedAddons(addons, sortDirection) {
3574
+ if (sortDirection === void 0) {
3575
+ sortDirection = 'asc';
3576
+ }
3577
+ var addonsCopy = [].concat(addons);
3578
+ addonsCopy.forEach(function (addon) {
3579
+ if (addon.variants) {
3580
+ var unsortedVariants = [];
3581
+ addon.variants.forEach(function (variant) {
3582
+ unsortedVariants.push(_extends({}, variant, {
3583
+ sortOrder: Number(variant.sortOrder)
3584
+ }));
3585
+ });
3586
+ addon.sortOrder = Number(addon.variants[0].sortOrder);
3587
+ var sortedVariants = _sortBy(unsortedVariants, function (variant) {
3588
+ return variant.sortOrder;
3589
+ });
3590
+ addon.variants = sortedVariants;
3591
+ } else {
3592
+ addon.sortOrder = Number(addon.sortOrder);
3593
+ }
3594
+ });
3595
+ var sortedAddons = _sortBy(addonsCopy, function (addon) {
3596
+ return addon.sortOrder;
3597
+ });
3598
+ if (sortDirection === 'desc') {
3599
+ return _reverse(sortedAddons);
3600
+ }
3601
+ return sortedAddons;
3602
+ };
3603
+ var isAtLeastOneAddonSelected = function isAtLeastOneAddonSelected(value) {
3604
+ var selectedAddons = Object.fromEntries(Object.entries(value).filter(function (_ref) {
3605
+ var count = _ref[1];
3606
+ return Number(count) !== 0;
3607
+ }));
3608
+ return !_isEmpty(selectedAddons);
3609
+ };
3610
+
3611
+ var AddonsContainter = function AddonsContainter(_ref) {
3612
+ var _ref$classNamePrefix = _ref.classNamePrefix,
3613
+ classNamePrefix = _ref$classNamePrefix === void 0 ? 'add_on' : _ref$classNamePrefix,
3614
+ _ref$enableBillingInf = _ref.enableBillingInfoAutoCreate,
3615
+ enableBillingInfoAutoCreate = _ref$enableBillingInf === void 0 ? true : _ref$enableBillingInf,
3616
+ _ref$enableTimer = _ref.enableTimer,
3617
+ enableTimer = _ref$enableTimer === void 0 ? false : _ref$enableTimer,
3618
+ _ref$onGetAddonsPageI = _ref.onGetAddonsPageInfoSuccess,
3619
+ onGetAddonsPageInfoSuccess = _ref$onGetAddonsPageI === void 0 ? _identity : _ref$onGetAddonsPageI,
3277
3620
  _ref$onGetAddonsPageI2 = _ref.onGetAddonsPageInfoError,
3278
3621
  onGetAddonsPageInfoError = _ref$onGetAddonsPageI2 === void 0 ? _identity : _ref$onGetAddonsPageI2,
3279
3622
  _ref$onPostCheckoutSu = _ref.onPostCheckoutSuccess,
@@ -3290,7 +3633,9 @@ var AddonsContainter = function AddonsContainter(_ref) {
3290
3633
  onPendingVerification = _ref$onPendingVerific === void 0 ? _identity : _ref$onPendingVerific,
3291
3634
  samePage = _ref.samePage,
3292
3635
  _ref$descriptionTrigg = _ref.descriptionTrigger,
3293
- descriptionTrigger = _ref$descriptionTrigg === void 0 ? 'click' : _ref$descriptionTrigg;
3636
+ descriptionTrigger = _ref$descriptionTrigg === void 0 ? 'click' : _ref$descriptionTrigg,
3637
+ addOnDataWithCustomFields = _ref.addOnDataWithCustomFields,
3638
+ configs = _ref.configs;
3294
3639
  var eventId = getQueryVariable('event_id');
3295
3640
  var _useState = React.useState([]),
3296
3641
  addons = _useState[0],
@@ -3563,7 +3908,8 @@ var AddonsContainter = function AddonsContainter(_ref) {
3563
3908
  }
3564
3909
  } : undefined
3565
3910
  }, function (_ref4) {
3566
- var values = _ref4.values;
3911
+ var values = _ref4.values,
3912
+ errors = _ref4.errors;
3567
3913
  var isConfirmDisabled = !isAtLeastOneAddonSelected(values);
3568
3914
  return React__default.createElement(formik.Form, {
3569
3915
  autoComplete: "off",
@@ -3633,7 +3979,11 @@ var AddonsContainter = function AddonsContainter(_ref) {
3633
3979
  classNamePrefix: classNamePrefix,
3634
3980
  handleAddonChange: function handleAddonChange(id, value) {
3635
3981
  return onFieldChange(id, value, addon);
3636
- }
3982
+ },
3983
+ addOnDataWithCustomFields: addOnDataWithCustomFields,
3984
+ configs: configs,
3985
+ values: values,
3986
+ errors: errors
3637
3987
  })
3638
3988
  );
3639
3989
  }) :
@@ -3645,7 +3995,11 @@ var AddonsContainter = function AddonsContainter(_ref) {
3645
3995
  classNamePrefix: classNamePrefix,
3646
3996
  handleAddonChange: function handleAddonChange(id, value) {
3647
3997
  return onFieldChange(id, value, addon);
3648
- }
3998
+ },
3999
+ addOnDataWithCustomFields: addOnDataWithCustomFields,
4000
+ configs: configs,
4001
+ values: values,
4002
+ errors: errors
3649
4003
  })));
3650
4004
  }), samePage ? null : React__default.createElement("button", {
3651
4005
  type: "submit",
@@ -3822,44 +4176,6 @@ var ForgotPasswordModal = function ForgotPasswordModal(_ref) {
3822
4176
  }))));
3823
4177
  };
3824
4178
 
3825
- var emailRegex = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
3826
- var combineValidators = function combineValidators() {
3827
- for (var _len = arguments.length, validators = new Array(_len), _key = 0; _key < _len; _key++) {
3828
- validators[_key] = arguments[_key];
3829
- }
3830
- return function () {
3831
- for (var i = 0; i < validators.length; ++i) {
3832
- var error_message = validators[i].apply(validators, arguments);
3833
- if (error_message) return error_message;
3834
- }
3835
- };
3836
- };
3837
- function isFalsy(item) {
3838
- try {
3839
- if (!item ||
3840
- // handles most, like false, 0, null, etc
3841
- typeof item === 'object' && Object.keys(item).length === 0 &&
3842
- // for empty objects, like {}, []
3843
- !(typeof item.addEventListener === 'function') // omit webpage elements
3844
- ) {
3845
- return true;
3846
- }
3847
- } catch (err) {
3848
- return true;
3849
- }
3850
- return false;
3851
- }
3852
- var requiredValidator = function requiredValidator(value, message) {
3853
- var errorMessage = '';
3854
- if (isFalsy(typeof value === 'string' ? value.trim() : value)) {
3855
- errorMessage = message || 'Required';
3856
- }
3857
- return errorMessage;
3858
- };
3859
- var emailValidator = function emailValidator(email) {
3860
- return !emailRegex.test(email) ? 'Please enter a valid email address' : '';
3861
- };
3862
-
3863
4179
  var style$2 = {
3864
4180
  position: 'absolute',
3865
4181
  top: '50%',
@@ -4100,324 +4416,102 @@ var SignupModal = function SignupModal(_ref) {
4100
4416
  _context.prev = 17;
4101
4417
  _context.t0 = _context["catch"](0);
4102
4418
  if (axios.isAxiosError(_context.t0)) {
4103
- onRegisterError(_context.t0, values.email);
4104
- }
4105
- case 20:
4106
- _context.prev = 20;
4107
- setLoading(false);
4108
- return _context.finish(20);
4109
- case 23:
4110
- case "end":
4111
- return _context.stop();
4112
- }
4113
- }, _callee, null, [[0, 17, 20, 23]]);
4114
- }));
4115
- return function onSignup(_x) {
4116
- return _ref2.apply(this, arguments);
4117
- };
4118
- }();
4119
- var _onClose = loading ? function () {} : onClose;
4120
- return React__default.createElement(material.Modal, {
4121
- open: true,
4122
- onClose: _onClose,
4123
- "aria-labelledby": "modal-modal-title",
4124
- "aria-describedby": "modal-modal-description",
4125
- className: "signup-modal"
4126
- }, React__default.createElement(material.Box, {
4127
- style: style$3
4128
- }, React__default.createElement("div", null, React__default.createElement(formik.Formik, {
4129
- initialValues: {
4130
- firstName: '',
4131
- lastName: '',
4132
- email: '',
4133
- password: '',
4134
- confirmPassword: ''
4135
- },
4136
- validationSchema: SignupSchema,
4137
- onSubmit: onSignup
4138
- }, function (_ref3) {
4139
- var isValid = _ref3.isValid,
4140
- dirty = _ref3.dirty,
4141
- handleSubmit = _ref3.handleSubmit;
4142
- return React__default.createElement(formik.Form, {
4143
- onSubmit: handleSubmit
4144
- }, React__default.createElement("div", {
4145
- className: "signup-container"
4146
- }, React__default.createElement("div", {
4147
- className: "title"
4148
- }, "Create an Account"), React__default.createElement("div", {
4149
- className: "signup-container__twoFields"
4150
- }, React__default.createElement("div", {
4151
- className: "is-half"
4152
- }, React__default.createElement(formik.Field, {
4153
- name: "firstName",
4154
- label: "First Name",
4155
- component: CustomField
4156
- })), React__default.createElement("div", {
4157
- className: "is-half"
4158
- }, React__default.createElement(formik.Field, {
4159
- name: "lastName",
4160
- label: "Last Name",
4161
- component: CustomField
4162
- }))), React__default.createElement("div", {
4163
- className: "signup-container__singleField"
4164
- }, React__default.createElement("div", {
4165
- className: ""
4166
- }, React__default.createElement(formik.Field, {
4167
- name: "email",
4168
- label: "Email",
4169
- component: CustomField
4170
- }))), React__default.createElement("div", {
4171
- className: "signup-container__twoFields"
4172
- }, React__default.createElement("div", {
4173
- className: "is-half"
4174
- }, React__default.createElement(formik.Field, {
4175
- name: "password",
4176
- label: "Password",
4177
- type: "password",
4178
- component: CustomField
4179
- })), React__default.createElement("div", {
4180
- className: "is-half"
4181
- }, React__default.createElement(formik.Field, {
4182
- name: "confirmPassword",
4183
- label: "Confirm Password",
4184
- type: "password",
4185
- component: CustomField
4186
- })))), React__default.createElement("div", {
4187
- className: "signup-action-button"
4188
- }, React__default.createElement("button", {
4189
- type: "submit",
4190
- disabled: !(isValid && dirty)
4191
- }, loading ? React__default.createElement(material.CircularProgress, {
4192
- size: "22px"
4193
- }) : 'Submit')), React__default.createElement("div", {
4194
- className: "login"
4195
- }, React__default.createElement("span", {
4196
- onClick: onLogin
4197
- }, "Login")), showPoweredByImage ? React__default.createElement(PoweredBy, null) : null);
4198
- }))));
4199
- };
4200
-
4201
- var _excluded$3 = ["firstName", "lastName", "holderAge", "confirmEmail", "confirmPassword"];
4202
- var getInitialValues = function getInitialValues(data, propsInitialValues, userValues, ticketHoldersFields, ticketsQuantity) {
4203
- var _ticketHoldersFields, _ticketHoldersFields$, _ticketHoldersFields$2;
4204
- if (data === void 0) {
4205
- data = [];
4206
- }
4207
- if (propsInitialValues === void 0) {
4208
- propsInitialValues = {};
4209
- }
4210
- if (userValues === void 0) {
4211
- userValues = {};
4212
- }
4213
- if (ticketHoldersFields === void 0) {
4214
- ticketHoldersFields = {};
4215
- }
4216
- if (ticketsQuantity === void 0) {
4217
- ticketsQuantity = [];
4218
- }
4219
- var results = _flatMapDeep(data, function (_ref) {
4220
- var fields = _ref.fields;
4221
- return _map(fields, function (_ref2) {
4222
- var groupItems = _ref2.groupItems;
4223
- return _map(groupItems, function (_ref3) {
4224
- var name = _ref3.name,
4225
- value = _ref3.value;
4226
- return {
4227
- name: name,
4228
- value: value
4229
- };
4230
- });
4231
- });
4232
- });
4233
- // Add Ticket Holder default values for custom fields
4234
- var ticketHoldersCustomFields = ((_ticketHoldersFields = ticketHoldersFields) == null ? void 0 : (_ticketHoldersFields$ = _ticketHoldersFields.fields) == null ? void 0 : (_ticketHoldersFields$2 = _ticketHoldersFields$.find(function (groupItem) {
4235
- return groupItem.customFields;
4236
- })) == null ? void 0 : _ticketHoldersFields$2.groupItems) || [];
4237
- var ticketHoldersCustomFieldsInitValues = {};
4238
- var selectedTicketsCount = ticketsQuantity.length || localStorage.getItem('selectedTicketsQuantity') || 0;
4239
- if (!_isEmpty(ticketHoldersCustomFields)) {
4240
- for (var _iterator = _createForOfIteratorHelperLoose(ticketHoldersCustomFields), _step; !(_step = _iterator()).done;) {
4241
- var customField = _step.value;
4242
- for (var i = 0; i < selectedTicketsCount; i++) {
4243
- var fieldName = customField.name + "-" + i;
4244
- var fieldValue = customField.value;
4245
- ticketHoldersCustomFieldsInitValues[fieldName] = fieldValue;
4246
- }
4247
- }
4248
- }
4249
- var initialValues = {};
4250
- _forEach(results, function (groupItem) {
4251
- var name = groupItem.name,
4252
- value = groupItem.value;
4253
- initialValues[name] = value || propsInitialValues[name] || userValues[name] || '';
4254
- });
4255
- // set logged in user as first ticket holder
4256
- initialValues['holderFirstName-0'] = propsInitialValues.firstName || userValues.firstName || '';
4257
- initialValues['holderLastName-0'] = propsInitialValues.lastName || userValues.lastName || '';
4258
- initialValues['holderEmail-0'] = propsInitialValues.email || userValues.email || '';
4259
- return _extends({}, initialValues, ticketHoldersCustomFieldsInitValues);
4260
- };
4261
- var createRegisterFormData = function createRegisterFormData(values, checkoutBody, flagFreeTicket) {
4262
- if (values === void 0) {
4263
- values = {};
4264
- }
4265
- if (flagFreeTicket === void 0) {
4266
- flagFreeTicket = false;
4267
- }
4268
- var bodyFormData = new FormData();
4269
- bodyFormData.append('first_name', values.firstName);
4270
- bodyFormData.append('last_name', values.lastName);
4271
- bodyFormData.append('email', values.email);
4272
- bodyFormData.append('password', values.password);
4273
- bodyFormData.append('password_confirmation', values.confirmPassword);
4274
- bodyFormData.append('client_id', CONFIGS.CLIENT_ID || 'e9d8f8922797b4621e562255afe90dbf');
4275
- bodyFormData.append('client_secret', CONFIGS.CLIENT_SECRET || 'b89c191eff22fdcf84ac9bfd88d005355a151ec2c83b26b9');
4276
- bodyFormData.append('check_cart_expiration', 'true');
4277
- _forEach(checkoutBody.attributes, function (item, key) {
4278
- if (!(flagFreeTicket && ['country', 'state', 'city', 'street_address'].includes(key))) {
4279
- bodyFormData.append(key, item);
4280
- }
4281
- });
4282
- return bodyFormData;
4283
- };
4284
- var createCheckoutDataBody = function createCheckoutDataBody(ticketsQuantity, values, logedInValues, includeDob) {
4285
- if (values === void 0) {
4286
- values = {};
4287
- }
4288
- if (logedInValues === void 0) {
4289
- logedInValues = {};
4290
- }
4291
- if (includeDob === void 0) {
4292
- includeDob = false;
4293
- }
4294
- var _values = values,
4295
- firstName = _values.firstName,
4296
- lastName = _values.lastName,
4297
- holderAge = _values.holderAge,
4298
- restValues = _objectWithoutPropertiesLoose(_values, _excluded$3);
4299
- var holders = [];
4300
- var ticket_holders = [];
4301
- var _loop = function _loop(i) {
4302
- var individualHolder = Object.fromEntries(Object.entries(values).filter(function (_ref4) {
4303
- var key = _ref4[0];
4304
- return key.includes(String(i));
4305
- }));
4306
- holders.push(individualHolder);
4307
- };
4308
- for (var i = 0; i <= ticketsQuantity; i++) {
4309
- _loop(i);
4310
- }
4311
- var filteredHolders = holders.filter(function (holder) {
4312
- return Object.entries(holder).length > 0;
4313
- });
4314
- ticket_holders = filteredHolders.map(function (item, index) {
4315
- return {
4316
- first_name: !index ? item["holderFirstName-" + index] || logedInValues.firstNameLogged || '' : item["holderFirstName-" + index] || '',
4317
- last_name: !index ? item["holderLastName-" + index] || logedInValues.lastNameLogged || '' : item["holderLastName-" + index] || '',
4318
- phone: item["holderPhone-" + index] || '',
4319
- email: !index ? item["holderEmail-" + index] || logedInValues.emailLogged || '' : item["holderEmail-" + index] || ''
4320
- };
4321
- });
4322
- var filteredRestValue = {};
4323
- _forEach(restValues, function (value, key) {
4324
- if (!key.includes('holder')) {
4325
- filteredRestValue[key] = value;
4326
- }
4327
- });
4328
- var body = {
4329
- attributes: _extends({}, filteredRestValue, {
4330
- email: restValues.email || logedInValues.emailLogged,
4331
- confirm_email: restValues.email || logedInValues.emailLogged,
4332
- first_name: firstName || logedInValues.firstNameLogged,
4333
- last_name: lastName || logedInValues.lastNameLogged,
4334
- ticket_holders: ticket_holders
4335
- })
4336
- };
4337
- if (includeDob) {
4338
- var holderAgeDate = new Date(holderAge);
4339
- body.attributes.dob_day = holderAgeDate.getDate();
4340
- body.attributes.dob_month = holderAgeDate.getMonth() + 1;
4341
- body.attributes.dob_year = holderAgeDate.getFullYear();
4342
- }
4343
- return body;
4344
- };
4345
- var getValidateFunctions = function getValidateFunctions(element, states, values, errors) {
4346
- var validationFunctions = [];
4347
- if (element.required) {
4348
- if (element.name !== 'state' || element.name === 'state' && states.length) {
4349
- validationFunctions.push(requiredValidator);
4350
- }
4351
- }
4352
- if (element.onValidate) {
4353
- validationFunctions.push(element.onValidate);
4354
- }
4355
- if (element.name === 'phone') {
4356
- var invalidPhone = function invalidPhone() {
4357
- return errors.phone === 'Invalid phone number' ? 'Invalid phone number' : null;
4358
- };
4359
- validationFunctions.push(invalidPhone);
4360
- }
4361
- if (element.name === 'confirmEmail') {
4362
- var isSameEmail = function isSameEmail(confirmEmail) {
4363
- return values.email !== confirmEmail ? 'Please confirm your email address correctly' : null;
4364
- };
4365
- validationFunctions.push(isSameEmail);
4366
- }
4367
- if (element.name === 'confirmPassword') {
4368
- var isSame = function isSame(confirmPassword) {
4369
- return values.password !== confirmPassword ? 'Password confirmation does not match' : null;
4419
+ onRegisterError(_context.t0, values.email);
4420
+ }
4421
+ case 20:
4422
+ _context.prev = 20;
4423
+ setLoading(false);
4424
+ return _context.finish(20);
4425
+ case 23:
4426
+ case "end":
4427
+ return _context.stop();
4428
+ }
4429
+ }, _callee, null, [[0, 17, 20, 23]]);
4430
+ }));
4431
+ return function onSignup(_x) {
4432
+ return _ref2.apply(this, arguments);
4370
4433
  };
4371
- validationFunctions.push(isSame);
4372
- }
4373
- return combineValidators.apply(void 0, validationFunctions);
4374
- };
4375
- var assingUniqueIds = function assingUniqueIds(data) {
4376
- if (_get(data[0], 'uniqueId')) {
4377
- return data;
4378
- }
4379
- return _map(data, function (item) {
4380
- _forEach(item, function (itemValue, key) {
4381
- if (_isArray(itemValue) && !itemValue.some(function (item) {
4382
- return typeof item === 'string';
4383
- })) {
4384
- item[key] = assingUniqueIds(itemValue);
4385
- }
4386
- });
4387
- return _extends({}, item, {
4388
- uniqueId: nanoid.nanoid()
4389
- });
4390
- });
4391
- };
4392
- var isRequiredField = function isRequiredField(element, configs) {
4393
- var name = element.name,
4394
- required = element.required;
4395
- var flagRequirePhone = _get(configs, 'phone_required', false);
4396
- var collectMandatoryWalletAddress = _get(configs, 'collect_mandatory_wallet_address', false);
4397
- if (required || name === 'phone' && flagRequirePhone || name === 'data_capture[wallet_address]' && !collectMandatoryWalletAddress) {
4398
- return true;
4399
- }
4400
- return false;
4401
- };
4402
- var getFieldLabel = function getFieldLabel(element, configs) {
4403
- if (isRequiredField(element, configs) || React__default.isValidElement(element.label)) {
4404
- return element.label;
4405
- }
4406
- return element.label + " (optional)";
4407
- };
4408
- var getFieldComponent = function getFieldComponent(element) {
4409
- var type = _get(element, 'type', 'text');
4410
- var fieldComponentConfigs = {
4411
- checkbox: CheckboxField,
4412
- select: CustomField,
4413
- select_multi: SelectField,
4414
- phone: PhoneNumberField,
4415
- date: DatePickerField,
4416
- radio: RadioGroupField,
4417
- text: CustomField
4418
- };
4419
- var fieldComponent = _get(fieldComponentConfigs, type, CustomField);
4420
- return fieldComponent;
4434
+ }();
4435
+ var _onClose = loading ? function () {} : onClose;
4436
+ return React__default.createElement(material.Modal, {
4437
+ open: true,
4438
+ onClose: _onClose,
4439
+ "aria-labelledby": "modal-modal-title",
4440
+ "aria-describedby": "modal-modal-description",
4441
+ className: "signup-modal"
4442
+ }, React__default.createElement(material.Box, {
4443
+ style: style$3
4444
+ }, React__default.createElement("div", null, React__default.createElement(formik.Formik, {
4445
+ initialValues: {
4446
+ firstName: '',
4447
+ lastName: '',
4448
+ email: '',
4449
+ password: '',
4450
+ confirmPassword: ''
4451
+ },
4452
+ validationSchema: SignupSchema,
4453
+ onSubmit: onSignup
4454
+ }, function (_ref3) {
4455
+ var isValid = _ref3.isValid,
4456
+ dirty = _ref3.dirty,
4457
+ handleSubmit = _ref3.handleSubmit;
4458
+ return React__default.createElement(formik.Form, {
4459
+ onSubmit: handleSubmit
4460
+ }, React__default.createElement("div", {
4461
+ className: "signup-container"
4462
+ }, React__default.createElement("div", {
4463
+ className: "title"
4464
+ }, "Create an Account"), React__default.createElement("div", {
4465
+ className: "signup-container__twoFields"
4466
+ }, React__default.createElement("div", {
4467
+ className: "is-half"
4468
+ }, React__default.createElement(formik.Field, {
4469
+ name: "firstName",
4470
+ label: "First Name",
4471
+ component: CustomField
4472
+ })), React__default.createElement("div", {
4473
+ className: "is-half"
4474
+ }, React__default.createElement(formik.Field, {
4475
+ name: "lastName",
4476
+ label: "Last Name",
4477
+ component: CustomField
4478
+ }))), React__default.createElement("div", {
4479
+ className: "signup-container__singleField"
4480
+ }, React__default.createElement("div", {
4481
+ className: ""
4482
+ }, React__default.createElement(formik.Field, {
4483
+ name: "email",
4484
+ label: "Email",
4485
+ component: CustomField
4486
+ }))), React__default.createElement("div", {
4487
+ className: "signup-container__twoFields"
4488
+ }, React__default.createElement("div", {
4489
+ className: "is-half"
4490
+ }, React__default.createElement(formik.Field, {
4491
+ name: "password",
4492
+ label: "Password",
4493
+ type: "password",
4494
+ component: CustomField
4495
+ })), React__default.createElement("div", {
4496
+ className: "is-half"
4497
+ }, React__default.createElement(formik.Field, {
4498
+ name: "confirmPassword",
4499
+ label: "Confirm Password",
4500
+ type: "password",
4501
+ component: CustomField
4502
+ })))), React__default.createElement("div", {
4503
+ className: "signup-action-button"
4504
+ }, React__default.createElement("button", {
4505
+ type: "submit",
4506
+ disabled: !(isValid && dirty)
4507
+ }, loading ? React__default.createElement(material.CircularProgress, {
4508
+ size: "22px"
4509
+ }) : 'Submit')), React__default.createElement("div", {
4510
+ className: "login"
4511
+ }, React__default.createElement("span", {
4512
+ onClick: onLogin
4513
+ }, "Login")), showPoweredByImage ? React__default.createElement(PoweredBy, null) : null);
4514
+ }))));
4421
4515
  };
4422
4516
 
4423
4517
  var LogicRunner = function LogicRunner(_ref) {
@@ -4604,7 +4698,8 @@ var BillingInfoContainer = /*#__PURE__*/React__default.memo(function (_ref4) {
4604
4698
  onGetCheckoutConfigsError = _ref4$onGetCheckoutCo2 === void 0 ? _identity : _ref4$onGetCheckoutCo2,
4605
4699
  _ref4$includeAddons = _ref4.includeAddons,
4606
4700
  includeAddons = _ref4$includeAddons === void 0 ? false : _ref4$includeAddons,
4607
- addonsProps = _ref4.addonsProps;
4701
+ addonsProps = _ref4.addonsProps,
4702
+ addOnDataWithCustomFields = _ref4.addOnDataWithCustomFields;
4608
4703
  var _useState = React.useState(null),
4609
4704
  extraData = _useState[0],
4610
4705
  setExtraData = _useState[1];
@@ -5261,7 +5356,10 @@ var BillingInfoContainer = /*#__PURE__*/React__default.memo(function (_ref4) {
5261
5356
  }, React__default.createElement("img", {
5262
5357
  src: theme === 'dark' ? 'https://www.ticketfairy.com/resources/images/logo-ttf.svg' : 'https://www.ticketfairy.com/resources/images/logo-ttf-black.svg',
5263
5358
  alt: "nodata"
5264
- })))), includeAddons ? React__default.createElement(AddonsContainter, Object.assign({}, addonsProps != null ? addonsProps : {})) : null, !cardLoading && _map(dataWithUniqueIds, function (item) {
5359
+ })))), includeAddons ? React__default.createElement(AddonsContainter, Object.assign({}, addonsProps != null ? addonsProps : {}, {
5360
+ addOnDataWithCustomFields: addOnDataWithCustomFields,
5361
+ configs: configs
5362
+ })) : null, !cardLoading && _map(dataWithUniqueIds, function (item) {
5265
5363
  var label = item.label,
5266
5364
  labelClassName = item.labelClassName,
5267
5365
  fields = item.fields;
@@ -7471,7 +7569,7 @@ var TicketRow = function TicketRow(_ref) {
7471
7569
  })))));
7472
7570
  var returnValue = '';
7473
7571
  // ticketTier.soldOut === false --> means that ticket is in the stock
7474
- var isSoldOut = ticketTier.sold_out || !ticketTier.displayTicket || ticketTier.soldOut || ticketTier.soldOut === false;
7572
+ var isSoldOut = ticketTier.sold_out || !(ticketTier.displayTicket || ticketTier.slotGroupId) || ticketTier.soldOut || ticketTier.soldOut === false;
7475
7573
  if (isSoldOut) {
7476
7574
  returnValue = soldOutMessage;
7477
7575
  } else if (isSalesClosed) {
@@ -7527,7 +7625,7 @@ var TicketsSection = function TicketsSection(_ref) {
7527
7625
  var ticketPriceWithoutFees = priceSymbol + " " + (+ticket.cost).toFixed(2);
7528
7626
  var ticketPriceWithFees = priceSymbol + " " + (+ticket.price).toFixed(2);
7529
7627
  var ticketOldPrice = priceSymbol + " " + (+ticket.oldPrice).toFixed(2);
7530
- var isSoldOut = ticket.sold_out || !ticket.displayTicket || ticket.soldOut;
7628
+ var isSoldOut = ticket.sold_out || !(ticket.displayTicket || ticket.slotGroupId) || ticket.soldOut;
7531
7629
  var ticketSelect = function ticketSelect(event) {
7532
7630
  var value = event.target.value;
7533
7631
  handleTicketSelect(ticket.id, value);
@@ -7602,7 +7700,7 @@ var TicketsSection = function TicketsSection(_ref) {
7602
7700
  var ticketPriceWithoutFees = priceSymbol + " " + (+ticket.cost).toFixed(2);
7603
7701
  var ticketPriceWithFees = priceSymbol + " " + (+ticket.price).toFixed(2);
7604
7702
  var ticketOldPrice = priceSymbol + " " + (+ticket.oldPrice).toFixed(2);
7605
- var isSoldOut = ticket.sold_out || !ticket.displayTicket || ticket.soldOut;
7703
+ var isSoldOut = ticket.sold_out || !(ticket.displayTicket || ticket.slotGroupId) || ticket.soldOut;
7606
7704
  var ticketSelect = function ticketSelect(event) {
7607
7705
  var value = event.target.value;
7608
7706
  handleTicketSelect(ticket.id, value, true);
@@ -7679,6 +7777,126 @@ var TicketsSection = function TicketsSection(_ref) {
7679
7777
  }));
7680
7778
  };
7681
7779
 
7780
+ var TimeSlotsSection = function TimeSlotsSection(_ref) {
7781
+ var event = _ref.event,
7782
+ eventId = _ref.eventId,
7783
+ availableDates = _ref.availableDates,
7784
+ selectedTickets = _ref.selectedTickets,
7785
+ setSelectedTickets = _ref.setSelectedTickets,
7786
+ handleTicketSelect = _ref.handleTicketSelect,
7787
+ sortBySoldOut = _ref.sortBySoldOut,
7788
+ hideTicketsHeader = _ref.hideTicketsHeader,
7789
+ ticketsHeaderComponent = _ref.ticketsHeaderComponent,
7790
+ showGroupNameBlock = _ref.showGroupNameBlock,
7791
+ currencySybmol = _ref.currencySybmol,
7792
+ isSeatMapAllowed = _ref.isSeatMapAllowed;
7793
+ var _useState = React.useState(null),
7794
+ selectedDate = _useState[0],
7795
+ setSelectedDate = _useState[1];
7796
+ var _useState2 = React.useState([]),
7797
+ tickets = _useState2[0],
7798
+ setTickets = _useState2[1];
7799
+ var _useState3 = React.useState(false),
7800
+ loading = _useState3[0],
7801
+ setLoading = _useState3[1];
7802
+ var handleDateChange = /*#__PURE__*/function () {
7803
+ var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(date) {
7804
+ var response;
7805
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
7806
+ while (1) switch (_context.prev = _context.next) {
7807
+ case 0:
7808
+ setSelectedDate(date);
7809
+ if (!date) {
7810
+ _context.next = 19;
7811
+ break;
7812
+ }
7813
+ setLoading(true);
7814
+ _context.prev = 3;
7815
+ _context.next = 6;
7816
+ return axios.get("/api/time-slots", {
7817
+ params: {
7818
+ eventId: eventId,
7819
+ date: moment(date).format("YYYY-MM-DD")
7820
+ }
7821
+ });
7822
+ case 6:
7823
+ response = _context.sent;
7824
+ setTickets(response.data.tickets);
7825
+ setSelectedTickets(response.data.tickets);
7826
+ _context.next = 16;
7827
+ break;
7828
+ case 11:
7829
+ _context.prev = 11;
7830
+ _context.t0 = _context["catch"](3);
7831
+ console.error("Error fetching time slots:", _context.t0);
7832
+ setTickets([]);
7833
+ setSelectedTickets([]);
7834
+ case 16:
7835
+ _context.prev = 16;
7836
+ setLoading(false);
7837
+ return _context.finish(16);
7838
+ case 19:
7839
+ case "end":
7840
+ return _context.stop();
7841
+ }
7842
+ }, _callee, null, [[3, 11, 16, 19]]);
7843
+ }));
7844
+ return function handleDateChange(_x) {
7845
+ return _ref2.apply(this, arguments);
7846
+ };
7847
+ }();
7848
+ var isDateDisabled = function isDateDisabled(date) {
7849
+ var formattedDate = moment(date).format("YYYY-MM-DD");
7850
+ return !availableDates.includes(formattedDate);
7851
+ };
7852
+ return React__default.createElement(material.Box, {
7853
+ sx: {
7854
+ display: "flex",
7855
+ flexDirection: "column",
7856
+ alignItems: "center"
7857
+ }
7858
+ }, React__default.createElement(xDatePickers.LocalizationProvider, {
7859
+ dateAdapter: AdapterMoment.AdapterMoment
7860
+ }, React__default.createElement(xDatePickers.StaticDatePicker, {
7861
+ value: selectedDate,
7862
+ onChange: handleDateChange,
7863
+ shouldDisableDate: isDateDisabled,
7864
+ renderInput: function renderInput(params) {
7865
+ return React__default.createElement(material.TextField, Object.assign({}, params));
7866
+ },
7867
+ showToolbar: false,
7868
+ componentsProps: {
7869
+ actionBar: {
7870
+ actions: []
7871
+ }
7872
+ },
7873
+ disablePast: true
7874
+ })), loading ? React__default.createElement(material.CircularProgress, {
7875
+ sx: {
7876
+ marginTop: 2
7877
+ }
7878
+ }) : React__default.createElement(material.Box, {
7879
+ sx: {
7880
+ marginTop: 2,
7881
+ width: "100%"
7882
+ }
7883
+ }, React__default.createElement(TicketsSection, {
7884
+ event: event,
7885
+ ticketsList: tickets,
7886
+ tableTickets: [],
7887
+ selectedTickets: selectedTickets,
7888
+ handleTicketSelect: handleTicketSelect,
7889
+ sortBySoldOut: sortBySoldOut,
7890
+ ticketsHeaderComponent: ticketsHeaderComponent,
7891
+ tableTicketsHeaderComponent: null,
7892
+ hideTableTicketsHeader: true,
7893
+ hideTicketsHeader: hideTicketsHeader || _isEmpty(tickets),
7894
+ showGroupNameBlock: showGroupNameBlock,
7895
+ currencySybmol: currencySybmol,
7896
+ isSeatMapAllowed: isSeatMapAllowed
7897
+ })));
7898
+ };
7899
+
7682
7900
  var TicketsContainer = function TicketsContainer(_ref) {
7683
7901
  var onLoginSuccess = _ref.onLoginSuccess,
7684
7902
  getTicketsLabel = _ref.getTicketsLabel,
@@ -7823,6 +8041,10 @@ var TicketsContainer = function TicketsContainer(_ref) {
7823
8041
  setIsPreregisred = _useState22[1];
7824
8042
  var ticketsContainerRef = React.useRef(null);
7825
8043
  var pageUrl = isBrowser ? window.location.href.split('?')[0] : '';
8044
+ var isTimeSlotEvent = event == null ? void 0 : event.isTimeSlotEvent;
8045
+ var _useState23 = React.useState([]),
8046
+ availableDates = _useState23[0],
8047
+ setAvailableDates = _useState23[1];
7826
8048
  useCookieListener(X_TF_ECOMMERCE, function (value) {
7827
8049
  return setIsLogged(Boolean(value));
7828
8050
  });
@@ -7843,7 +8065,7 @@ var TicketsContainer = function TicketsContainer(_ref) {
7843
8065
  getTicketsApi();
7844
8066
  fetchPreregisteredsData();
7845
8067
  }
7846
- }, [eventId]);
8068
+ }, [eventId, isTimeSlotEvent]);
7847
8069
  React.useEffect(function () {
7848
8070
  setIsPreregisred(checkUserPreregistration());
7849
8071
  }, [preregistereds]);
@@ -7911,21 +8133,46 @@ var TicketsContainer = function TicketsContainer(_ref) {
7911
8133
  }
7912
8134
  function _getTicketsApi() {
7913
8135
  _getTicketsApi = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4(isUpdateingCode, type) {
7914
- var previewKey, response, eventResponse, _response$data, attributes, _event2;
8136
+ var previewKey, eventResponse, _event2, _response, response, _response$data, attributes;
7915
8137
  return _regeneratorRuntime().wrap(function _callee4$(_context4) {
7916
8138
  while (1) switch (_context4.prev = _context4.next) {
7917
8139
  case 0:
7918
8140
  _context4.prev = 0;
7919
- isUpdateingCode ? setCodeIsLoading(true) : setIsLoading(true);
8141
+ if (isUpdateingCode) {
8142
+ setCodeIsLoading(true);
8143
+ } else {
8144
+ setIsLoading(true);
8145
+ }
7920
8146
  previewKey = getQueryVariable('pk') || undefined;
7921
8147
  _context4.next = 5;
7922
- return getTickets(eventId, code, previewKey);
7923
- case 5:
7924
- response = _context4.sent;
7925
- _context4.next = 8;
7926
8148
  return getEvent(eventId, previewKey);
7927
- case 8:
8149
+ case 5:
7928
8150
  eventResponse = _context4.sent;
8151
+ if (eventResponse.success) {
8152
+ _event2 = eventResponse.data.attributes;
8153
+ setEvent(_event2);
8154
+ if (_event2.country && isBrowser) {
8155
+ window.localStorage.setItem('eventCountry', _event2.country);
8156
+ }
8157
+ }
8158
+ if (!isTimeSlotEvent) {
8159
+ _context4.next = 14;
8160
+ break;
8161
+ }
8162
+ _context4.next = 10;
8163
+ return getTimeSlotsData(eventId);
8164
+ case 10:
8165
+ _response = _context4.sent;
8166
+ console.log(_response);
8167
+ if (_response.success) {
8168
+ setAvailableDates(_response.data);
8169
+ }
8170
+ return _context4.abrupt("return");
8171
+ case 14:
8172
+ _context4.next = 16;
8173
+ return getTickets(eventId, code, previewKey);
8174
+ case 16:
8175
+ response = _context4.sent;
7929
8176
  if (response.success) {
7930
8177
  attributes = response == null ? void 0 : (_response$data = response.data) == null ? void 0 : _response$data.attributes;
7931
8178
  type === 'promo' && setCodeIsApplied(attributes.ValidPromoCode);
@@ -7937,32 +8184,25 @@ var TicketsContainer = function TicketsContainer(_ref) {
7937
8184
  setShowAccessCodeSection(attributes.is_access_code);
7938
8185
  setShowPromoCodeSection(attributes.isPromotionsEnabled);
7939
8186
  }
7940
- if (eventResponse.success) {
7941
- _event2 = eventResponse.data.attributes;
7942
- setEvent(_event2);
7943
- if (_event2.country && isBrowser) {
7944
- window.localStorage.setItem('eventCountry', _event2.country);
7945
- }
7946
- }
7947
- _context4.next = 16;
8187
+ _context4.next = 23;
7948
8188
  break;
7949
- case 13:
7950
- _context4.prev = 13;
8189
+ case 20:
8190
+ _context4.prev = 20;
7951
8191
  _context4.t0 = _context4["catch"](0);
7952
8192
  if (axios.isAxiosError(_context4.t0)) {
7953
8193
  onGetTicketsError(_context4.t0);
7954
8194
  setError(_get(_context4.t0, 'response.data.message', ''));
7955
8195
  }
7956
- case 16:
7957
- _context4.prev = 16;
8196
+ case 23:
8197
+ _context4.prev = 23;
7958
8198
  setIsLoading(false);
7959
8199
  setCodeIsLoading(false);
7960
- return _context4.finish(16);
7961
- case 20:
8200
+ return _context4.finish(23);
8201
+ case 27:
7962
8202
  case "end":
7963
8203
  return _context4.stop();
7964
8204
  }
7965
- }, _callee4, null, [[0, 13, 16, 20]]);
8205
+ }, _callee4, null, [[0, 20, 23, 27]]);
7966
8206
  }));
7967
8207
  return _getTicketsApi.apply(this, arguments);
7968
8208
  }
@@ -8303,7 +8543,20 @@ var TicketsContainer = function TicketsContainer(_ref) {
8303
8543
  }), isLoading ? React__default.createElement(Loader, null) : React__default.createElement("div", {
8304
8544
  ref: ticketsContainerRef,
8305
8545
  className: 'tickets-section-container'
8306
- }, !isSalesClosed && React__default.createElement(TicketsSection, {
8546
+ }, isTimeSlotEvent && React__default.createElement(TimeSlotsSection, {
8547
+ event: event,
8548
+ eventId: eventId,
8549
+ availableDates: availableDates,
8550
+ selectedTickets: selectedTickets,
8551
+ setSelectedTickets: setSelectedTickets,
8552
+ handleTicketSelect: handleTicketSelect,
8553
+ sortBySoldOut: sortBySoldOut,
8554
+ ticketsHeaderComponent: ticketsHeaderComponent,
8555
+ hideTicketsHeader: hideTicketsHeader,
8556
+ showGroupNameBlock: showGroupNameBlock,
8557
+ currencySybmol: currencySybmol,
8558
+ isSeatMapAllowed: isSeatMapAllowed
8559
+ }), !isSalesClosed && !isTimeSlotEvent && React__default.createElement(TicketsSection, {
8307
8560
  event: event,
8308
8561
  ticketsList: ordinarTickets,
8309
8562
  tableTickets: tableTickets,