tf-checkout-react 1.7.30 → 2.0.0-beta.0

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 (453) 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 +3930 -0
  5. package/dist/index.d.ts +3930 -30
  6. package/dist/index.esm.js +9123 -0
  7. package/dist/index.esm.js.map +1 -0
  8. package/dist/index.js +9277 -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 +231 -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 +743 -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 +541 -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 +119 -0
  50. package/src/sections/billing/types.ts +10 -0
  51. package/src/sections/index.ts +15 -0
  52. package/src/sections/seatMap.utils.ts +105 -0
  53. package/src/styles/addons.css +75 -0
  54. package/src/styles/auth.css +294 -0
  55. package/src/styles/billing.css +98 -0
  56. package/src/styles/confirmation.css +51 -0
  57. package/src/styles/foundation.css +146 -0
  58. package/src/styles/payment.css +179 -0
  59. package/src/styles/primitives.css +356 -0
  60. package/src/styles/seat-map.css +46 -0
  61. package/src/styles/tickets.css +285 -0
  62. package/src/styles/verification-confirmation.css +258 -0
  63. package/src/typings.d.ts +2 -2
  64. package/src/ui/Button.tsx +38 -0
  65. package/src/ui/Card.tsx +54 -0
  66. package/src/ui/CheckoutProvider.tsx +172 -0
  67. package/src/ui/CustomFields.tsx +195 -0
  68. package/src/ui/Field.tsx +114 -0
  69. package/src/ui/I18nProvider.tsx +36 -0
  70. package/src/ui/InstallmentPicker.tsx +69 -0
  71. package/src/ui/Loader.tsx +12 -0
  72. package/src/ui/PaymentMethods.tsx +133 -0
  73. package/src/ui/PriceLine.tsx +24 -0
  74. package/src/ui/QuantitySelect.tsx +50 -0
  75. package/src/ui/Stepper.tsx +36 -0
  76. package/src/ui/Timer.tsx +34 -0
  77. package/src/ui/TimerBanner.tsx +55 -0
  78. package/src/ui/cx.ts +3 -0
  79. package/src/ui/index.ts +54 -0
  80. package/src/ui/theme.ts +83 -0
  81. package/src/useCheckout.ts +35 -0
  82. package/src/xendit.ts +438 -0
  83. package/dist/adapters/customFields.d.ts +0 -12
  84. package/dist/adapters/index.d.ts +0 -1
  85. package/dist/api/auth.d.ts +0 -27
  86. package/dist/api/cart.d.ts +0 -2
  87. package/dist/api/checkout.d.ts +0 -3
  88. package/dist/api/common.d.ts +0 -11
  89. package/dist/api/guestTicketDelegation.d.ts +0 -47
  90. package/dist/api/index.d.ts +0 -82
  91. package/dist/api/interceptors.d.ts +0 -1
  92. package/dist/api/orders.d.ts +0 -2
  93. package/dist/api/payment.d.ts +0 -5
  94. package/dist/api/preRegistrationComplete.d.ts +0 -3
  95. package/dist/api/publicRequest.d.ts +0 -9
  96. package/dist/api/resale.d.ts +0 -5
  97. package/dist/components/account-settings/index.d.ts +0 -3
  98. package/dist/components/addonsContainer/AddonComponent.d.ts +0 -18
  99. package/dist/components/addonsContainer/SimpleAddonsContainer.d.ts +0 -20
  100. package/dist/components/addonsContainer/adapters/index.d.ts +0 -12
  101. package/dist/components/addonsContainer/index.d.ts +0 -22
  102. package/dist/components/addonsContainer/normalizers/index.d.ts +0 -1
  103. package/dist/components/addonsContainer/useAddons.d.ts +0 -23
  104. package/dist/components/addonsContainer/utils/index.d.ts +0 -16
  105. package/dist/components/billing-info-container/hooks/index.d.ts +0 -3
  106. package/dist/components/billing-info-container/hooks/usePaymentContext.d.ts +0 -5
  107. package/dist/components/billing-info-container/hooks/usePaymentRedirect.d.ts +0 -14
  108. package/dist/components/billing-info-container/hooks/useStripePayment.d.ts +0 -18
  109. package/dist/components/billing-info-container/index.d.ts +0 -69
  110. package/dist/components/billing-info-container/utils.d.ts +0 -59
  111. package/dist/components/common/Checkbox.d.ts +0 -11
  112. package/dist/components/common/CheckboxField/index.d.ts +0 -9
  113. package/dist/components/common/CopyField.d.ts +0 -12
  114. package/dist/components/common/CopyMessageModal.d.ts +0 -7
  115. package/dist/components/common/CustomField.d.ts +0 -26
  116. package/dist/components/common/DatePickerField.d.ts +0 -20
  117. package/dist/components/common/FieldSection/index.d.ts +0 -19
  118. package/dist/components/common/FieldSection/utils/index.d.ts +0 -8
  119. package/dist/components/common/FormikPhoneNumberField.d.ts +0 -11
  120. package/dist/components/common/Loader.d.ts +0 -2
  121. package/dist/components/common/ModalComponent/index.d.ts +0 -16
  122. package/dist/components/common/NativeSelectFeild/index.d.ts +0 -21
  123. package/dist/components/common/PhoneNumberField.d.ts +0 -14
  124. package/dist/components/common/PoweredBy.d.ts +0 -2
  125. package/dist/components/common/RadioField.d.ts +0 -11
  126. package/dist/components/common/RadioGroupField/index.d.ts +0 -17
  127. package/dist/components/common/RedirectModal.d.ts +0 -7
  128. package/dist/components/common/SelectField/index.d.ts +0 -19
  129. package/dist/components/common/SnackbarAlert.d.ts +0 -13
  130. package/dist/components/common/index.d.ts +0 -11
  131. package/dist/components/common/socials.d.ts +0 -10
  132. package/dist/components/confirmModal/index.d.ts +0 -10
  133. package/dist/components/confirmationContainer/config.d.ts +0 -1
  134. package/dist/components/confirmationContainer/index.d.ts +0 -46
  135. package/dist/components/confirmationContainer/social-buttons.d.ts +0 -16
  136. package/dist/components/countdown/index.d.ts +0 -14
  137. package/dist/components/delegationsContainer/IssueComponent.d.ts +0 -10
  138. package/dist/components/delegationsContainer/IssueTicketForm.d.ts +0 -9
  139. package/dist/components/delegationsContainer/TicketsAssignedTable.d.ts +0 -11
  140. package/dist/components/delegationsContainer/TicketsAvailableTable.d.ts +0 -11
  141. package/dist/components/delegationsContainer/index.d.ts +0 -10
  142. package/dist/components/forgotPasswordModal/index.d.ts +0 -12
  143. package/dist/components/idVerificationContainer/VerificationPendingModal.d.ts +0 -10
  144. package/dist/components/idVerificationContainer/constants.d.ts +0 -21
  145. package/dist/components/idVerificationContainer/index.d.ts +0 -16
  146. package/dist/components/index.d.ts +0 -12
  147. package/dist/components/loginForm/index.d.ts +0 -31
  148. package/dist/components/loginModal/SignUpForm.d.ts +0 -10
  149. package/dist/components/loginModal/constants.d.ts +0 -39
  150. package/dist/components/loginModal/index.d.ts +0 -22
  151. package/dist/components/myTicketsContainer/index.d.ts +0 -16
  152. package/dist/components/myTicketsContainer/row.d.ts +0 -3
  153. package/dist/components/myTicketsContainer/tableConfig.d.ts +0 -5
  154. package/dist/components/orderDetailsContainer/CustomFieldsForm.d.ts +0 -12
  155. package/dist/components/orderDetailsContainer/TicketHolderCustomFields.d.ts +0 -10
  156. package/dist/components/orderDetailsContainer/index.d.ts +0 -66
  157. package/dist/components/orderDetailsContainer/ticketsTable.d.ts +0 -46
  158. package/dist/components/orderDetailsContainer/utils/index.d.ts +0 -6
  159. package/dist/components/paymentContainer/OrderDetails.d.ts +0 -9
  160. package/dist/components/paymentContainer/PaymentPlanSection.d.ts +0 -10
  161. package/dist/components/paymentContainer/handlePayment.d.ts +0 -15
  162. package/dist/components/paymentContainer/index.d.ts +0 -39
  163. package/dist/components/preRegistration/FieldsSection.d.ts +0 -19
  164. package/dist/components/preRegistration/Influancers.d.ts +0 -2
  165. package/dist/components/preRegistration/PreRegistrationComplete.d.ts +0 -13
  166. package/dist/components/preRegistration/PreRegistrationInformations.d.ts +0 -2
  167. package/dist/components/preRegistration/Prewards.d.ts +0 -2
  168. package/dist/components/preRegistration/ShareOptions.d.ts +0 -2
  169. package/dist/components/preRegistration/constants.d.ts +0 -2
  170. package/dist/components/preRegistration/index.d.ts +0 -23
  171. package/dist/components/preRegistration/utils.d.ts +0 -12
  172. package/dist/components/registerForm/adapters/index.d.ts +0 -4
  173. package/dist/components/registerForm/constants.d.ts +0 -1
  174. package/dist/components/registerForm/index.d.ts +0 -16
  175. package/dist/components/registerModal/index.d.ts +0 -12
  176. package/dist/components/resetPasswordContainer/index.d.ts +0 -10
  177. package/dist/components/rsvpContainer/index.d.ts +0 -7
  178. package/dist/components/seatMapContainer/SeatMapComponent.d.ts +0 -8
  179. package/dist/components/seatMapContainer/TicketsSection.d.ts +0 -9
  180. package/dist/components/seatMapContainer/addToCart.d.ts +0 -14
  181. package/dist/components/seatMapContainer/index.d.ts +0 -2
  182. package/dist/components/seatMapContainer/utils.d.ts +0 -6
  183. package/dist/components/signupModal/index.d.ts +0 -12
  184. package/dist/components/ticketResale/index.d.ts +0 -12
  185. package/dist/components/ticketResaleModal/index.d.ts +0 -19
  186. package/dist/components/ticketsContainer/AccessCodeSection.d.ts +0 -7
  187. package/dist/components/ticketsContainer/InfoIcon.d.ts +0 -5
  188. package/dist/components/ticketsContainer/PromoCodeSection.d.ts +0 -15
  189. package/dist/components/ticketsContainer/ReferralLogic.d.ts +0 -5
  190. package/dist/components/ticketsContainer/TicketRow.d.ts +0 -13
  191. package/dist/components/ticketsContainer/TicketsSection.d.ts +0 -20
  192. package/dist/components/ticketsContainer/TimeSlotTicketRow.d.ts +0 -19
  193. package/dist/components/ticketsContainer/TimeSlotsSection.d.ts +0 -25
  194. package/dist/components/ticketsContainer/index.d.ts +0 -93
  195. package/dist/components/ticketsContainer/utils.d.ts +0 -13
  196. package/dist/components/timerWidget/index.d.ts +0 -16
  197. package/dist/components/waitingList/index.d.ts +0 -9
  198. package/dist/constants/index.d.ts +0 -7
  199. package/dist/env.d.ts +0 -16
  200. package/dist/hoc/CustomFields/index.d.ts +0 -3
  201. package/dist/hoc/index.d.ts +0 -1
  202. package/dist/hooks/index.d.ts +0 -1
  203. package/dist/hooks/useCookieListener.d.ts +0 -1
  204. package/dist/hooks/useEventListener.d.ts +0 -1
  205. package/dist/hooks/useLocalStorageListener.d.ts +0 -1
  206. package/dist/hooks/useOnline.d.ts +0 -1
  207. package/dist/hooks/usePixel.d.ts +0 -6
  208. package/dist/images/Polygon.png +0 -0
  209. package/dist/images/cross.svg +0 -44
  210. package/dist/images/done.svg +0 -3
  211. package/dist/images/edit.svg +0 -10
  212. package/dist/images/email.svg +0 -1
  213. package/dist/images/instagram.svg +0 -5
  214. package/dist/images/logo-ttf.png +0 -0
  215. package/dist/images/spotify.svg +0 -6
  216. package/dist/images/user.svg +0 -1
  217. package/dist/images/xmark.svg +0 -92
  218. package/dist/normalizers/index.d.ts +0 -4
  219. package/dist/tf-checkout-react.cjs.development.js +0 -16149
  220. package/dist/tf-checkout-react.cjs.development.js.map +0 -1
  221. package/dist/tf-checkout-react.cjs.production.min.js +0 -2
  222. package/dist/tf-checkout-react.cjs.production.min.js.map +0 -1
  223. package/dist/tf-checkout-react.esm.js +0 -16116
  224. package/dist/tf-checkout-react.esm.js.map +0 -1
  225. package/dist/tf-checkout-styles.css +0 -1
  226. package/dist/types/add_on.d.ts +0 -8
  227. package/dist/types/billing-info-data.d.ts +0 -27
  228. package/dist/types/checkoutPageConfigs.d.ts +0 -13
  229. package/dist/types/index.d.ts +0 -6
  230. package/dist/types/order-data.d.ts +0 -15
  231. package/dist/types/payment-field.d.ts +0 -6
  232. package/dist/types/payment-plan-configuration.d.ts +0 -18
  233. package/dist/types/referral-promotion.d.ts +0 -6
  234. package/dist/types/verification.d.ts +0 -12
  235. package/dist/utils/adaptStripeErrors.d.ts +0 -8
  236. package/dist/utils/auth.d.ts +0 -21
  237. package/dist/utils/cookies.d.ts +0 -3
  238. package/dist/utils/createCheckoutDataBodyWithDefaultHolder.d.ts +0 -23
  239. package/dist/utils/createMarkup.d.ts +0 -3
  240. package/dist/utils/customFields.d.ts +0 -35
  241. package/dist/utils/downloadPDF.d.ts +0 -1
  242. package/dist/utils/form.d.ts +0 -3
  243. package/dist/utils/formikErrorFocus.d.ts +0 -2
  244. package/dist/utils/getDomain.d.ts +0 -1
  245. package/dist/utils/getImage.d.ts +0 -1
  246. package/dist/utils/getQueryVariable.d.ts +0 -1
  247. package/dist/utils/htmlNodeFromString.d.ts +0 -1
  248. package/dist/utils/index.d.ts +0 -15
  249. package/dist/utils/isBrowser.d.ts +0 -1
  250. package/dist/utils/isValidNumber.d.ts +0 -1
  251. package/dist/utils/jsonUtils.d.ts +0 -1
  252. package/dist/utils/replaceVarInString.d.ts +0 -1
  253. package/dist/utils/setConfigs.d.ts +0 -11
  254. package/dist/utils/showZero.d.ts +0 -1
  255. package/dist/validators/index.d.ts +0 -8
  256. package/src/adapters/customFields.ts +0 -85
  257. package/src/adapters/index.ts +0 -1
  258. package/src/api/auth.ts +0 -88
  259. package/src/api/cart.ts +0 -28
  260. package/src/api/checkout.ts +0 -28
  261. package/src/api/common.ts +0 -190
  262. package/src/api/guestTicketDelegation.ts +0 -79
  263. package/src/api/index.ts +0 -346
  264. package/src/api/interceptors.ts +0 -77
  265. package/src/api/orders.ts +0 -30
  266. package/src/api/payment.ts +0 -77
  267. package/src/api/preRegistrationComplete.ts +0 -37
  268. package/src/api/publicRequest.ts +0 -47
  269. package/src/api/resale.ts +0 -28
  270. package/src/assets/images/Polygon.png +0 -0
  271. package/src/assets/images/cross.svg +0 -44
  272. package/src/assets/images/done.svg +0 -3
  273. package/src/assets/images/edit.svg +0 -10
  274. package/src/assets/images/email.svg +0 -1
  275. package/src/assets/images/instagram.svg +0 -5
  276. package/src/assets/images/logo-ttf.png +0 -0
  277. package/src/assets/images/spotify.svg +0 -6
  278. package/src/assets/images/user.svg +0 -1
  279. package/src/assets/images/xmark.svg +0 -92
  280. package/src/components/account-settings/index.tsx +0 -161
  281. package/src/components/account-settings/style.css +0 -200
  282. package/src/components/addonsContainer/AddonComponent.tsx +0 -204
  283. package/src/components/addonsContainer/SimpleAddonsContainer.tsx +0 -459
  284. package/src/components/addonsContainer/adapters/index.tsx +0 -62
  285. package/src/components/addonsContainer/index.tsx +0 -353
  286. package/src/components/addonsContainer/normalizers/index.ts +0 -5
  287. package/src/components/addonsContainer/useAddons.ts +0 -248
  288. package/src/components/addonsContainer/utils/index.tsx +0 -231
  289. package/src/components/billing-info-container/hooks/index.ts +0 -3
  290. package/src/components/billing-info-container/hooks/usePaymentContext.ts +0 -22
  291. package/src/components/billing-info-container/hooks/usePaymentRedirect.ts +0 -145
  292. package/src/components/billing-info-container/hooks/useStripePayment.ts +0 -119
  293. package/src/components/billing-info-container/index.tsx +0 -1695
  294. package/src/components/billing-info-container/style.css +0 -150
  295. package/src/components/billing-info-container/utils.tsx +0 -413
  296. package/src/components/common/Checkbox.tsx +0 -51
  297. package/src/components/common/CheckboxField/index.tsx +0 -41
  298. package/src/components/common/CopyField.tsx +0 -53
  299. package/src/components/common/CopyMessageModal.tsx +0 -34
  300. package/src/components/common/CustomField.tsx +0 -168
  301. package/src/components/common/DatePickerField.tsx +0 -126
  302. package/src/components/common/FieldSection/index.tsx +0 -141
  303. package/src/components/common/FieldSection/utils/index.tsx +0 -92
  304. package/src/components/common/FormikPhoneNumberField.tsx +0 -51
  305. package/src/components/common/Loader.tsx +0 -8
  306. package/src/components/common/ModalComponent/index.tsx +0 -68
  307. package/src/components/common/NativeSelectFeild/index.tsx +0 -86
  308. package/src/components/common/PhoneNumberField.tsx +0 -117
  309. package/src/components/common/PoweredBy.tsx +0 -15
  310. package/src/components/common/RadioField.tsx +0 -36
  311. package/src/components/common/RadioGroupField/index.tsx +0 -76
  312. package/src/components/common/RedirectModal.tsx +0 -43
  313. package/src/components/common/SelectField/index.tsx +0 -104
  314. package/src/components/common/SnackbarAlert.tsx +0 -52
  315. package/src/components/common/index.tsx +0 -11
  316. package/src/components/common/socials.tsx +0 -33
  317. package/src/components/confirmModal/index.tsx +0 -60
  318. package/src/components/confirmationContainer/config.ts +0 -79
  319. package/src/components/confirmationContainer/index.tsx +0 -349
  320. package/src/components/confirmationContainer/social-buttons.tsx +0 -149
  321. package/src/components/confirmationContainer/style.css +0 -206
  322. package/src/components/countdown/index.tsx +0 -100
  323. package/src/components/countdown/style.css +0 -10
  324. package/src/components/delegationsContainer/IssueComponent.tsx +0 -156
  325. package/src/components/delegationsContainer/IssueTicketForm.tsx +0 -109
  326. package/src/components/delegationsContainer/TicketsAssignedTable.tsx +0 -55
  327. package/src/components/delegationsContainer/TicketsAvailableTable.tsx +0 -54
  328. package/src/components/delegationsContainer/index.tsx +0 -83
  329. package/src/components/forgotPasswordModal/index.tsx +0 -138
  330. package/src/components/forgotPasswordModal/style.css +0 -47
  331. package/src/components/idVerificationContainer/VerificationPendingModal.tsx +0 -47
  332. package/src/components/idVerificationContainer/constants.ts +0 -27
  333. package/src/components/idVerificationContainer/index.tsx +0 -323
  334. package/src/components/index.ts +0 -12
  335. package/src/components/loginForm/index.tsx +0 -202
  336. package/src/components/loginModal/SignUpForm.tsx +0 -329
  337. package/src/components/loginModal/constants.ts +0 -46
  338. package/src/components/loginModal/index.tsx +0 -263
  339. package/src/components/loginModal/style.css +0 -116
  340. package/src/components/myTicketsContainer/index.tsx +0 -228
  341. package/src/components/myTicketsContainer/row.tsx +0 -46
  342. package/src/components/myTicketsContainer/style.css +0 -40
  343. package/src/components/myTicketsContainer/tableConfig.tsx +0 -80
  344. package/src/components/myTicketsContainer/types.d.ts +0 -41
  345. package/src/components/orderDetailsContainer/CustomFieldsForm.tsx +0 -75
  346. package/src/components/orderDetailsContainer/TicketHolderCustomFields.tsx +0 -100
  347. package/src/components/orderDetailsContainer/index.tsx +0 -586
  348. package/src/components/orderDetailsContainer/style.css +0 -77
  349. package/src/components/orderDetailsContainer/ticketsTable.tsx +0 -246
  350. package/src/components/orderDetailsContainer/utils/index.tsx +0 -55
  351. package/src/components/paymentContainer/OrderDetails.tsx +0 -277
  352. package/src/components/paymentContainer/PaymentPlanSection.tsx +0 -169
  353. package/src/components/paymentContainer/handlePayment.ts +0 -86
  354. package/src/components/paymentContainer/index.tsx +0 -643
  355. package/src/components/paymentContainer/style.css +0 -196
  356. package/src/components/preRegistration/FieldsSection.tsx +0 -150
  357. package/src/components/preRegistration/Influancers.tsx +0 -34
  358. package/src/components/preRegistration/PreRegistrationComplete.tsx +0 -186
  359. package/src/components/preRegistration/PreRegistrationInformations.tsx +0 -60
  360. package/src/components/preRegistration/Prewards.tsx +0 -41
  361. package/src/components/preRegistration/ShareOptions.tsx +0 -77
  362. package/src/components/preRegistration/constants.tsx +0 -169
  363. package/src/components/preRegistration/index.tsx +0 -330
  364. package/src/components/preRegistration/style.css +0 -3
  365. package/src/components/preRegistration/utils.ts +0 -163
  366. package/src/components/registerForm/adapters/index.tsx +0 -10
  367. package/src/components/registerForm/constants.tsx +0 -98
  368. package/src/components/registerForm/index.tsx +0 -188
  369. package/src/components/registerModal/index.tsx +0 -154
  370. package/src/components/registerModal/style.css +0 -18
  371. package/src/components/resetPasswordContainer/index.tsx +0 -102
  372. package/src/components/resetPasswordContainer/style.css +0 -36
  373. package/src/components/rsvpContainer/index.tsx +0 -126
  374. package/src/components/seatMapContainer/SeatMapComponent.tsx +0 -77
  375. package/src/components/seatMapContainer/TicketsSection.tsx +0 -286
  376. package/src/components/seatMapContainer/addToCart.ts +0 -66
  377. package/src/components/seatMapContainer/index.tsx +0 -443
  378. package/src/components/seatMapContainer/utils.ts +0 -133
  379. package/src/components/signupModal/index.tsx +0 -178
  380. package/src/components/signupModal/style.css +0 -58
  381. package/src/components/ticketResale/index.tsx +0 -86
  382. package/src/components/ticketResaleModal/index.tsx +0 -224
  383. package/src/components/ticketResaleModal/style.css +0 -28
  384. package/src/components/ticketsContainer/AccessCodeSection.tsx +0 -50
  385. package/src/components/ticketsContainer/InfoIcon.tsx +0 -35
  386. package/src/components/ticketsContainer/PromoCodeSection.tsx +0 -116
  387. package/src/components/ticketsContainer/ReferralLogic.tsx +0 -33
  388. package/src/components/ticketsContainer/TicketRow.tsx +0 -107
  389. package/src/components/ticketsContainer/TicketsSection.tsx +0 -350
  390. package/src/components/ticketsContainer/TimeSlotTicketRow.tsx +0 -243
  391. package/src/components/ticketsContainer/TimeSlotsSection.tsx +0 -194
  392. package/src/components/ticketsContainer/index.tsx +0 -986
  393. package/src/components/ticketsContainer/style.css +0 -178
  394. package/src/components/ticketsContainer/utils.ts +0 -35
  395. package/src/components/timerWidget/index.tsx +0 -97
  396. package/src/components/timerWidget/style.css +0 -35
  397. package/src/components/waitingList/index.tsx +0 -190
  398. package/src/components/waitingList/style.css +0 -27
  399. package/src/constants/index.ts +0 -3
  400. package/src/env.ts +0 -29
  401. package/src/hoc/CustomFields/index.tsx +0 -85
  402. package/src/hoc/index.ts +0 -1
  403. package/src/hooks/index.ts +0 -1
  404. package/src/hooks/useCookieListener.ts +0 -32
  405. package/src/hooks/useEventListener.ts +0 -32
  406. package/src/hooks/useLocalStorageListener.ts +0 -32
  407. package/src/hooks/useOnline.ts +0 -21
  408. package/src/hooks/usePixel.ts +0 -88
  409. package/src/normalizers/index.ts +0 -49
  410. package/src/types/add_on.ts +0 -8
  411. package/src/types/api/auth.d.ts +0 -63
  412. package/src/types/api/axiosResponse.d.ts +0 -6
  413. package/src/types/api/cart.d.ts +0 -73
  414. package/src/types/api/checkout.d.ts +0 -92
  415. package/src/types/api/common.d.ts +0 -153
  416. package/src/types/api/guestTicketDelegation.d.ts +0 -18
  417. package/src/types/api/orders.d.ts +0 -116
  418. package/src/types/api/payment.d.ts +0 -180
  419. package/src/types/api/preRegistration.d.ts +0 -11
  420. package/src/types/api/preRegistrationComplete.d.ts +0 -95
  421. package/src/types/api/ticketResale.d.ts +0 -13
  422. package/src/types/billing-info-data.ts +0 -37
  423. package/src/types/checkoutPageConfigs.ts +0 -13
  424. package/src/types/formFields.d.ts +0 -29
  425. package/src/types/index.ts +0 -6
  426. package/src/types/order-data.ts +0 -16
  427. package/src/types/payment-field.ts +0 -7
  428. package/src/types/payment-plan-configuration.ts +0 -19
  429. package/src/types/pre-registration-complete.d.ts +0 -47
  430. package/src/types/referral-promotion.ts +0 -7
  431. package/src/types/seatMap.d.ts +0 -159
  432. package/src/types/verification.ts +0 -12
  433. package/src/utils/adaptStripeErrors.ts +0 -26
  434. package/src/utils/auth.ts +0 -45
  435. package/src/utils/cookies.ts +0 -73
  436. package/src/utils/createCheckoutDataBodyWithDefaultHolder.ts +0 -81
  437. package/src/utils/createMarkup.ts +0 -1
  438. package/src/utils/customFields.ts +0 -80
  439. package/src/utils/downloadPDF.tsx +0 -42
  440. package/src/utils/form.ts +0 -34
  441. package/src/utils/formikErrorFocus.ts +0 -24
  442. package/src/utils/getDomain.ts +0 -21
  443. package/src/utils/getImage.ts +0 -14
  444. package/src/utils/getQueryVariable.ts +0 -13
  445. package/src/utils/htmlNodeFromString.ts +0 -6
  446. package/src/utils/index.ts +0 -15
  447. package/src/utils/isBrowser.ts +0 -2
  448. package/src/utils/isValidNumber.ts +0 -8
  449. package/src/utils/jsonUtils.ts +0 -8
  450. package/src/utils/replaceVarInString.ts +0 -9
  451. package/src/utils/setConfigs.ts +0 -24
  452. package/src/utils/showZero.tsx +0 -10
  453. package/src/validators/index.ts +0 -61
