tf-checkout-react 1.7.31 → 2.0.0-beta.1

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 (454) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +141 -1033
  3. package/dist/checkout.css +17 -0
  4. package/dist/index.d.mts +3946 -0
  5. package/dist/index.d.ts +3946 -30
  6. package/dist/index.esm.js +9176 -0
  7. package/dist/index.esm.js.map +1 -0
  8. package/dist/index.js +9330 -6
  9. package/dist/index.js.map +1 -0
  10. package/dist/styles/addons.css +75 -0
  11. package/dist/styles/auth.css +294 -0
  12. package/dist/styles/billing.css +98 -0
  13. package/dist/styles/confirmation.css +51 -0
  14. package/dist/styles/foundation.css +146 -0
  15. package/dist/styles/payment.css +179 -0
  16. package/dist/styles/primitives.css +356 -0
  17. package/dist/styles/seat-map.css +46 -0
  18. package/dist/styles/tickets.css +285 -0
  19. package/dist/styles/verification-confirmation.css +258 -0
  20. package/package.json +93 -78
  21. package/src/.d.ts +1 -1
  22. package/src/CardInput.tsx +374 -0
  23. package/src/EmbeddedCheckout.tsx +400 -0
  24. package/src/ResumedCheckout.tsx +132 -0
  25. package/src/auth/AuthModal.tsx +238 -0
  26. package/src/auth/ForgotPasswordForm.tsx +93 -0
  27. package/src/auth/LoginForm.tsx +104 -0
  28. package/src/auth/PasswordInput.tsx +33 -0
  29. package/src/auth/RegisterForm.tsx +333 -0
  30. package/src/auth/ResetPasswordForm.tsx +112 -0
  31. package/src/auth/index.ts +5 -0
  32. package/src/checkout.css +17 -0
  33. package/src/configure.ts +29 -0
  34. package/src/confirmer.ts +439 -0
  35. package/src/index.ts +41 -30
  36. package/src/instance.ts +21 -0
  37. package/src/sections/AddOns.tsx +241 -0
  38. package/src/sections/BillingInfo.tsx +790 -0
  39. package/src/sections/Confirmation.tsx +146 -0
  40. package/src/sections/IDVerification.tsx +76 -0
  41. package/src/sections/OrderConfirmation.tsx +277 -0
  42. package/src/sections/OrderIDVerification.tsx +117 -0
  43. package/src/sections/OrderSummary.tsx +84 -0
  44. package/src/sections/Payment.tsx +557 -0
  45. package/src/sections/SeatMap.tsx +512 -0
  46. package/src/sections/Tickets.tsx +573 -0
  47. package/src/sections/billing/BillingAddressFields.tsx +138 -0
  48. package/src/sections/billing/BuyerField.tsx +75 -0
  49. package/src/sections/billing/TicketHoldersCard.tsx +124 -0
  50. package/src/sections/billing/fieldRules.ts +43 -0
  51. package/src/sections/billing/types.ts +10 -0
  52. package/src/sections/index.ts +15 -0
  53. package/src/sections/seatMap.utils.ts +105 -0
  54. package/src/styles/addons.css +75 -0
  55. package/src/styles/auth.css +294 -0
  56. package/src/styles/billing.css +98 -0
  57. package/src/styles/confirmation.css +51 -0
  58. package/src/styles/foundation.css +146 -0
  59. package/src/styles/payment.css +179 -0
  60. package/src/styles/primitives.css +356 -0
  61. package/src/styles/seat-map.css +46 -0
  62. package/src/styles/tickets.css +285 -0
  63. package/src/styles/verification-confirmation.css +258 -0
  64. package/src/typings.d.ts +2 -2
  65. package/src/ui/Button.tsx +38 -0
  66. package/src/ui/Card.tsx +54 -0
  67. package/src/ui/CheckoutProvider.tsx +172 -0
  68. package/src/ui/CustomFields.tsx +195 -0
  69. package/src/ui/Field.tsx +114 -0
  70. package/src/ui/I18nProvider.tsx +36 -0
  71. package/src/ui/InstallmentPicker.tsx +69 -0
  72. package/src/ui/Loader.tsx +12 -0
  73. package/src/ui/PaymentMethods.tsx +133 -0
  74. package/src/ui/PriceLine.tsx +24 -0
  75. package/src/ui/QuantitySelect.tsx +50 -0
  76. package/src/ui/Stepper.tsx +36 -0
  77. package/src/ui/Timer.tsx +34 -0
  78. package/src/ui/TimerBanner.tsx +55 -0
  79. package/src/ui/cx.ts +3 -0
  80. package/src/ui/index.ts +54 -0
  81. package/src/ui/theme.ts +83 -0
  82. package/src/useCheckout.ts +35 -0
  83. package/src/xendit.ts +438 -0
  84. package/dist/adapters/customFields.d.ts +0 -12
  85. package/dist/adapters/index.d.ts +0 -1
  86. package/dist/api/auth.d.ts +0 -27
  87. package/dist/api/cart.d.ts +0 -2
  88. package/dist/api/checkout.d.ts +0 -3
  89. package/dist/api/common.d.ts +0 -11
  90. package/dist/api/guestTicketDelegation.d.ts +0 -47
  91. package/dist/api/index.d.ts +0 -82
  92. package/dist/api/interceptors.d.ts +0 -1
  93. package/dist/api/orders.d.ts +0 -2
  94. package/dist/api/payment.d.ts +0 -5
  95. package/dist/api/preRegistrationComplete.d.ts +0 -3
  96. package/dist/api/publicRequest.d.ts +0 -9
  97. package/dist/api/resale.d.ts +0 -5
  98. package/dist/components/account-settings/index.d.ts +0 -3
  99. package/dist/components/addonsContainer/AddonComponent.d.ts +0 -18
  100. package/dist/components/addonsContainer/SimpleAddonsContainer.d.ts +0 -20
  101. package/dist/components/addonsContainer/adapters/index.d.ts +0 -12
  102. package/dist/components/addonsContainer/index.d.ts +0 -22
  103. package/dist/components/addonsContainer/normalizers/index.d.ts +0 -1
  104. package/dist/components/addonsContainer/useAddons.d.ts +0 -23
  105. package/dist/components/addonsContainer/utils/index.d.ts +0 -16
  106. package/dist/components/billing-info-container/hooks/index.d.ts +0 -3
  107. package/dist/components/billing-info-container/hooks/usePaymentContext.d.ts +0 -5
  108. package/dist/components/billing-info-container/hooks/usePaymentRedirect.d.ts +0 -14
  109. package/dist/components/billing-info-container/hooks/useStripePayment.d.ts +0 -18
  110. package/dist/components/billing-info-container/index.d.ts +0 -69
  111. package/dist/components/billing-info-container/utils.d.ts +0 -59
  112. package/dist/components/common/Checkbox.d.ts +0 -11
  113. package/dist/components/common/CheckboxField/index.d.ts +0 -9
  114. package/dist/components/common/CopyField.d.ts +0 -12
  115. package/dist/components/common/CopyMessageModal.d.ts +0 -7
  116. package/dist/components/common/CustomField.d.ts +0 -26
  117. package/dist/components/common/DatePickerField.d.ts +0 -20
  118. package/dist/components/common/FieldSection/index.d.ts +0 -19
  119. package/dist/components/common/FieldSection/utils/index.d.ts +0 -8
  120. package/dist/components/common/FormikPhoneNumberField.d.ts +0 -11
  121. package/dist/components/common/Loader.d.ts +0 -2
  122. package/dist/components/common/ModalComponent/index.d.ts +0 -16
  123. package/dist/components/common/NativeSelectFeild/index.d.ts +0 -21
  124. package/dist/components/common/PhoneNumberField.d.ts +0 -14
  125. package/dist/components/common/PoweredBy.d.ts +0 -2
  126. package/dist/components/common/RadioField.d.ts +0 -11
  127. package/dist/components/common/RadioGroupField/index.d.ts +0 -17
  128. package/dist/components/common/RedirectModal.d.ts +0 -7
  129. package/dist/components/common/SelectField/index.d.ts +0 -19
  130. package/dist/components/common/SnackbarAlert.d.ts +0 -13
  131. package/dist/components/common/index.d.ts +0 -11
  132. package/dist/components/common/socials.d.ts +0 -10
  133. package/dist/components/confirmModal/index.d.ts +0 -10
  134. package/dist/components/confirmationContainer/config.d.ts +0 -1
  135. package/dist/components/confirmationContainer/index.d.ts +0 -46
  136. package/dist/components/confirmationContainer/social-buttons.d.ts +0 -16
  137. package/dist/components/countdown/index.d.ts +0 -14
  138. package/dist/components/delegationsContainer/IssueComponent.d.ts +0 -10
  139. package/dist/components/delegationsContainer/IssueTicketForm.d.ts +0 -9
  140. package/dist/components/delegationsContainer/TicketsAssignedTable.d.ts +0 -11
  141. package/dist/components/delegationsContainer/TicketsAvailableTable.d.ts +0 -11
  142. package/dist/components/delegationsContainer/index.d.ts +0 -10
  143. package/dist/components/forgotPasswordModal/index.d.ts +0 -12
  144. package/dist/components/idVerificationContainer/VerificationPendingModal.d.ts +0 -10
  145. package/dist/components/idVerificationContainer/constants.d.ts +0 -21
  146. package/dist/components/idVerificationContainer/index.d.ts +0 -16
  147. package/dist/components/index.d.ts +0 -12
  148. package/dist/components/loginForm/index.d.ts +0 -31
  149. package/dist/components/loginModal/SignUpForm.d.ts +0 -10
  150. package/dist/components/loginModal/constants.d.ts +0 -39
  151. package/dist/components/loginModal/index.d.ts +0 -22
  152. package/dist/components/myTicketsContainer/index.d.ts +0 -16
  153. package/dist/components/myTicketsContainer/row.d.ts +0 -3
  154. package/dist/components/myTicketsContainer/tableConfig.d.ts +0 -5
  155. package/dist/components/orderDetailsContainer/CustomFieldsForm.d.ts +0 -12
  156. package/dist/components/orderDetailsContainer/TicketHolderCustomFields.d.ts +0 -10
  157. package/dist/components/orderDetailsContainer/index.d.ts +0 -66
  158. package/dist/components/orderDetailsContainer/ticketsTable.d.ts +0 -46
  159. package/dist/components/orderDetailsContainer/utils/index.d.ts +0 -6
  160. package/dist/components/paymentContainer/OrderDetails.d.ts +0 -9
  161. package/dist/components/paymentContainer/PaymentPlanSection.d.ts +0 -10
  162. package/dist/components/paymentContainer/handlePayment.d.ts +0 -15
  163. package/dist/components/paymentContainer/index.d.ts +0 -39
  164. package/dist/components/preRegistration/FieldsSection.d.ts +0 -19
  165. package/dist/components/preRegistration/Influancers.d.ts +0 -2
  166. package/dist/components/preRegistration/PreRegistrationComplete.d.ts +0 -13
  167. package/dist/components/preRegistration/PreRegistrationInformations.d.ts +0 -2
  168. package/dist/components/preRegistration/Prewards.d.ts +0 -2
  169. package/dist/components/preRegistration/ShareOptions.d.ts +0 -2
  170. package/dist/components/preRegistration/constants.d.ts +0 -2
  171. package/dist/components/preRegistration/index.d.ts +0 -23
  172. package/dist/components/preRegistration/utils.d.ts +0 -12
  173. package/dist/components/registerForm/adapters/index.d.ts +0 -4
  174. package/dist/components/registerForm/constants.d.ts +0 -1
  175. package/dist/components/registerForm/index.d.ts +0 -16
  176. package/dist/components/registerModal/index.d.ts +0 -12
  177. package/dist/components/resetPasswordContainer/index.d.ts +0 -10
  178. package/dist/components/rsvpContainer/index.d.ts +0 -7
  179. package/dist/components/seatMapContainer/SeatMapComponent.d.ts +0 -8
  180. package/dist/components/seatMapContainer/TicketsSection.d.ts +0 -9
  181. package/dist/components/seatMapContainer/addToCart.d.ts +0 -14
  182. package/dist/components/seatMapContainer/index.d.ts +0 -2
  183. package/dist/components/seatMapContainer/utils.d.ts +0 -6
  184. package/dist/components/signupModal/index.d.ts +0 -12
  185. package/dist/components/ticketResale/index.d.ts +0 -12
  186. package/dist/components/ticketResaleModal/index.d.ts +0 -19
  187. package/dist/components/ticketsContainer/AccessCodeSection.d.ts +0 -7
  188. package/dist/components/ticketsContainer/InfoIcon.d.ts +0 -5
  189. package/dist/components/ticketsContainer/PromoCodeSection.d.ts +0 -15
  190. package/dist/components/ticketsContainer/ReferralLogic.d.ts +0 -5
  191. package/dist/components/ticketsContainer/TicketRow.d.ts +0 -13
  192. package/dist/components/ticketsContainer/TicketsSection.d.ts +0 -20
  193. package/dist/components/ticketsContainer/TimeSlotTicketRow.d.ts +0 -19
  194. package/dist/components/ticketsContainer/TimeSlotsSection.d.ts +0 -25
  195. package/dist/components/ticketsContainer/index.d.ts +0 -93
  196. package/dist/components/ticketsContainer/utils.d.ts +0 -13
  197. package/dist/components/timerWidget/index.d.ts +0 -16
  198. package/dist/components/waitingList/index.d.ts +0 -9
  199. package/dist/constants/index.d.ts +0 -7
  200. package/dist/env.d.ts +0 -16
  201. package/dist/hoc/CustomFields/index.d.ts +0 -3
  202. package/dist/hoc/index.d.ts +0 -1
  203. package/dist/hooks/index.d.ts +0 -1
  204. package/dist/hooks/useCookieListener.d.ts +0 -1
  205. package/dist/hooks/useEventListener.d.ts +0 -1
  206. package/dist/hooks/useLocalStorageListener.d.ts +0 -1
  207. package/dist/hooks/useOnline.d.ts +0 -1
  208. package/dist/hooks/usePixel.d.ts +0 -6
  209. package/dist/images/Polygon.png +0 -0
  210. package/dist/images/cross.svg +0 -44
  211. package/dist/images/done.svg +0 -3
  212. package/dist/images/edit.svg +0 -10
  213. package/dist/images/email.svg +0 -1
  214. package/dist/images/instagram.svg +0 -5
  215. package/dist/images/logo-ttf.png +0 -0
  216. package/dist/images/spotify.svg +0 -6
  217. package/dist/images/user.svg +0 -1
  218. package/dist/images/xmark.svg +0 -92
  219. package/dist/normalizers/index.d.ts +0 -4
  220. package/dist/tf-checkout-react.cjs.development.js +0 -16149
  221. package/dist/tf-checkout-react.cjs.development.js.map +0 -1
  222. package/dist/tf-checkout-react.cjs.production.min.js +0 -2
  223. package/dist/tf-checkout-react.cjs.production.min.js.map +0 -1
  224. package/dist/tf-checkout-react.esm.js +0 -16116
  225. package/dist/tf-checkout-react.esm.js.map +0 -1
  226. package/dist/tf-checkout-styles.css +0 -1
  227. package/dist/types/add_on.d.ts +0 -8
  228. package/dist/types/billing-info-data.d.ts +0 -27
  229. package/dist/types/checkoutPageConfigs.d.ts +0 -13
  230. package/dist/types/index.d.ts +0 -6
  231. package/dist/types/order-data.d.ts +0 -15
  232. package/dist/types/payment-field.d.ts +0 -6
  233. package/dist/types/payment-plan-configuration.d.ts +0 -18
  234. package/dist/types/referral-promotion.d.ts +0 -6
  235. package/dist/types/verification.d.ts +0 -12
  236. package/dist/utils/adaptStripeErrors.d.ts +0 -8
  237. package/dist/utils/auth.d.ts +0 -21
  238. package/dist/utils/cookies.d.ts +0 -3
  239. package/dist/utils/createCheckoutDataBodyWithDefaultHolder.d.ts +0 -23
  240. package/dist/utils/createMarkup.d.ts +0 -3
  241. package/dist/utils/customFields.d.ts +0 -35
  242. package/dist/utils/downloadPDF.d.ts +0 -1
  243. package/dist/utils/form.d.ts +0 -3
  244. package/dist/utils/formikErrorFocus.d.ts +0 -2
  245. package/dist/utils/getDomain.d.ts +0 -1
  246. package/dist/utils/getImage.d.ts +0 -1
  247. package/dist/utils/getQueryVariable.d.ts +0 -1
  248. package/dist/utils/htmlNodeFromString.d.ts +0 -1
  249. package/dist/utils/index.d.ts +0 -15
  250. package/dist/utils/isBrowser.d.ts +0 -1
  251. package/dist/utils/isValidNumber.d.ts +0 -1
  252. package/dist/utils/jsonUtils.d.ts +0 -1
  253. package/dist/utils/replaceVarInString.d.ts +0 -1
  254. package/dist/utils/setConfigs.d.ts +0 -11
  255. package/dist/utils/showZero.d.ts +0 -1
  256. package/dist/validators/index.d.ts +0 -8
  257. package/src/adapters/customFields.ts +0 -85
  258. package/src/adapters/index.ts +0 -1
  259. package/src/api/auth.ts +0 -88
  260. package/src/api/cart.ts +0 -28
  261. package/src/api/checkout.ts +0 -28
  262. package/src/api/common.ts +0 -190
  263. package/src/api/guestTicketDelegation.ts +0 -79
  264. package/src/api/index.ts +0 -346
  265. package/src/api/interceptors.ts +0 -77
  266. package/src/api/orders.ts +0 -30
  267. package/src/api/payment.ts +0 -77
  268. package/src/api/preRegistrationComplete.ts +0 -37
  269. package/src/api/publicRequest.ts +0 -47
  270. package/src/api/resale.ts +0 -28
  271. package/src/assets/images/Polygon.png +0 -0
  272. package/src/assets/images/cross.svg +0 -44
  273. package/src/assets/images/done.svg +0 -3
  274. package/src/assets/images/edit.svg +0 -10
  275. package/src/assets/images/email.svg +0 -1
  276. package/src/assets/images/instagram.svg +0 -5
  277. package/src/assets/images/logo-ttf.png +0 -0
  278. package/src/assets/images/spotify.svg +0 -6
  279. package/src/assets/images/user.svg +0 -1
  280. package/src/assets/images/xmark.svg +0 -92
  281. package/src/components/account-settings/index.tsx +0 -161
  282. package/src/components/account-settings/style.css +0 -200
  283. package/src/components/addonsContainer/AddonComponent.tsx +0 -204
  284. package/src/components/addonsContainer/SimpleAddonsContainer.tsx +0 -459
  285. package/src/components/addonsContainer/adapters/index.tsx +0 -62
  286. package/src/components/addonsContainer/index.tsx +0 -353
  287. package/src/components/addonsContainer/normalizers/index.ts +0 -5
  288. package/src/components/addonsContainer/useAddons.ts +0 -248
  289. package/src/components/addonsContainer/utils/index.tsx +0 -231
  290. package/src/components/billing-info-container/hooks/index.ts +0 -3
  291. package/src/components/billing-info-container/hooks/usePaymentContext.ts +0 -22
  292. package/src/components/billing-info-container/hooks/usePaymentRedirect.ts +0 -145
  293. package/src/components/billing-info-container/hooks/useStripePayment.ts +0 -119
  294. package/src/components/billing-info-container/index.tsx +0 -1695
  295. package/src/components/billing-info-container/style.css +0 -150
  296. package/src/components/billing-info-container/utils.tsx +0 -413
  297. package/src/components/common/Checkbox.tsx +0 -51
  298. package/src/components/common/CheckboxField/index.tsx +0 -41
  299. package/src/components/common/CopyField.tsx +0 -53
  300. package/src/components/common/CopyMessageModal.tsx +0 -34
  301. package/src/components/common/CustomField.tsx +0 -168
  302. package/src/components/common/DatePickerField.tsx +0 -126
  303. package/src/components/common/FieldSection/index.tsx +0 -141
  304. package/src/components/common/FieldSection/utils/index.tsx +0 -92
  305. package/src/components/common/FormikPhoneNumberField.tsx +0 -51
  306. package/src/components/common/Loader.tsx +0 -8
  307. package/src/components/common/ModalComponent/index.tsx +0 -68
  308. package/src/components/common/NativeSelectFeild/index.tsx +0 -86
  309. package/src/components/common/PhoneNumberField.tsx +0 -117
  310. package/src/components/common/PoweredBy.tsx +0 -15
  311. package/src/components/common/RadioField.tsx +0 -36
  312. package/src/components/common/RadioGroupField/index.tsx +0 -76
  313. package/src/components/common/RedirectModal.tsx +0 -43
  314. package/src/components/common/SelectField/index.tsx +0 -104
  315. package/src/components/common/SnackbarAlert.tsx +0 -52
  316. package/src/components/common/index.tsx +0 -11
  317. package/src/components/common/socials.tsx +0 -33
  318. package/src/components/confirmModal/index.tsx +0 -60
  319. package/src/components/confirmationContainer/config.ts +0 -79
  320. package/src/components/confirmationContainer/index.tsx +0 -349
  321. package/src/components/confirmationContainer/social-buttons.tsx +0 -149
  322. package/src/components/confirmationContainer/style.css +0 -206
  323. package/src/components/countdown/index.tsx +0 -100
  324. package/src/components/countdown/style.css +0 -10
  325. package/src/components/delegationsContainer/IssueComponent.tsx +0 -156
  326. package/src/components/delegationsContainer/IssueTicketForm.tsx +0 -109
  327. package/src/components/delegationsContainer/TicketsAssignedTable.tsx +0 -55
  328. package/src/components/delegationsContainer/TicketsAvailableTable.tsx +0 -54
  329. package/src/components/delegationsContainer/index.tsx +0 -83
  330. package/src/components/forgotPasswordModal/index.tsx +0 -138
  331. package/src/components/forgotPasswordModal/style.css +0 -47
  332. package/src/components/idVerificationContainer/VerificationPendingModal.tsx +0 -47
  333. package/src/components/idVerificationContainer/constants.ts +0 -27
  334. package/src/components/idVerificationContainer/index.tsx +0 -323
  335. package/src/components/index.ts +0 -12
  336. package/src/components/loginForm/index.tsx +0 -202
  337. package/src/components/loginModal/SignUpForm.tsx +0 -329
  338. package/src/components/loginModal/constants.ts +0 -46
  339. package/src/components/loginModal/index.tsx +0 -263
  340. package/src/components/loginModal/style.css +0 -116
  341. package/src/components/myTicketsContainer/index.tsx +0 -228
  342. package/src/components/myTicketsContainer/row.tsx +0 -46
  343. package/src/components/myTicketsContainer/style.css +0 -40
  344. package/src/components/myTicketsContainer/tableConfig.tsx +0 -80
  345. package/src/components/myTicketsContainer/types.d.ts +0 -41
  346. package/src/components/orderDetailsContainer/CustomFieldsForm.tsx +0 -75
  347. package/src/components/orderDetailsContainer/TicketHolderCustomFields.tsx +0 -100
  348. package/src/components/orderDetailsContainer/index.tsx +0 -586
  349. package/src/components/orderDetailsContainer/style.css +0 -77
  350. package/src/components/orderDetailsContainer/ticketsTable.tsx +0 -246
  351. package/src/components/orderDetailsContainer/utils/index.tsx +0 -55
  352. package/src/components/paymentContainer/OrderDetails.tsx +0 -277
  353. package/src/components/paymentContainer/PaymentPlanSection.tsx +0 -169
  354. package/src/components/paymentContainer/handlePayment.ts +0 -86
  355. package/src/components/paymentContainer/index.tsx +0 -643
  356. package/src/components/paymentContainer/style.css +0 -196
  357. package/src/components/preRegistration/FieldsSection.tsx +0 -150
  358. package/src/components/preRegistration/Influancers.tsx +0 -34
  359. package/src/components/preRegistration/PreRegistrationComplete.tsx +0 -186
  360. package/src/components/preRegistration/PreRegistrationInformations.tsx +0 -60
  361. package/src/components/preRegistration/Prewards.tsx +0 -41
  362. package/src/components/preRegistration/ShareOptions.tsx +0 -77
  363. package/src/components/preRegistration/constants.tsx +0 -169
  364. package/src/components/preRegistration/index.tsx +0 -330
  365. package/src/components/preRegistration/style.css +0 -3
  366. package/src/components/preRegistration/utils.ts +0 -163
  367. package/src/components/registerForm/adapters/index.tsx +0 -10
  368. package/src/components/registerForm/constants.tsx +0 -98
  369. package/src/components/registerForm/index.tsx +0 -188
  370. package/src/components/registerModal/index.tsx +0 -154
  371. package/src/components/registerModal/style.css +0 -18
  372. package/src/components/resetPasswordContainer/index.tsx +0 -102
  373. package/src/components/resetPasswordContainer/style.css +0 -36
  374. package/src/components/rsvpContainer/index.tsx +0 -126
  375. package/src/components/seatMapContainer/SeatMapComponent.tsx +0 -77
  376. package/src/components/seatMapContainer/TicketsSection.tsx +0 -286
  377. package/src/components/seatMapContainer/addToCart.ts +0 -66
  378. package/src/components/seatMapContainer/index.tsx +0 -443
  379. package/src/components/seatMapContainer/utils.ts +0 -133
  380. package/src/components/signupModal/index.tsx +0 -178
  381. package/src/components/signupModal/style.css +0 -58
  382. package/src/components/ticketResale/index.tsx +0 -86
  383. package/src/components/ticketResaleModal/index.tsx +0 -224
  384. package/src/components/ticketResaleModal/style.css +0 -28
  385. package/src/components/ticketsContainer/AccessCodeSection.tsx +0 -50
  386. package/src/components/ticketsContainer/InfoIcon.tsx +0 -35
  387. package/src/components/ticketsContainer/PromoCodeSection.tsx +0 -116
  388. package/src/components/ticketsContainer/ReferralLogic.tsx +0 -33
  389. package/src/components/ticketsContainer/TicketRow.tsx +0 -107
  390. package/src/components/ticketsContainer/TicketsSection.tsx +0 -350
  391. package/src/components/ticketsContainer/TimeSlotTicketRow.tsx +0 -243
  392. package/src/components/ticketsContainer/TimeSlotsSection.tsx +0 -194
  393. package/src/components/ticketsContainer/index.tsx +0 -986
  394. package/src/components/ticketsContainer/style.css +0 -178
  395. package/src/components/ticketsContainer/utils.ts +0 -35
  396. package/src/components/timerWidget/index.tsx +0 -97
  397. package/src/components/timerWidget/style.css +0 -35
  398. package/src/components/waitingList/index.tsx +0 -190
  399. package/src/components/waitingList/style.css +0 -27
  400. package/src/constants/index.ts +0 -3
  401. package/src/env.ts +0 -29
  402. package/src/hoc/CustomFields/index.tsx +0 -85
  403. package/src/hoc/index.ts +0 -1
  404. package/src/hooks/index.ts +0 -1
  405. package/src/hooks/useCookieListener.ts +0 -32
  406. package/src/hooks/useEventListener.ts +0 -32
  407. package/src/hooks/useLocalStorageListener.ts +0 -32
  408. package/src/hooks/useOnline.ts +0 -21
  409. package/src/hooks/usePixel.ts +0 -88
  410. package/src/normalizers/index.ts +0 -49
  411. package/src/types/add_on.ts +0 -8
  412. package/src/types/api/auth.d.ts +0 -63
  413. package/src/types/api/axiosResponse.d.ts +0 -6
  414. package/src/types/api/cart.d.ts +0 -73
  415. package/src/types/api/checkout.d.ts +0 -92
  416. package/src/types/api/common.d.ts +0 -153
  417. package/src/types/api/guestTicketDelegation.d.ts +0 -18
  418. package/src/types/api/orders.d.ts +0 -116
  419. package/src/types/api/payment.d.ts +0 -180
  420. package/src/types/api/preRegistration.d.ts +0 -11
  421. package/src/types/api/preRegistrationComplete.d.ts +0 -95
  422. package/src/types/api/ticketResale.d.ts +0 -13
  423. package/src/types/billing-info-data.ts +0 -37
  424. package/src/types/checkoutPageConfigs.ts +0 -13
  425. package/src/types/formFields.d.ts +0 -29
  426. package/src/types/index.ts +0 -6
  427. package/src/types/order-data.ts +0 -16
  428. package/src/types/payment-field.ts +0 -7
  429. package/src/types/payment-plan-configuration.ts +0 -19
  430. package/src/types/pre-registration-complete.d.ts +0 -47
  431. package/src/types/referral-promotion.ts +0 -7
  432. package/src/types/seatMap.d.ts +0 -159
  433. package/src/types/verification.ts +0 -12
  434. package/src/utils/adaptStripeErrors.ts +0 -26
  435. package/src/utils/auth.ts +0 -45
  436. package/src/utils/cookies.ts +0 -73
  437. package/src/utils/createCheckoutDataBodyWithDefaultHolder.ts +0 -81
  438. package/src/utils/createMarkup.ts +0 -1
  439. package/src/utils/customFields.ts +0 -80
  440. package/src/utils/downloadPDF.tsx +0 -42
  441. package/src/utils/form.ts +0 -34
  442. package/src/utils/formikErrorFocus.ts +0 -24
  443. package/src/utils/getDomain.ts +0 -21
  444. package/src/utils/getImage.ts +0 -14
  445. package/src/utils/getQueryVariable.ts +0 -13
  446. package/src/utils/htmlNodeFromString.ts +0 -6
  447. package/src/utils/index.ts +0 -15
  448. package/src/utils/isBrowser.ts +0 -2
  449. package/src/utils/isValidNumber.ts +0 -8
  450. package/src/utils/jsonUtils.ts +0 -8
  451. package/src/utils/replaceVarInString.ts +0 -9
  452. package/src/utils/setConfigs.ts +0 -24
  453. package/src/utils/showZero.tsx +0 -10
  454. package/src/validators/index.ts +0 -61
