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
@@ -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
+ )