@@ -0,0 +1,400 @@
1
+ /**
2
+ * `<EmbeddedCheckout eventId="…" />` — the batteries-included checkout. It
3
+ * follows the legacy storefront UX: ticket selection and checkout are separate
4
+ * views, with a compact selection summary + Edit action once the cart is
5
+ * reserved. Want a different layout? Compose the sections yourself — they all
6
+ * read the same `useCheckout()` from the provider.
7
+ */
8
+ import React, { useCallback, useEffect, useRef, useState, type FC } from 'react'
9
+
10
+ import type {
11
+ CheckoutBilling,
12
+ CheckoutConsent,
13
+ CheckoutHolder,
14
+ EventCondition,
15
+ LocaleCode,
16
+ Messages,
17
+ PlaceOrderResult,
18
+ TfProfile,
19
+ } from 'tf-checkout-shared'
20
+
21
+ import { AuthModal } from './auth/AuthModal'
22
+ import { AddOns } from './sections/AddOns'
23
+ import { BillingInfo } from './sections/BillingInfo'
24
+ import type { CheckoutPrivacyPolicy } from './sections/BillingInfo'
25
+ import { Confirmation } from './sections/Confirmation'
26
+ import { IDVerification } from './sections/IDVerification'
27
+ import { Payment } from './sections/Payment'
28
+ import { SeatMap } from './sections/SeatMap'
29
+ import { Tickets } from './sections/Tickets'
30
+ import { CheckoutProvider, useCheckoutContext } from './ui/CheckoutProvider'
31
+ import { TimerBanner } from './ui/TimerBanner'
32
+ import type { CheckoutTheme } from './ui/theme'
33
+
34
+ export interface EmbeddedCheckoutProps {
35
+ /** The event whose tickets to sell. */
36
+ eventId: string
37
+ /** Called with the placed order once payment settles. */
38
+ onComplete?: (order: PlaceOrderResult) => void
39
+ /**
40
+ * `inline` renders verification/confirmation inside the checkout. `redirect`
41
+ * leaves completion routing to `onComplete` and shows a short transition
42
+ * state while the host navigates. Defaults to `inline`.
43
+ */
44
+ confirmationMode?: 'inline' | 'redirect'
45
+ /** Initial checkout screen. Useful for preserving an existing `/seat-map` route. */
46
+ initialView?: 'tickets' | 'seats'
47
+ /** Reports the visible flow view so host storefronts can coordinate mobile UI. */
48
+ onViewChange?: (view: CheckoutView) => void
49
+ /** Smooth-scroll to buyer details after tickets/seats are reserved. Default true. */
50
+ autoScroll?: boolean
51
+ /** Require guests to repeat their email. Defaults to storefront-compatible true. */
52
+ requireEmailConfirmation?: boolean
53
+ /** Collect one named holder per ticket. Defaults true to match tf-sports. */
54
+ collectTicketHolders?: boolean
55
+ /** Collect email/phone when ticket-holder details are required. Defaults true. */
56
+ collectHolderContact?: boolean
57
+ /** Open the host application's login UI instead of the built-in modal. The
58
+ * current buyer email is passed when an existing account was detected. */
59
+ onLogin?: (email?: string) => void
60
+ /** Configure the built-in login/create-account/password-reset modal, or set
61
+ * false to remove auth UI. Ignored when `onLogin` is provided. */
62
+ auth?: false | EmbeddedCheckoutAuthOptions
63
+ /** Legacy skip-billing equivalent for complete signed-in profiles. Payment is
64
+ * never skipped. Defaults false; incompatible holder/custom fields prevent it. */
65
+ skipBillingWhenProfileComplete?: boolean
66
+ /** Optional marketing copy controlled by the embedding brand. */
67
+ ttfOptInLabel?: string
68
+ brandOptInLabel?: string
69
+ /** Consumer-owned privacy policy link and brand name. Required when provided. */
70
+ privacyPolicy?: CheckoutPrivacyPolicy
71
+ /** Host-owned required/optional acknowledgements, e.g. a privacy policy. */
72
+ additionalConditions?: EventCondition[]
73
+ /** Apply/attribute hosted links without requiring a custom Tickets section. */
74
+ initialPromoCode?: string
75
+ referrer?: string | number
76
+ readAttributionFromUrl?: boolean
77
+ /** Opt into sandbox card copy in demos. Defaults false. */
78
+ showTestCardHint?: boolean
79
+ /** Recolor via design tokens. */
80
+ theme?: CheckoutTheme
81
+ /**
82
+ * Language for the checkout's own copy. Defaults to `en-GB`, so existing
83
+ * consumers that never set it render exactly as before.
84
+ */
85
+ locale?: LocaleCode
86
+ /** Per-key copy overrides, merged over the locale. */
87
+ messages?: Partial<Messages>
88
+ className?: string
89
+ }
90
+
91
+ export interface EmbeddedCheckoutAuthOptions {
92
+ allowRegistration?: boolean
93
+ allowPasswordReset?: boolean
94
+ requireRegistrationAddress?: boolean
95
+ logoUrl?: string
96
+ onAuthenticated?: (profile: TfProfile) => void
97
+ }
98
+
99
+ type SelectionView = 'tickets' | 'seats'
100
+ export type CheckoutView = SelectionView | 'checkout'
101
+ type FlowView = CheckoutView
102
+ interface PreservedDetails {
103
+ billing?: CheckoutBilling
104
+ holders: CheckoutHolder[]
105
+ consent: CheckoutConsent
106
+ }
107
+
108
+ const Flow: FC<{
109
+ eventId: string
110
+ onComplete?: (o: PlaceOrderResult) => void
111
+ confirmationMode: 'inline' | 'redirect'
112
+ initialView: SelectionView
113
+ onViewChange?: (view: CheckoutView) => void
114
+ autoScroll: boolean
115
+ requireEmailConfirmation: boolean
116
+ collectTicketHolders: boolean
117
+ collectHolderContact: boolean
118
+ onLogin?: (email?: string) => void
119
+ auth?: false | EmbeddedCheckoutAuthOptions
120
+ skipBillingWhenProfileComplete: boolean
121
+ ttfOptInLabel?: string
122
+ brandOptInLabel?: string
123
+ privacyPolicy?: CheckoutPrivacyPolicy
124
+ additionalConditions: EventCondition[]
125
+ initialPromoCode?: string
126
+ referrer?: string | number
127
+ readAttributionFromUrl: boolean
128
+ showTestCardHint: boolean
129
+ }> = ({
130
+ eventId,
131
+ onComplete,
132
+ confirmationMode,
133
+ initialView,
134
+ onViewChange,
135
+ autoScroll,
136
+ requireEmailConfirmation,
137
+ collectTicketHolders,
138
+ collectHolderContact,
139
+ onLogin,
140
+ auth,
141
+ skipBillingWhenProfileComplete,
142
+ ttfOptInLabel,
143
+ brandOptInLabel,
144
+ privacyPolicy,
145
+ additionalConditions,
146
+ initialPromoCode,
147
+ referrer,
148
+ readAttributionFromUrl,
149
+ showTestCardHint,
150
+ }) => {
151
+ const checkout = useCheckoutContext()
152
+ const [view, setView] = useState<FlowView>(initialView)
153
+ const [selectionView, setSelectionView] = useState<SelectionView>(initialView)
154
+ const checkoutViewRef = useRef<HTMLDivElement | null>(null)
155
+ const editedDetailsRef = useRef<PreservedDetails | null>(null)
156
+ const [authRequest, setAuthRequest] = useState<{
157
+ email?: string
158
+ key: number
159
+ } | null>(null)
160
+ const [privacyAttempted, setPrivacyAttempted] = useState(false)
161
+
162
+ const openBuiltInAuth = useCallback((email?: string) => {
163
+ setAuthRequest((current) => ({
164
+ email,
165
+ key: (current?.key ?? 0) + 1,
166
+ }))
167
+ }, [])
168
+ const requestLogin = onLogin ?? (auth !== false ? openBuiltInAuth : undefined)
169
+
170
+ // The engine store is intentionally shared across SDK consumers.
171
+ // Never let state from another event/run select this component's UI view.
172
+ const checkoutBelongsToEvent = checkout.eventId === eventId
173
+ const checkoutViewAvailable = checkoutBelongsToEvent && checkout.status !== 'expired'
174
+ const visibleView: FlowView =
175
+ view === 'checkout' && !checkoutViewAvailable ? 'tickets' : view
176
+
177
+ useEffect(() => {
178
+ if (
179
+ view === 'checkout' &&
180
+ (!checkoutBelongsToEvent || checkout.status === 'expired')
181
+ ) {
182
+ setView('tickets')
183
+ setSelectionView('tickets')
184
+ }
185
+ }, [checkout.status, checkoutBelongsToEvent, view])
186
+
187
+ useEffect(() => {
188
+ if (!autoScroll || visibleView !== 'checkout') return
189
+ const timeout = window.setTimeout(() => {
190
+ const behavior = window.matchMedia?.('(prefers-reduced-motion: reduce)').matches
191
+ ? 'auto'
192
+ : 'smooth'
193
+ checkoutViewRef.current?.scrollIntoView({ behavior, block: 'start' })
194
+ }, 0)
195
+ return () => window.clearTimeout(timeout)
196
+ }, [autoScroll, visibleView])
197
+
198
+ useEffect(() => {
199
+ onViewChange?.(visibleView)
200
+ }, [onViewChange, visibleView])
201
+
202
+ const enterCheckout = (from: SelectionView) => {
203
+ const preserved = editedDetailsRef.current
204
+ if (preserved) {
205
+ if (preserved.billing) checkout.setBilling(preserved.billing)
206
+ checkout.setHolders(preserved.holders)
207
+ checkout.setConsent(preserved.consent)
208
+ editedDetailsRef.current = null
209
+ }
210
+ setSelectionView(from)
211
+ setView('checkout')
212
+ }
213
+
214
+ const editSelection = () => {
215
+ editedDetailsRef.current = {
216
+ billing: checkout.billing,
217
+ holders: checkout.holders,
218
+ consent: checkout.consent,
219
+ }
220
+ setView(selectionView)
221
+ }
222
+
223
+ const breakdown = checkout.breakdown
224
+ const selectedCount =
225
+ breakdown?.tickets.reduce((total, ticket) => total + ticket.quantity, 0) ??
226
+ checkout.selections.reduce((total, ticket) => total + ticket.quantity, 0)
227
+ // Match the storefront summary: show the reserved tickets' amount, not a
228
+ // moving order total that changes while the buyer picks add-ons.
229
+ const selectedTicketsTotal = breakdown?.tickets.reduce(
230
+ (total, ticket) => total + Number(ticket.total),
231
+ 0
232
+ )
233
+ const formattedTotal = breakdown
234
+ ? breakdown.currencySymbol
235
+ ? `${breakdown.currencySymbol}${Number(selectedTicketsTotal).toFixed(2)}`
236
+ : `${breakdown.currencyCode} ${Number(selectedTicketsTotal).toFixed(2)}`
237
+ : null
238
+
239
+ // Inline mode renders the receipt in place. Redirect mode intentionally does
240
+ // NOT swap the UI on success — it keeps the checkout mounted (the pay button
241
+ // stays busy) while the host navigates to its own confirmation page, so the
242
+ // checkout never flashes an empty card during the handoff.
243
+ if (
244
+ visibleView === 'checkout' &&
245
+ checkout.status === 'succeeded' &&
246
+ checkout.order &&
247
+ confirmationMode === 'inline'
248
+ ) {
249
+ return (
250
+ <>
251
+ <IDVerification />
252
+ <Confirmation />
253
+ </>
254
+ )
255
+ }
256
+
257
+ return (
258
+ <>
259
+ {/* Keep Tickets mounted while hidden so Edit restores the buyer's exact
260
+ quantities, promo state, date, and currency instead of starting over. */}
261
+ <div hidden={visibleView !== 'tickets'}>
262
+ <Tickets
263
+ eventId={eventId}
264
+ onContinue={() => enterCheckout('tickets')}
265
+ onSelectSeats={() => setView('seats')}
266
+ initialPromoCode={initialPromoCode}
267
+ referrer={referrer}
268
+ readAttributionFromUrl={readAttributionFromUrl}
269
+ />
270
+ </div>
271
+
272
+ {visibleView === 'seats' && (
273
+ <div className="tf-checkout-flow__seat-view">
274
+ <button
275
+ type="button"
276
+ className="tf-checkout-flow__back"
277
+ onClick={() => setView('tickets')}
278
+ >
279
+ ← Back to tickets
280
+ </button>
281
+ <SeatMap eventId={eventId} onContinue={() => enterCheckout('seats')} />
282
+ </div>
283
+ )}
284
+
285
+ {visibleView === 'checkout' && (
286
+ <div ref={checkoutViewRef} className="tf-checkout-flow__checkout">
287
+ <TimerBanner seconds={checkout.secondsLeft} />
288
+ <div className="tf-checkout-flow__selection">
289
+ <span className="tf-checkout-flow__selection-text">
290
+ {selectedCount} {selectedCount === 1 ? 'ticket' : 'tickets'} selected
291
+ {formattedTotal ? ` · ${formattedTotal}` : ''}
292
+ </span>
293
+ <button
294
+ type="button"
295
+ className="tf-checkout-flow__edit"
296
+ onClick={editSelection}
297
+ >
298
+ Edit
299
+ </button>
300
+ </div>
301
+ <AddOns eventId={eventId} />
302
+ <BillingInfo
303
+ eventId={eventId}
304
+ onLogin={requestLogin}
305
+ skipWhenProfileComplete={skipBillingWhenProfileComplete}
306
+ requireEmailConfirmation={requireEmailConfirmation}
307
+ collectTicketHolders={collectTicketHolders}
308
+ collectHolderContact={collectHolderContact}
309
+ ttfOptInLabel={ttfOptInLabel}
310
+ brandOptInLabel={brandOptInLabel}
311
+ privacyPolicy={privacyPolicy}
312
+ showPrivacyError={privacyAttempted}
313
+ />
314
+ <Payment
315
+ onComplete={onComplete}
316
+ eventId={eventId}
317
+ requireEmailConfirmation={requireEmailConfirmation}
318
+ collectTicketHolders={collectTicketHolders}
319
+ requireHolderContact={collectHolderContact}
320
+ additionalConditions={additionalConditions}
321
+ requirePrivacyPolicy={Boolean(privacyPolicy)}
322
+ onPrivacyRequired={() => setPrivacyAttempted(true)}
323
+ showTestCardHint={showTestCardHint}
324
+ />
325
+ </div>
326
+ )}
327
+ {authRequest && auth !== false && !onLogin && (
328
+ <AuthModal
329
+ key={authRequest.key}
330
+ open
331
+ initialEmail={authRequest.email}
332
+ message={
333
+ authRequest.email
334
+ ? 'This email already has an account. Log in to autofill your checkout details.'
335
+ : undefined
336
+ }
337
+ allowRegistration={auth?.allowRegistration}
338
+ allowPasswordReset={auth?.allowPasswordReset}
339
+ requireRegistrationAddress={auth?.requireRegistrationAddress}
340
+ logoUrl={auth?.logoUrl}
341
+ onAuthenticated={auth?.onAuthenticated}
342
+ onClose={() => setAuthRequest(null)}
343
+ />
344
+ )}
345
+ </>
346
+ )
347
+ }
348
+
349
+ export const EmbeddedCheckout: FC<EmbeddedCheckoutProps> = ({
350
+ eventId,
351
+ onComplete,
352
+ confirmationMode = 'inline',
353
+ initialView = 'tickets',
354
+ onViewChange,
355
+ autoScroll = true,
356
+ requireEmailConfirmation = true,
357
+ collectTicketHolders = true,
358
+ collectHolderContact = true,
359
+ onLogin,
360
+ auth,
361
+ skipBillingWhenProfileComplete = false,
362
+ ttfOptInLabel,
363
+ brandOptInLabel,
364
+ privacyPolicy,
365
+ additionalConditions = [],
366
+ initialPromoCode,
367
+ referrer,
368
+ readAttributionFromUrl = true,
369
+ showTestCardHint = false,
370
+ theme,
371
+ locale,
372
+ messages,
373
+ className,
374
+ }) => (
375
+ <CheckoutProvider theme={theme} locale={locale} messages={messages} className={className}>
376
+ <Flow
377
+ key={eventId}
378
+ eventId={eventId}
379
+ onComplete={onComplete}
380
+ confirmationMode={confirmationMode}
381
+ initialView={initialView}
382
+ onViewChange={onViewChange}
383
+ autoScroll={autoScroll}
384
+ requireEmailConfirmation={requireEmailConfirmation}
385
+ collectTicketHolders={collectTicketHolders}
386
+ collectHolderContact={collectHolderContact}
387
+ onLogin={onLogin}
388
+ auth={auth}
389
+ skipBillingWhenProfileComplete={skipBillingWhenProfileComplete}
390
+ ttfOptInLabel={ttfOptInLabel}
391
+ brandOptInLabel={brandOptInLabel}
392
+ privacyPolicy={privacyPolicy}
393
+ additionalConditions={additionalConditions}
394
+ initialPromoCode={initialPromoCode}
395
+ referrer={referrer}
396
+ readAttributionFromUrl={readAttributionFromUrl}
397
+ showTestCardHint={showTestCardHint}
398
+ />
399
+ </CheckoutProvider>
400
+ )
@@ -0,0 +1,132 @@
1
+ import React, { useEffect, useRef, useState, type FC } from 'react'
2
+
3
+ import {
4
+ errorMessage,
5
+ type EventCondition,
6
+ type PlaceOrderResult,
7
+ } from 'tf-checkout-shared'
8
+
9
+ import { AuthModal } from './auth/AuthModal'
10
+ import { BillingInfo, type CheckoutPrivacyPolicy } from './sections/BillingInfo'
11
+ import { Confirmation } from './sections/Confirmation'
12
+ import { IDVerification } from './sections/IDVerification'
13
+ import { Payment } from './sections/Payment'
14
+ import { CheckoutProvider, useCheckoutContext } from './ui/CheckoutProvider'
15
+ import { Loader } from './ui/Loader'
16
+ import { TimerBanner } from './ui/TimerBanner'
17
+ import type { CheckoutTheme } from './ui/theme'
18
+
19
+ export interface ResumedCheckoutProps {
20
+ eventId: string
21
+ isFromResale?: boolean
22
+ onComplete?: (order: PlaceOrderResult) => void
23
+ confirmationMode?: 'inline' | 'redirect'
24
+ requireEmailConfirmation?: boolean
25
+ collectTicketHolders?: boolean
26
+ collectHolderContact?: boolean
27
+ privacyPolicy?: CheckoutPrivacyPolicy
28
+ brandOptInLabel?: string
29
+ additionalConditions?: EventCondition[]
30
+ theme?: CheckoutTheme
31
+ className?: string
32
+ }
33
+
34
+ const ResumedFlow: FC<Omit<ResumedCheckoutProps, 'theme' | 'className'>> = ({
35
+ eventId,
36
+ isFromResale = false,
37
+ onComplete,
38
+ confirmationMode = 'redirect',
39
+ requireEmailConfirmation = true,
40
+ collectTicketHolders = true,
41
+ collectHolderContact = true,
42
+ privacyPolicy,
43
+ brandOptInLabel,
44
+ additionalConditions = [],
45
+ }) => {
46
+ const checkout = useCheckoutContext()
47
+ const started = useRef(false)
48
+ const [failure, setFailure] = useState('')
49
+ const [authRequest, setAuthRequest] = useState<{ email?: string; key: number } | null>(
50
+ null
51
+ )
52
+ const [privacyAttempted, setPrivacyAttempted] = useState(false)
53
+
54
+ useEffect(() => {
55
+ if (started.current) return
56
+ started.current = true
57
+ checkout.resumeCart(eventId, { isFromResale }).catch((error) => {
58
+ setFailure(errorMessage(error))
59
+ })
60
+ }, [checkout, eventId, isFromResale])
61
+
62
+ if (failure) return <p className="tf-checkout-error-text">{failure}</p>
63
+ if (checkout.status === 'idle' || checkout.status === 'priming') {
64
+ return (
65
+ <div className="tf-checkout-flow__redirecting">
66
+ <Loader className="tf-checkout-loader--page" />
67
+ </div>
68
+ )
69
+ }
70
+ if (checkout.status === 'succeeded' && checkout.order) {
71
+ if (confirmationMode === 'redirect') {
72
+ return (
73
+ <div className="tf-checkout-flow__redirecting">
74
+ <Loader className="tf-checkout-loader--page" />
75
+ </div>
76
+ )
77
+ }
78
+ return (
79
+ <>
80
+ <IDVerification />
81
+ <Confirmation />
82
+ </>
83
+ )
84
+ }
85
+
86
+ return (
87
+ <div className="tf-checkout-flow__checkout">
88
+ <TimerBanner seconds={checkout.secondsLeft} />
89
+ <BillingInfo
90
+ eventId={eventId}
91
+ onLogin={(email) =>
92
+ setAuthRequest((current) => ({ email, key: (current?.key ?? 0) + 1 }))
93
+ }
94
+ requireEmailConfirmation={requireEmailConfirmation}
95
+ collectTicketHolders={collectTicketHolders}
96
+ collectHolderContact={collectHolderContact}
97
+ privacyPolicy={privacyPolicy}
98
+ brandOptInLabel={brandOptInLabel}
99
+ showPrivacyError={privacyAttempted}
100
+ />
101
+ <Payment
102
+ eventId={eventId}
103
+ onComplete={onComplete}
104
+ requireEmailConfirmation={requireEmailConfirmation}
105
+ collectTicketHolders={collectTicketHolders}
106
+ requireHolderContact={collectHolderContact}
107
+ additionalConditions={additionalConditions}
108
+ requirePrivacyPolicy={Boolean(privacyPolicy)}
109
+ onPrivacyRequired={() => setPrivacyAttempted(true)}
110
+ />
111
+ {authRequest && (
112
+ <AuthModal
113
+ key={authRequest.key}
114
+ open
115
+ initialEmail={authRequest.email}
116
+ onClose={() => setAuthRequest(null)}
117
+ />
118
+ )}
119
+ </div>
120
+ )
121
+ }
122
+
123
+ /** Checkout UI for a cart created by a preceding server flow, such as resale. */
124
+ export const ResumedCheckout: FC<ResumedCheckoutProps> = ({
125
+ theme,
126
+ className,
127
+ ...props
128
+ }) => (
129
+ <CheckoutProvider theme={theme} className={className}>
130
+ <ResumedFlow {...props} />
131
+ </CheckoutProvider>
132
+ )