@@ -1,986 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-explicit-any */
2
- import './style.css'
3
-
4
- import { ThemeOptions } from '@mui/material'
5
- import Alert from '@mui/material/Alert'
6
- import { createTheme, ThemeProvider } from '@mui/material/styles'
7
- import { CSSProperties } from '@mui/styles'
8
- import axios, { AxiosError } from 'axios'
9
- import _filter from 'lodash/filter'
10
- import _find from 'lodash/find'
11
- import _flatten from 'lodash/flatten'
12
- import _forEach from 'lodash/forEach'
13
- import _get from 'lodash/get'
14
- import _identity from 'lodash/identity'
15
- import _includes from 'lodash/includes'
16
- import _isEmpty from 'lodash/isEmpty'
17
- import _map from 'lodash/map'
18
- import _some from 'lodash/some'
19
- import moment from 'moment-timezone'
20
- import React, { ReactNode, useEffect, useRef, useState } from 'react'
21
- import Button from 'react-bootstrap/Button'
22
-
23
- import {
24
- addToCart,
25
- getCheckoutPageConfigs,
26
- getEvent,
27
- getProfileData,
28
- getTickets,
29
- postOnCheckout,
30
- } from '../../api'
31
- import { getTimeSlotsByDate } from '../../api/common'
32
- import { getPreRegistrationInfluencers } from '../../api/preRegistrationComplete'
33
- import { X_TF_ECOMMERCE } from '../../constants'
34
- import { useCookieListener } from '../../hooks/useCookieListener'
35
- import { useLocalStorageListener } from '../../hooks/useLocalStorageListener'
36
- import { usePixel } from '../../hooks/usePixel'
37
- import {
38
- createCheckoutDataBodyWithDefaultHolder,
39
- getCookieByName,
40
- getQueryVariable,
41
- isBrowser,
42
- setLoggedUserData,
43
- } from '../../utils'
44
- import { logoutUser } from '../../utils/auth'
45
- import { Loader } from '../common/index'
46
- import { PoweredBy } from '../common/PoweredBy'
47
- import ConfirmModal from '../confirmModal'
48
- import Countdown from '../countdown'
49
- import { VerificationPendingModal } from '../idVerificationContainer/VerificationPendingModal'
50
- import { LoginModal } from '../loginModal'
51
- import { PreRegistration } from '../preRegistration'
52
- import WaitingList from '../waitingList'
53
- import { AccessCodeSection } from './AccessCodeSection'
54
- import { PromoCodeSection } from './PromoCodeSection'
55
- import { ReferralLogic } from './ReferralLogic'
56
- import { TicketsSection } from './TicketsSection'
57
- import TimeSlotsSection from './TimeSlotsSection'
58
-
59
- const checkUserPreregistration = (preregisteredUsers: IInfluencerData[]) => {
60
- const isWindowDefined = typeof window !== 'undefined'
61
- const userDataString = isWindowDefined ? window.localStorage.getItem('user_data') : ''
62
- let isPreregisteredUser = false
63
- if (userDataString) {
64
- const user = JSON.parse(userDataString)
65
- isPreregisteredUser = _some(preregisteredUsers, item => item.email === user?.email)
66
- }
67
- return isPreregisteredUser
68
- }
69
-
70
- interface TimeSlotsAttributes {
71
- ValidPromoCode: boolean;
72
- is_access_code: boolean;
73
- isPromotionsEnabled: boolean;
74
- }
75
-
76
- interface CartSuccess {
77
- skip_billing_page: boolean;
78
- event_id: string;
79
- hash?: string | number;
80
- total?: string | number;
81
- hasAddOn?: boolean;
82
- eventSlug?: string;
83
- cart?: ICart[];
84
- currencySymbol?: string;
85
- }
86
-
87
- export interface IGetTickets {
88
- eventId: number;
89
- onAddToCartSuccess: (response: CartSuccess) => void;
90
- getTicketsLabel?: string;
91
- contentStyle?: React.CSSProperties;
92
- onAddToCartError: (e: AxiosError) => void;
93
- onGetTicketsSuccess: (response: {
94
- data: { attributes: { tickets: ITicketData[] } };
95
- }) => void;
96
- onGetTicketsPress: () => void;
97
- onGetTicketsError: (e: AxiosError) => void;
98
- onLogoutSuccess: () => void;
99
- onLogoutError: (e: AxiosError) => void;
100
- onGetProfileDataSuccess: (response: {
101
- data: { attributes: { [key: string]: string | number | boolean | null } };
102
- }) => void;
103
- onGetProfileDataError: (e: AxiosError) => void;
104
- onLoginSuccess: () => void;
105
- handleNotInvitedModalClose: () => void;
106
- handleInvalidLinkModalClose: () => void;
107
- theme?: 'light' | 'dark';
108
- queryPromoCode?: string;
109
- isPromotionsEnabled?: boolean;
110
- themeOptions?: ThemeOptions & {
111
- input?: CSSProperties;
112
- checkbox?: CSSProperties;
113
- };
114
- isAccessCodeEnabled?: boolean;
115
- hideSessionButtons?: boolean;
116
- hideWaitingList?: boolean;
117
- enableBillingInfoAutoCreate?: boolean;
118
- isButtonScrollable?: boolean;
119
- sortBySoldOut?: boolean;
120
- disableCountdownLeadingZero?: boolean;
121
- isLoggedIn?: boolean;
122
- actionsSectionComponent?: ReactNode;
123
- ticketsHeaderComponent?: ReactNode;
124
- hideTicketsHeader?: boolean;
125
- tableTicketsHeaderComponent?: ReactNode;
126
- hideTableTicketsHeader?: boolean;
127
- enableInfluencersSection?: boolean;
128
- enableAddOns?: boolean;
129
- ordersPath?: string;
130
- showPoweredByImage?: boolean;
131
- promoText?: string;
132
- showGroupNameBlock?: boolean;
133
- currencySymbol?: string;
134
- onReserveButtonClick?: () => void;
135
- onPendingVerification?: () => void;
136
- showAlertIcons?: boolean;
137
- submitMode?: 'auto' | 'click';
138
- onPreRegistrationSuccess?: (response: any) => void;
139
- onPreRegistrationError?: (e: AxiosError) => void;
140
- onPreRegistrationGetCountriesSuccess?: (res: any) => void;
141
- onPreRegistrationGetCountriesError?: (e: AxiosError) => void;
142
- onForgotPasswordSuccess?: (res: any) => void;
143
- onForgotPasswordError?: (e: AxiosError) => void;
144
- showForgotPasswordButton?: boolean;
145
- logo?: string;
146
- }
147
-
148
- export interface ITicket {
149
- id: string | number;
150
- [key: string]: string | number;
151
- }
152
-
153
- interface IInfluencer {
154
- [key: string]: string | undefined;
155
- }
156
- export interface ISelectedTickets {
157
- isTable: boolean;
158
- [key: string]: string | number | boolean;
159
- }
160
-
161
- export const TicketsContainer = ({
162
- onLoginSuccess,
163
- getTicketsLabel,
164
- eventId,
165
- onAddToCartSuccess,
166
- contentStyle = {},
167
- onAddToCartError = _identity,
168
- onGetTicketsSuccess = _identity,
169
- onGetTicketsError = _identity,
170
- onLogoutSuccess = _identity,
171
- onLogoutError = _identity,
172
- onGetProfileDataSuccess = _identity,
173
- onGetProfileDataError = _identity,
174
- onGetTicketsPress = _identity,
175
- theme = 'light',
176
- queryPromoCode = '',
177
- isPromotionsEnabled = true,
178
- themeOptions,
179
- isAccessCodeEnabled = false,
180
- hideSessionButtons = false,
181
- hideWaitingList = false,
182
- enableBillingInfoAutoCreate = true,
183
- isButtonScrollable = false,
184
- sortBySoldOut = false,
185
- disableCountdownLeadingZero = false,
186
- isLoggedIn = false,
187
- actionsSectionComponent: ActionsSectionComponent,
188
- ticketsHeaderComponent,
189
- hideTicketsHeader = false,
190
- tableTicketsHeaderComponent,
191
- hideTableTicketsHeader = false,
192
- enableInfluencersSection = true,
193
- enableAddOns = true,
194
- handleNotInvitedModalClose = _identity,
195
- handleInvalidLinkModalClose = _identity,
196
- ordersPath,
197
- showPoweredByImage = false,
198
- promoText,
199
- showGroupNameBlock = false,
200
- currencySymbol = '',
201
- onReserveButtonClick = _identity,
202
- onPendingVerification = _identity,
203
- showAlertIcons = true,
204
- onPreRegistrationSuccess = _identity,
205
- onPreRegistrationError = _identity,
206
- onPreRegistrationGetCountriesSuccess = _identity,
207
- onPreRegistrationGetCountriesError = _identity,
208
- onForgotPasswordSuccess = _identity,
209
- onForgotPasswordError = _identity,
210
- showForgotPasswordButton = false,
211
- logo,
212
- }: IGetTickets) => {
213
- const [selectedTickets, setSelectedTickets] = useState({} as ISelectedTickets)
214
- const [isLogged, setIsLogged] = useState(Boolean(getCookieByName(X_TF_ECOMMERCE)))
215
- const [showLoginModal, setShowLoginModal] = useState(false)
216
- const [tickets, setTickets] = useState([] as ITicketData[])
217
- const [event, setEvent] = useState<any>(null)
218
- const [showWaitingList, setShowWaitingList] = useState(false)
219
- const [isLoading, setIsLoading] = useState(true)
220
- const [codeIsLoading, setCodeIsLoading] = useState(false)
221
- const [handleBookIsLoading, setHandleBookIsLoading] = useState(false)
222
- const [code, setCode] = useState(getQueryVariable('r') || queryPromoCode)
223
- const [showPromoInput, setShowPromoInput] = useState(false)
224
- const [codeIsApplied, setCodeIsApplied] = useState(false)
225
- const [codeIsInvalid, setCodeIsInvalid] = useState(false)
226
- const [showAccessCodeSection, setShowAccessCodeSection] = useState(isAccessCodeEnabled)
227
- const [showPromoCodeSection, setShowPromoCodeSection] = useState(isPromotionsEnabled)
228
- const [error, setError] = useState<string | null>(null)
229
- const [isNotInvitedError, setIsNotInvitedError] = useState('')
230
- const [isInvalidLinkError, setIsInvalidLinkError] = useState('')
231
- const [pendingVerificationMessage, setPendingVerificationMessage] = useState()
232
- const [preregisteredUsers, setPreregisteredUsers] = useState(
233
- [] as Array<IInfluencerData>
234
- )
235
- const [ticketsNotAvailableModalOpen, setTicketsNotAvailableModalOpen] = useState(false)
236
- const [isPreregistered, setIsPreregistered] = useState(
237
- checkUserPreregistration(preregisteredUsers)
238
- )
239
- const ticketsContainerRef = useRef<HTMLDivElement>(null)
240
- const pageUrl = isBrowser ? window.location.href.split('?')[0] : ''
241
- const isTimeSlotEvent = event?.isTimeSlotEvent
242
- const [availableDates, setAvailableDates] = useState<string[]>([])
243
- const [selectedDate, setSelectedDate] = useState<string | null>(null)
244
- const [timeSlotGroups, setTimeSlotGroups] = useState<{ [key: string]: any[] }>({})
245
-
246
- useCookieListener(X_TF_ECOMMERCE, value => setIsLogged(Boolean(value)))
247
- useLocalStorageListener('user_data', (user: any) => {
248
- const isPreregisteredUser = _some(
249
- preregisteredUsers,
250
- item => item.email === user?.email
251
- )
252
- setIsPreregistered(isPreregisteredUser)
253
- })
254
- usePixel(eventId, { pageUrl })
255
-
256
- useEffect(() => {
257
- window.localStorage.removeItem('extraData')
258
- }, [])
259
-
260
- useEffect(() => {
261
- if (eventId) {
262
- getTicketsApi()
263
- fetchPreregisteredData()
264
- }
265
- // eslint-disable-next-line react-hooks/exhaustive-deps
266
- }, [eventId])
267
-
268
- useEffect(() => {
269
- setIsPreregistered(checkUserPreregistration(preregisteredUsers))
270
- }, [preregisteredUsers])
271
-
272
- useEffect(() => {
273
- if (isLogged) {
274
- fetchUserData()
275
- .then(res => {
276
- window.localStorage.setItem('user_data', JSON.stringify(res))
277
- onGetProfileDataSuccess({ data: { attributes: res } })
278
- })
279
- .catch(e => {
280
- if (axios.isAxiosError(e)) {
281
- onGetProfileDataError(e)
282
- }
283
- })
284
- }
285
- }, [isLogged])
286
-
287
-
288
- const handleLogout = () => {
289
- logoutUser({ onLogoutError, onLogoutSuccess, setIsLogged })
290
- }
291
-
292
- const handleExternalLogin = () => {
293
- setIsLogged(true)
294
- }
295
-
296
- const handleOnClose = () => {
297
- setShowLoginModal(false)
298
- }
299
-
300
- const handleOnLogin = () => {
301
- setShowLoginModal(false)
302
- setIsLogged(true)
303
- if (onLoginSuccess) {
304
- onLoginSuccess()
305
- }
306
- }
307
-
308
- const getTimeSlots = async (date: string | null, type?: string): Promise<void> => {
309
- if (!date) {
310
- setShowPromoCodeSection(false)
311
- return
312
- }
313
-
314
- try {
315
- const timeSlotsResponse = await getTimeSlotsByDate(
316
- eventId,
317
- moment(date).format('YYYY-MM-DD'),
318
- code
319
- )
320
-
321
- const groupedTickets: any = {}
322
- _map(timeSlotsResponse.data.attributes.timeslots, (timeslots, date) => {
323
- const dateKeyChunks = date.split('-')
324
- const dateKey = [dateKeyChunks[0], dateKeyChunks[1], dateKeyChunks[2]].join('-')
325
-
326
- _forEach(timeslots, ticketList => {
327
- if (!groupedTickets[dateKey]) {
328
- groupedTickets[dateKey] = []
329
- }
330
- groupedTickets[dateKey] = groupedTickets[dateKey].concat(ticketList)
331
- })
332
- })
333
-
334
- setTimeSlotGroups(groupedTickets)
335
- setShowPromoCodeSection(true)
336
-
337
- const attributes: TimeSlotsAttributes = timeSlotsResponse?.data?.attributes
338
-
339
- if (type === 'promo') {
340
- setCodeIsApplied(attributes.ValidPromoCode)
341
- setCodeIsInvalid(!attributes.ValidPromoCode)
342
- setCode('')
343
- window.localStorage.setItem('appliedPromoCode', code)
344
- setShowAccessCodeSection(attributes.is_access_code)
345
- setShowPromoCodeSection(attributes.isPromotionsEnabled)
346
- }
347
- } catch (error) {}
348
- }
349
-
350
- async function getTicketsApi(isUpdatingCode?: boolean, type?: string) {
351
- try {
352
- if (isUpdatingCode) {
353
- setCodeIsLoading(true)
354
- } else {
355
- setIsLoading(true)
356
- }
357
-
358
- const previewKey = getQueryVariable('pk') || undefined
359
- const eventResponse = await getEvent(eventId, previewKey)
360
- if (eventResponse.success) {
361
- const event = eventResponse.data.attributes
362
- setEvent(event)
363
-
364
- if (event.country && isBrowser) {
365
- window.localStorage.setItem('eventCountry', event.country)
366
- }
367
-
368
- if (event.isTimeSlotEvent) {
369
- getTimeSlots(selectedDate, code)
370
- // For timeslots we shouldn't fetch all tickets at once
371
- setAvailableDates(event?.timeslotSettings?.availableDates ?? [])
372
- return
373
- }
374
- }
375
-
376
- const response = await getTickets(eventId, code, previewKey)
377
-
378
- if (response.success) {
379
- const attributes = response?.data?.attributes
380
- type === 'promo' && setCodeIsApplied(attributes.ValidPromoCode)
381
- type === 'promo' && setCodeIsInvalid(!attributes.ValidPromoCode)
382
- setTickets(attributes.tickets)
383
- setShowWaitingList(attributes.showWaitingList)
384
- onGetTicketsSuccess({
385
- data: { attributes: { tickets: response.data.attributes.tickets } },
386
- })
387
- setCode('')
388
- window.localStorage.setItem('appliedPromoCode', code)
389
- setShowAccessCodeSection(attributes.is_access_code)
390
- setShowPromoCodeSection(attributes.isPromotionsEnabled)
391
- }
392
- } catch (e) {
393
- if (axios.isAxiosError(e)) {
394
- onGetTicketsError(e)
395
- setError(_get(e, 'response.data.message', ''))
396
- window.localStorage.removeItem('appliedPromoCode')
397
- }
398
- } finally {
399
- setIsLoading(false)
400
- setCodeIsLoading(false)
401
- }
402
- }
403
-
404
- async function fetchPreregisteredData() {
405
- try {
406
- const preregistrationData = await getPreRegistrationInfluencers({
407
- eventId,
408
- })
409
- setPreregisteredUsers(preregistrationData.data.attributes.influencers)
410
- } catch (error) {
411
- if (axios.isAxiosError(error)) {
412
- setError(_get(error, 'response.data.message', ''))
413
- }
414
- }
415
- }
416
-
417
- const handleTicketSelect = (key: string, value: number | string, isTable = false) => {
418
- localStorage.setItem('selectedTicketsQuantity', value.toString())
419
- setSelectedTickets(prevState => {
420
- // Allow multiple ticket types to be selected simultaneously when flag is enabled
421
- if (event?.allowMultipleTicketTypePurchases === true) {
422
- // Check if we're switching between tables and regular tickets
423
- const hasExistingSelection = Object.keys(prevState).some(k => k !== 'isTable')
424
- const switchingTicketType = hasExistingSelection && prevState.isTable !== isTable
425
-
426
- // If switching from tables to regular tickets or vice versa, clear all selections
427
- if (switchingTicketType && Number(value) > 0) {
428
- return {
429
- [key]: value,
430
- isTable,
431
- }
432
- }
433
-
434
- // If value is 0, remove this ticket from selection
435
- if (!value || Number(value) === 0) {
436
- const newState = { ...prevState }
437
- delete newState[key]
438
- // If no ticket keys remain (only isTable left), return empty state
439
- const ticketKeys = Object.keys(newState).filter(k => k !== 'isTable')
440
- if (ticketKeys.length === 0) {
441
- return { isTable: false } as ISelectedTickets
442
- }
443
- return { ...newState, isTable: prevState.isTable }
444
- }
445
-
446
- // If value > 0, add or update this ticket while keeping others of the same type selected
447
- return {
448
- ...prevState,
449
- [key]: value,
450
- isTable,
451
- }
452
- }
453
-
454
- // Default behavior: only one ticket type at a time
455
- if (Object.keys(prevState)[0] !== key && !value) {
456
- return prevState
457
- }
458
- return {
459
- [key]: value,
460
- isTable,
461
- }
462
- })
463
- }
464
-
465
- const handleOrdersClick = () => {
466
- if (isBrowser) {
467
- window.location.href = ordersPath ?? '/orders'
468
- }
469
- }
470
-
471
- const onErrorClose = () => {
472
- setError(null)
473
- }
474
-
475
- const handleBook = async () => {
476
- const timeSlotTickets = _flatten(_map(timeSlotGroups, slots => slots))
477
-
478
- setHandleBookIsLoading(true)
479
-
480
- // Unified flow: works for both single and multiple ticket types
481
- const ticketsList = event?.isTimeSlotEvent ? timeSlotTickets : tickets
482
-
483
- // Get all selected ticket IDs with quantity > 0 (excluding 'isTable' key)
484
- const selectedTicketIds = Object.keys(selectedTickets).filter(
485
- key => key !== 'isTable' && Number(selectedTickets[key]) > 0
486
- )
487
-
488
- // Build ticket_types object with all selected tickets (works for 1 or N tickets)
489
- const ticketTypesData: any = {}
490
- let totalProductCartQuantity = 0
491
- let firstTicket: ITicket | null = null
492
-
493
- selectedTicketIds.forEach(ticketId => {
494
- const ticket = _find(ticketsList || [], item => String(item.id) === ticketId) as ITicket
495
- if (ticket) {
496
- if (!firstTicket) firstTicket = ticket
497
- const optionName = _get(ticket, 'optionName')
498
- const quantity = +selectedTickets[ticketId]
499
- totalProductCartQuantity += quantity
500
-
501
- ticketTypesData[ticketId] = {
502
- product_options: {
503
- [optionName]: ticketId,
504
- ticket_price: ticket.price,
505
- },
506
- quantity,
507
- }
508
- }
509
- })
510
-
511
- if (!firstTicket) {
512
- setHandleBookIsLoading(false)
513
- return
514
- }
515
-
516
- const firstOptionName = _get(firstTicket, 'optionName')
517
- const firstTicketId = _get(firstTicket, 'id')
518
-
519
- const data: ICartRequestData = {
520
- attributes: {
521
- alternative_view_id: null,
522
- product_cart_quantity: totalProductCartQuantity,
523
- product_options: {
524
- [firstOptionName]: firstTicketId,
525
- },
526
- product_id: eventId,
527
- ticket_types: ticketTypesData,
528
- },
529
- }
530
-
531
- try {
532
- onGetTicketsPress()
533
- const result = await addToCart(eventId, data)
534
- const pageConfigsDataResponse = enableAddOns
535
- ? await getCheckoutPageConfigs()
536
- : {
537
- status: 200,
538
- data: { attributes: _get(result, 'data.attributes') },
539
- }
540
-
541
- if (pageConfigsDataResponse.status === 200) {
542
- const pageConfigsData: any =
543
- _get(pageConfigsDataResponse, 'data.attributes') || {}
544
-
545
- const skipBillingPage = pageConfigsData.skip_billing_page ?? false
546
- const hasAddOn = pageConfigsData.has_add_on ?? false
547
- const freeTicket = pageConfigsData.free_ticket ?? false
548
-
549
- let hash: string | number | undefined = ''
550
- let total: string | number | undefined = ''
551
-
552
- isBrowser && window.localStorage.removeItem('add_ons')
553
- isBrowser && window.localStorage.removeItem('checkoutAdditionalConfigs')
554
-
555
- if (skipBillingPage && !hasAddOn) {
556
- // Get user data for checkout data
557
- const userData =
558
- isBrowser && window.localStorage.getItem('user_data')
559
- ? JSON.parse(window.localStorage.getItem('user_data') || '{}')
560
- : {}
561
-
562
- const checkoutBody = createCheckoutDataBodyWithDefaultHolder(
563
- totalProductCartQuantity,
564
- userData
565
- )
566
-
567
- const checkoutResponse = enableBillingInfoAutoCreate
568
- ? await postOnCheckout(checkoutBody, freeTicket)
569
- : null
570
-
571
- hash = checkoutResponse?.data?.attributes?.hash || ''
572
- total = checkoutResponse?.data?.attributes?.total || ''
573
- }
574
-
575
- onAddToCartSuccess({
576
- skip_billing_page: skipBillingPage,
577
- event_id: String(eventId),
578
- hash,
579
- total,
580
- hasAddOn,
581
- eventSlug: event?.slug,
582
- cart: pageConfigsDataResponse.data.attributes.cart,
583
- currencySymbol: event?.currency.symbol,
584
- })
585
- }
586
- } catch (e) {
587
- const errorResponse: any = _get(e, 'response', {})
588
- if (errorResponse?.data?.data?.hasUnverifiedOrder) {
589
- setPendingVerificationMessage(errorResponse?.data?.message)
590
- } else if (axios.isAxiosError(e)) {
591
- onAddToCartError(e)
592
- const message = _get(e, 'response.data.message', '')
593
- const isInvalidLinkError = _includes(
594
- message,
595
- 'No more of this ticket type are available right now'
596
- )
597
- const isNotInvitedError = _includes(
598
- message,
599
- 'You must have been invited to this event to attend'
600
- )
601
-
602
- if (isInvalidLinkError) {
603
- setIsInvalidLinkError(message)
604
- } else if (isNotInvitedError) {
605
- setIsNotInvitedError(message)
606
- } else {
607
- setError(message)
608
- }
609
- }
610
- } finally {
611
- setHandleBookIsLoading(false)
612
- }
613
- }
614
-
615
- const updateTickets = (isUpdatingCode?: boolean, type?: string) => {
616
- getTicketsApi(isUpdatingCode, type)
617
- }
618
-
619
- const fetchUserData = async () => {
620
- const userDataResponse = await getProfileData()
621
- const profileData = _get(userDataResponse, 'data')
622
- const profileDataObj = setLoggedUserData(profileData)
623
- return profileDataObj
624
- }
625
-
626
- const isTicketOnSale = event?.isTimeSlotEvent
627
- ? true
628
- : _some(
629
- tickets,
630
- item =>
631
- (item.salesStarted || event?.presalesStarted) &&
632
- !item.salesEnded &&
633
- !item.soldOut
634
- )
635
-
636
- const eventHasTickets = !_isEmpty(tickets)
637
- const isSalesClosed = event?.salesEnded
638
-
639
- const themeMui = createTheme(themeOptions)
640
-
641
- useEffect(() => {
642
- window.document.addEventListener('custom-login', handleExternalLogin)
643
- window.document.addEventListener('custom-logout', handleLogout)
644
-
645
- return () => {
646
- window.document.removeEventListener('custom-login', handleExternalLogin)
647
- window.document.removeEventListener('custom-logout', handleLogout)
648
- }
649
- }, [])
650
-
651
- const handleGetTicketClick = () => {
652
- if (
653
- !handleBookIsLoading &&
654
- !_isEmpty(selectedTickets) &&
655
- Number(Object.values(selectedTickets)[0]) > 0
656
- ) {
657
- handleBook()
658
- } else {
659
- if (isButtonScrollable && ticketsContainerRef && ticketsContainerRef.current) {
660
- ticketsContainerRef.current.scrollIntoView({
661
- behavior: 'smooth',
662
- block: 'center',
663
- inline: 'nearest',
664
- })
665
- }
666
- }
667
- }
668
-
669
- const handleNotAvailableTicketsClick = () => {
670
- if (!_isEmpty(selectedTickets)) {
671
- setTicketsNotAvailableModalOpen(true)
672
- }
673
- }
674
-
675
- const bookButtonIsDisabled =
676
- (handleBookIsLoading ||
677
- _isEmpty(selectedTickets) ||
678
- Object.values(selectedTickets)[0] === 0) &&
679
- !event?.flagSeatMapAllowed
680
-
681
- const isTicketAvailable = _some(
682
- tickets,
683
- ticket =>
684
- ticket.displayTicket &&
685
- !ticket.soldOut &&
686
- (ticket.salesStarted || (event?.presalesStarted && !event?.presalesEnded))
687
- )
688
-
689
- const wrappedActionsSectionComponent = React.isValidElement(ActionsSectionComponent)
690
- ? React.cloneElement(ActionsSectionComponent as React.ReactElement<any>, {
691
- handleGetTicketClick,
692
- isTicketOnSale,
693
- isTicketAvailable,
694
- })
695
- : null
696
-
697
- const externalUrl = event?.redirectUrl
698
- const eventSaleIsNotStarted =
699
- !event?.salesStarted && event?.salesStart && !isTicketAvailable
700
- const influencers = event?.referralsEnabled ? event?.referrals : []
701
-
702
- const canShowGetTicketBtn = () => {
703
- if (
704
- !wrappedActionsSectionComponent &&
705
- !eventSaleIsNotStarted &&
706
- isTicketOnSale &&
707
- !event?.salesEnded &&
708
- !externalUrl
709
- ) {
710
- return true
711
- }
712
-
713
- return false
714
- }
715
-
716
- const onClose = (value: string) => {
717
- if (value === 'notInvited') {
718
- handleNotInvitedModalClose()
719
- } else if (value === 'invalidLink') {
720
- handleInvalidLinkModalClose()
721
- }
722
- setIsNotInvitedError('')
723
- setIsInvalidLinkError('')
724
- }
725
- const hideTopInfluencers = event?.hideTopInfluencers
726
- const isSeatMapAllowed = _get(event, 'seatMapAllowed', false)
727
- const isTableMapEnabled = _get(event, 'tableMapEnabled', false)
728
-
729
- const notAvailableTicketsMessage = `Tickets for this event are not available until ${moment(
730
- event?.salesStart
731
- ).format(
732
- 'dddd, DD MMMM YYYY'
733
- )}. \n If you pre-registered, log into your account first to buy your pre-sale ticket.`
734
-
735
- const tableTickets = _filter(tickets, (ticket: any) => ticket.isTable)
736
- const ordinaryTickets = {} as ITicket
737
- _forEach(tickets, (ticket: any, key: string) => {
738
- if (!ticket.isTable) {
739
- ordinaryTickets[key] = ticket
740
- }
741
- })
742
-
743
-
744
- // Check if event is in pre-registration mode
745
- const isPreRegistrationMode =
746
- event?.preregEnabled &&
747
- event?.preregStarted &&
748
- !event?.preregEnded
749
-
750
- return (
751
- <ThemeProvider theme={themeMui}>
752
- {!isLoading && <ReferralLogic eventId={eventId} />}
753
- <div className={`get-tickets-page ${theme} open-ground`} style={contentStyle}>
754
- {isInvalidLinkError && (
755
- <ConfirmModal
756
- message={isInvalidLinkError}
757
- hideCancelBtn={true}
758
- onClose={() => onClose('invalidLink')}
759
- onConfirm={() => onClose('invalidLink')}
760
- />
761
- )}
762
- {isNotInvitedError && (
763
- <ConfirmModal
764
- hideCancelBtn={true}
765
- message={isNotInvitedError}
766
- onClose={() => onClose('notInvited')}
767
- onConfirm={() => onClose('notInvited')}
768
- // loading={removeFromResaleLoading}
769
- />
770
- )}
771
- {error && (
772
- <Alert
773
- severity="error"
774
- onClose={onErrorClose}
775
- variant="filled"
776
- style={{ width: '350px' }}
777
- >
778
- {error}
779
- </Alert>
780
- )}
781
- {ticketsNotAvailableModalOpen && (
782
- <ConfirmModal
783
- message={notAvailableTicketsMessage}
784
- hideCancelBtn={true}
785
- onClose={() => onClose('invalidLink')}
786
- onConfirm={() => setTicketsNotAvailableModalOpen(false)}
787
- />
788
- )}
789
- {isLoading ? (
790
- <Loader />
791
- ) : isPreRegistrationMode ? (
792
- <PreRegistration
793
- eventId={eventId}
794
- isPreregistrationStarted={event?.preregStarted}
795
- logo={logo}
796
- showForgotPasswordButton={showForgotPasswordButton}
797
- onClose={() => {}}
798
- onLogin={onLoginSuccess}
799
- onLoginButtonClick={() => {}}
800
- onLoginSuccess={onLoginSuccess}
801
- onConfirmationSuccess={onPreRegistrationSuccess}
802
- onConfirmationError={onPreRegistrationError}
803
- onGetCountriesSuccess={onPreRegistrationGetCountriesSuccess}
804
- onGetCountriesError={onPreRegistrationGetCountriesError}
805
- onForgotPasswordSuccess={onForgotPasswordSuccess}
806
- onForgotPasswordError={onForgotPasswordError}
807
- themeOptions={themeOptions}
808
- />
809
- ) : (
810
- <div ref={ticketsContainerRef} className="tickets-section-container">
811
- {isTimeSlotEvent && (
812
- <TimeSlotsSection
813
- event={event}
814
- eventId={eventId}
815
- availableDates={availableDates}
816
- selectedDate={selectedDate}
817
- setSelectedDate={setSelectedDate}
818
- timeSlotGroups={timeSlotGroups}
819
- setTimeSlotGroups={setTimeSlotGroups}
820
- selectedTickets={selectedTickets}
821
- handleTicketSelect={handleTicketSelect}
822
- sortBySoldOut={sortBySoldOut}
823
- ticketsHeaderComponent={ticketsHeaderComponent}
824
- hideTicketsHeader={hideTicketsHeader}
825
- showGroupNameBlock={showGroupNameBlock}
826
- currencySymbol={currencySymbol}
827
- isSeatMapAllowed={isSeatMapAllowed}
828
- getTimeSlots={getTimeSlots}
829
- />
830
- )}
831
- {!isSalesClosed && !isTimeSlotEvent && (
832
- <TicketsSection
833
- event={event}
834
- ticketsList={ordinaryTickets}
835
- tableTickets={tableTickets}
836
- selectedTickets={selectedTickets}
837
- handleTicketSelect={handleTicketSelect}
838
- sortBySoldOut={sortBySoldOut}
839
- ticketsHeaderComponent={ticketsHeaderComponent}
840
- tableTicketsHeaderComponent={tableTicketsHeaderComponent}
841
- hideTableTicketsHeader={hideTableTicketsHeader || _isEmpty(tableTickets)}
842
- hideTicketsHeader={hideTicketsHeader || _isEmpty(ordinaryTickets)}
843
- showGroupNameBlock={showGroupNameBlock}
844
- currencySymbol={currencySymbol}
845
- isSeatMapAllowed={isSeatMapAllowed}
846
- />
847
- )}
848
- {externalUrl ? null : isSalesClosed ? (
849
- <p
850
- className={`event-closed-message ${
851
- !isLoggedIn ? 'event-closed-on-bottom' : ''
852
- }`}
853
- >
854
- Sales for this event are closed.
855
- </p>
856
- ) : eventSaleIsNotStarted ? (
857
- <Countdown
858
- startDate={event.salesStart}
859
- timezone={event.timezone}
860
- title="Sales start in:"
861
- message="No tickets are currently available for this event."
862
- showMessage={!eventHasTickets}
863
- callback={updateTickets}
864
- disableLeadingZero={disableCountdownLeadingZero}
865
- isLoggedIn={isLoggedIn}
866
- />
867
- ) : null}
868
- {event?.enableWaitingList &&
869
- showWaitingList &&
870
- event.salesStarted &&
871
- !hideWaitingList && (
872
- <WaitingList
873
- tickets={ordinaryTickets}
874
- eventId={eventId}
875
- defaultMaxQuantity={event.waitingListMaxQuantity}
876
- />
877
- )}
878
- {codeIsLoading ? (
879
- <Loader />
880
- ) : isSalesClosed ? null : showAccessCodeSection ? (
881
- <AccessCodeSection
882
- code={code}
883
- setCode={setCode}
884
- updateTickets={updateTickets}
885
- />
886
- ) : showPromoCodeSection ? (
887
- <PromoCodeSection
888
- code={code}
889
- codeIsApplied={codeIsApplied}
890
- setCodeIsApplied={setCodeIsApplied}
891
- showPromoInput={showPromoInput}
892
- setShowPromoInput={setShowPromoInput}
893
- setCode={setCode}
894
- updateTickets={updateTickets}
895
- codeIsInvalid={codeIsInvalid}
896
- setCodeIsInvalid={setCodeIsInvalid}
897
- promoText={promoText}
898
- showAlertIcons={showAlertIcons}
899
- />
900
- ) : null}
901
- {wrappedActionsSectionComponent}
902
- {canShowGetTicketBtn() && (
903
- <Button
904
- aria-hidden={true}
905
- className={`book-button
906
- ${bookButtonIsDisabled ? 'disabled' : ''}
907
- ${isButtonScrollable ? 'is-scrollable' : ''}
908
- ${!isLoggedIn ? 'on-bottom' : ''}
909
- `}
910
- onClick={
911
- event?.salesStart &&
912
- event?.presalesStarted &&
913
- !event?.presalesEnded &&
914
- (!isPreregistered || !isLogged)
915
- ? handleNotAvailableTicketsClick
916
- : handleGetTicketClick
917
- }
918
- >
919
- {selectedTickets.isTable
920
- ? 'RESERVE TABLES'
921
- : getTicketsLabel || 'GET TICKETS'}
922
- </Button>
923
- )}
924
- {isSeatMapAllowed && !event?.salesEnded && isTicketAvailable && (
925
- <Button
926
- className="reserve-button"
927
- aria-hidden={true}
928
- onClick={onReserveButtonClick}
929
- >
930
- {isTableMapEnabled ? 'Select on map' : 'Select your seats'}
931
- </Button>
932
- )}
933
- {isLogged && !hideSessionButtons ? (
934
- <div className="session-wrapper">
935
- <span className="session-container">
936
- <Button
937
- variant="outline-light"
938
- className="session-buttons"
939
- onClick={handleOrdersClick}
940
- >
941
- My Orders
942
- </Button>
943
- </span>
944
- <span className="session-container">
945
- <Button
946
- variant="outline-light"
947
- className="session-buttons"
948
- onClick={handleLogout}
949
- >
950
- Log out
951
- </Button>
952
- </span>
953
- </div>
954
- ) : (
955
- ''
956
- )}
957
- </div>
958
- )}
959
- {showLoginModal ? (
960
- <LoginModal onClose={handleOnClose} onLogin={handleOnLogin} showForgotPasswordButton />
961
- ) : null}
962
- </div>
963
- {showPoweredByImage ? <PoweredBy /> : null}
964
- {enableInfluencersSection && !hideTopInfluencers && influencers.length ? (
965
- <div className="event-influencers">
966
- <h3>
967
- <span>TOP</span> INFLUENCERS
968
- </h3>
969
- <ol className="influencer-list">
970
- {influencers.map((influencer: IInfluencer, i: number) => (
971
- <li className="influencer-item" key={i}>
972
- {`${influencer.firstName} ${influencer.lastName?.charAt(0)}`}{' '}
973
- </li>
974
- ))}
975
- </ol>
976
- </div>
977
- ) : null}
978
- <VerificationPendingModal
979
- message={pendingVerificationMessage}
980
- onClose={() => {
981
- onPendingVerification()
982
- }}
983
- />
984
- </ThemeProvider>
985
- )
986
- }