@eventlook/sdk 1.4.4 → 1.4.5-1.beta.2

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 (447) hide show
  1. package/.env.example +1 -0
  2. package/dev-frontend.sh +32 -0
  3. package/dist/cjs/_virtual/_commonjsHelpers.js +4 -2
  4. package/dist/cjs/_virtual/_commonjsHelpers.js.map +1 -1
  5. package/dist/cjs/_virtual/index.js +2 -2
  6. package/dist/cjs/_virtual/index2.js +2 -2
  7. package/dist/cjs/_virtual/index3.js +2 -2
  8. package/dist/cjs/components/Image.js +29 -14
  9. package/dist/cjs/components/Image.js.map +1 -1
  10. package/dist/cjs/components/hook-form/FormProvider.js +2 -2
  11. package/dist/cjs/components/hook-form/FormProvider.js.map +1 -1
  12. package/dist/cjs/context/GlobalContext.js +2 -1
  13. package/dist/cjs/context/GlobalContext.js.map +1 -1
  14. package/dist/cjs/form/ChildEventDialog.js +3 -3
  15. package/dist/cjs/form/ChildEventDialog.js.map +1 -1
  16. package/dist/cjs/form/ContactPerson.js +1 -1
  17. package/dist/cjs/form/ContactPerson.js.map +1 -1
  18. package/dist/cjs/form/Payment.js +2 -4
  19. package/dist/cjs/form/Payment.js.map +1 -1
  20. package/dist/cjs/form/PaymentOverviewBox.js +104 -115
  21. package/dist/cjs/form/PaymentOverviewBox.js.map +1 -1
  22. package/dist/cjs/form/PaymentOverviewDrawer.js +317 -0
  23. package/dist/cjs/form/PaymentOverviewDrawer.js.map +1 -0
  24. package/dist/cjs/form/PaymentPending.js +15 -3
  25. package/dist/cjs/form/PaymentPending.js.map +1 -1
  26. package/dist/cjs/form/PaymentSuccess.js +39 -2
  27. package/dist/cjs/form/PaymentSuccess.js.map +1 -1
  28. package/dist/cjs/form/ReleaseWithMerchandise.js +57 -48
  29. package/dist/cjs/form/ReleaseWithMerchandise.js.map +1 -1
  30. package/dist/cjs/form/Shipping.js +33 -27
  31. package/dist/cjs/form/Shipping.js.map +1 -1
  32. package/dist/cjs/form/TicketForm.js +102 -35
  33. package/dist/cjs/form/TicketForm.js.map +1 -1
  34. package/dist/cjs/form/TicketQuantityControl.js +51 -0
  35. package/dist/cjs/form/TicketQuantityControl.js.map +1 -0
  36. package/dist/cjs/form/TicketSelection.js +29 -11
  37. package/dist/cjs/form/TicketSelection.js.map +1 -1
  38. package/dist/cjs/form/TicketSelectionMap.js +67 -0
  39. package/dist/cjs/form/TicketSelectionMap.js.map +1 -0
  40. package/dist/cjs/form/TicketSelectionMobile.js +98 -0
  41. package/dist/cjs/form/TicketSelectionMobile.js.map +1 -0
  42. package/dist/cjs/form/TicketWithMerchandiseSelection.js +46 -10
  43. package/dist/cjs/form/TicketWithMerchandiseSelection.js.map +1 -1
  44. package/dist/cjs/form/extra-field/ExtraField.js.map +1 -1
  45. package/dist/cjs/form/extra-field/ReleaseExtraFields.js +1 -1
  46. package/dist/cjs/form/extra-field/ReleaseExtraFields.js.map +1 -1
  47. package/dist/cjs/form/index.js +2 -2
  48. package/dist/cjs/form/index.js.map +1 -1
  49. package/dist/cjs/form/merchandise/MerchandiseSelection.js +14 -0
  50. package/dist/cjs/form/merchandise/MerchandiseSelection.js.map +1 -0
  51. package/dist/cjs/form/merchandise/MerchandiseSlider.js +40 -0
  52. package/dist/cjs/form/merchandise/MerchandiseSlider.js.map +1 -0
  53. package/dist/cjs/form/merchendise/MerchandiseSelection.js +19 -0
  54. package/dist/cjs/form/merchendise/MerchandiseSelection.js.map +1 -0
  55. package/dist/cjs/form/merchendise/MerchandiseSlider.js +75 -0
  56. package/dist/cjs/form/merchendise/MerchandiseSlider.js.map +1 -0
  57. package/dist/cjs/form/payment/FeeBox.js +5 -17
  58. package/dist/cjs/form/payment/FeeBox.js.map +1 -1
  59. package/dist/cjs/form/payment/PaymentOverviewCheckbox.js +52 -0
  60. package/dist/cjs/form/payment/PaymentOverviewCheckbox.js.map +1 -0
  61. package/dist/cjs/form/product/ProductCard.js +147 -36
  62. package/dist/cjs/form/product/ProductCard.js.map +1 -1
  63. package/dist/cjs/form/product/ProductVariantsDialog.js +182 -97
  64. package/dist/cjs/form/product/ProductVariantsDialog.js.map +1 -1
  65. package/dist/cjs/form/services/index.js +116 -0
  66. package/dist/cjs/form/services/index.js.map +1 -0
  67. package/dist/cjs/form/style.js +13 -4
  68. package/dist/cjs/form/style.js.map +1 -1
  69. package/dist/cjs/form/tickets/ReleaseDescription.js +23 -0
  70. package/dist/cjs/form/tickets/ReleaseDescription.js.map +1 -0
  71. package/dist/cjs/form/tickets/ReleaseWithMerchandise.js +165 -0
  72. package/dist/cjs/form/tickets/ReleaseWithMerchandise.js.map +1 -0
  73. package/dist/cjs/form/tickets/TicketQuantityControl.js +54 -0
  74. package/dist/cjs/form/tickets/TicketQuantityControl.js.map +1 -0
  75. package/dist/cjs/form/tickets/TicketSelection.js +162 -0
  76. package/dist/cjs/form/tickets/TicketSelection.js.map +1 -0
  77. package/dist/cjs/form/tickets/TicketSelectionMap.js +79 -0
  78. package/dist/cjs/form/tickets/TicketSelectionMap.js.map +1 -0
  79. package/dist/cjs/form/tickets/TicketSelectionMobile.js +100 -0
  80. package/dist/cjs/form/tickets/TicketSelectionMobile.js.map +1 -0
  81. package/dist/cjs/form/tickets/TicketWithMerchandiseSelection.js +127 -0
  82. package/dist/cjs/form/tickets/TicketWithMerchandiseSelection.js.map +1 -0
  83. package/dist/cjs/hooks/useConsentScrollOnDrawerOpen.js +59 -0
  84. package/dist/cjs/hooks/useConsentScrollOnDrawerOpen.js.map +1 -0
  85. package/dist/cjs/hooks/useScrollToFirstError.js +73 -0
  86. package/dist/cjs/hooks/useScrollToFirstError.js.map +1 -0
  87. package/dist/cjs/locales/cs.js +47 -2
  88. package/dist/cjs/locales/cs.js.map +1 -1
  89. package/dist/cjs/locales/en.js +47 -1
  90. package/dist/cjs/locales/en.js.map +1 -1
  91. package/dist/cjs/locales/es.js +47 -1
  92. package/dist/cjs/locales/es.js.map +1 -1
  93. package/dist/cjs/locales/pl.js +47 -1
  94. package/dist/cjs/locales/pl.js.map +1 -1
  95. package/dist/cjs/locales/sk.js +47 -1
  96. package/dist/cjs/locales/sk.js.map +1 -1
  97. package/dist/cjs/locales/uk.js +47 -1
  98. package/dist/cjs/locales/uk.js.map +1 -1
  99. package/dist/cjs/modules/shopping-cart.js +10 -9
  100. package/dist/cjs/modules/shopping-cart.js.map +1 -1
  101. package/dist/cjs/utils/data/global.js +2 -0
  102. package/dist/cjs/utils/data/global.js.map +1 -1
  103. package/dist/cjs/utils/data/ticket.js +6 -0
  104. package/dist/cjs/utils/data/ticket.js.map +1 -0
  105. package/dist/cjs/utils/gtm.js +20 -0
  106. package/dist/cjs/utils/gtm.js.map +1 -1
  107. package/dist/esm/_virtual/_commonjsHelpers.js +4 -2
  108. package/dist/esm/_virtual/_commonjsHelpers.js.map +1 -1
  109. package/dist/esm/_virtual/index.js +2 -2
  110. package/dist/esm/_virtual/index2.js +2 -2
  111. package/dist/esm/_virtual/index3.js +2 -2
  112. package/dist/esm/components/Image.js +30 -15
  113. package/dist/esm/components/Image.js.map +1 -1
  114. package/dist/esm/components/hook-form/FormProvider.js +2 -2
  115. package/dist/esm/components/hook-form/FormProvider.js.map +1 -1
  116. package/dist/esm/context/GlobalContext.js +2 -1
  117. package/dist/esm/context/GlobalContext.js.map +1 -1
  118. package/dist/esm/form/ChildEventDialog.js +3 -3
  119. package/dist/esm/form/ChildEventDialog.js.map +1 -1
  120. package/dist/esm/form/ContactPerson.js +1 -1
  121. package/dist/esm/form/ContactPerson.js.map +1 -1
  122. package/dist/esm/form/Payment.js +2 -4
  123. package/dist/esm/form/Payment.js.map +1 -1
  124. package/dist/esm/form/PaymentOverviewBox.js +107 -118
  125. package/dist/esm/form/PaymentOverviewBox.js.map +1 -1
  126. package/dist/esm/form/PaymentOverviewDrawer.js +313 -0
  127. package/dist/esm/form/PaymentOverviewDrawer.js.map +1 -0
  128. package/dist/esm/form/PaymentPending.js +16 -4
  129. package/dist/esm/form/PaymentPending.js.map +1 -1
  130. package/dist/esm/form/PaymentSuccess.js +39 -2
  131. package/dist/esm/form/PaymentSuccess.js.map +1 -1
  132. package/dist/esm/form/ReleaseWithMerchandise.js +58 -49
  133. package/dist/esm/form/ReleaseWithMerchandise.js.map +1 -1
  134. package/dist/esm/form/Shipping.js +33 -27
  135. package/dist/esm/form/Shipping.js.map +1 -1
  136. package/dist/esm/form/TicketForm.js +104 -37
  137. package/dist/esm/form/TicketForm.js.map +1 -1
  138. package/dist/esm/form/TicketQuantityControl.js +47 -0
  139. package/dist/esm/form/TicketQuantityControl.js.map +1 -0
  140. package/dist/esm/form/TicketSelection.js +30 -12
  141. package/dist/esm/form/TicketSelection.js.map +1 -1
  142. package/dist/esm/form/TicketSelectionMap.js +63 -0
  143. package/dist/esm/form/TicketSelectionMap.js.map +1 -0
  144. package/dist/esm/form/TicketSelectionMobile.js +94 -0
  145. package/dist/esm/form/TicketSelectionMobile.js.map +1 -0
  146. package/dist/esm/form/TicketWithMerchandiseSelection.js +48 -12
  147. package/dist/esm/form/TicketWithMerchandiseSelection.js.map +1 -1
  148. package/dist/esm/form/extra-field/ExtraField.js.map +1 -1
  149. package/dist/esm/form/extra-field/ReleaseExtraFields.js +1 -1
  150. package/dist/esm/form/extra-field/ReleaseExtraFields.js.map +1 -1
  151. package/dist/esm/form/index.js +2 -2
  152. package/dist/esm/form/index.js.map +1 -1
  153. package/dist/esm/form/merchandise/MerchandiseSelection.js +10 -0
  154. package/dist/esm/form/merchandise/MerchandiseSelection.js.map +1 -0
  155. package/dist/esm/form/merchandise/MerchandiseSlider.js +36 -0
  156. package/dist/esm/form/merchandise/MerchandiseSlider.js.map +1 -0
  157. package/dist/esm/form/merchendise/MerchandiseSelection.js +15 -0
  158. package/dist/esm/form/merchendise/MerchandiseSelection.js.map +1 -0
  159. package/dist/esm/form/merchendise/MerchandiseSlider.js +71 -0
  160. package/dist/esm/form/merchendise/MerchandiseSlider.js.map +1 -0
  161. package/dist/esm/form/payment/FeeBox.js +6 -18
  162. package/dist/esm/form/payment/FeeBox.js.map +1 -1
  163. package/dist/esm/form/payment/PaymentOverviewCheckbox.js +48 -0
  164. package/dist/esm/form/payment/PaymentOverviewCheckbox.js.map +1 -0
  165. package/dist/esm/form/product/ProductCard.js +148 -37
  166. package/dist/esm/form/product/ProductCard.js.map +1 -1
  167. package/dist/esm/form/product/ProductVariantsDialog.js +184 -99
  168. package/dist/esm/form/product/ProductVariantsDialog.js.map +1 -1
  169. package/dist/esm/form/services/index.js +112 -0
  170. package/dist/esm/form/services/index.js.map +1 -0
  171. package/dist/esm/form/style.js +13 -4
  172. package/dist/esm/form/style.js.map +1 -1
  173. package/dist/esm/form/tickets/ReleaseDescription.js +19 -0
  174. package/dist/esm/form/tickets/ReleaseDescription.js.map +1 -0
  175. package/dist/esm/form/tickets/ReleaseWithMerchandise.js +161 -0
  176. package/dist/esm/form/tickets/ReleaseWithMerchandise.js.map +1 -0
  177. package/dist/esm/form/tickets/TicketQuantityControl.js +50 -0
  178. package/dist/esm/form/tickets/TicketQuantityControl.js.map +1 -0
  179. package/dist/esm/form/tickets/TicketSelection.js +158 -0
  180. package/dist/esm/form/tickets/TicketSelection.js.map +1 -0
  181. package/dist/esm/form/tickets/TicketSelectionMap.js +75 -0
  182. package/dist/esm/form/tickets/TicketSelectionMap.js.map +1 -0
  183. package/dist/esm/form/tickets/TicketSelectionMobile.js +96 -0
  184. package/dist/esm/form/tickets/TicketSelectionMobile.js.map +1 -0
  185. package/dist/esm/form/tickets/TicketWithMerchandiseSelection.js +123 -0
  186. package/dist/esm/form/tickets/TicketWithMerchandiseSelection.js.map +1 -0
  187. package/dist/esm/hooks/useConsentScrollOnDrawerOpen.js +55 -0
  188. package/dist/esm/hooks/useConsentScrollOnDrawerOpen.js.map +1 -0
  189. package/dist/esm/hooks/useScrollToFirstError.js +69 -0
  190. package/dist/esm/hooks/useScrollToFirstError.js.map +1 -0
  191. package/dist/esm/locales/cs.js +47 -2
  192. package/dist/esm/locales/cs.js.map +1 -1
  193. package/dist/esm/locales/en.js +47 -1
  194. package/dist/esm/locales/en.js.map +1 -1
  195. package/dist/esm/locales/es.js +47 -1
  196. package/dist/esm/locales/es.js.map +1 -1
  197. package/dist/esm/locales/pl.js +47 -1
  198. package/dist/esm/locales/pl.js.map +1 -1
  199. package/dist/esm/locales/sk.js +47 -1
  200. package/dist/esm/locales/sk.js.map +1 -1
  201. package/dist/esm/locales/uk.js +47 -1
  202. package/dist/esm/locales/uk.js.map +1 -1
  203. package/dist/esm/modules/shopping-cart.js +9 -8
  204. package/dist/esm/modules/shopping-cart.js.map +1 -1
  205. package/dist/esm/utils/data/global.js +2 -1
  206. package/dist/esm/utils/data/global.js.map +1 -1
  207. package/dist/esm/utils/data/ticket.js +4 -0
  208. package/dist/esm/utils/data/ticket.js.map +1 -0
  209. package/dist/esm/utils/gtm.js +19 -1
  210. package/dist/esm/utils/gtm.js.map +1 -1
  211. package/dist/types/context/GlobalContext.d.ts +2 -1
  212. package/dist/types/form/PaymentOverviewDrawer.d.ts +8 -0
  213. package/dist/types/form/PaymentSuccess.d.ts +2 -0
  214. package/dist/types/form/TicketSelectionMap.d.ts +7 -0
  215. package/dist/types/form/extra-field/ExtraField.d.ts +1 -1
  216. package/dist/types/form/index.d.ts +1 -0
  217. package/dist/types/form/merchendise/MerchandiseSelection.d.ts +9 -0
  218. package/dist/types/form/merchendise/MerchandiseSlider.d.ts +10 -0
  219. package/dist/types/form/merchendise/MerchendiseSlider.d.ts +0 -0
  220. package/dist/types/form/payment/PaymentOverviewCheckbox.d.ts +12 -0
  221. package/dist/types/locales/cs.d.ts +23 -0
  222. package/dist/types/locales/en.d.ts +24 -0
  223. package/dist/types/locales/es.d.ts +24 -0
  224. package/dist/types/locales/pl.d.ts +24 -0
  225. package/dist/types/locales/sk.d.ts +24 -0
  226. package/dist/types/locales/uk.d.ts +24 -0
  227. package/dist/types/modules/shopping-cart.d.ts +3 -5
  228. package/dist/types/utils/data/shopping-cart.d.ts +5 -0
  229. package/dist/types/utils/gtm.d.ts +3 -1
  230. package/dist/types/utils/types/event.type.d.ts +1 -0
  231. package/dist/types/utils/types/global.type.d.ts +1 -0
  232. package/dist/types/utils/types/gtm.type.d.ts +5 -0
  233. package/dist/types/utils/types/order.type.d.ts +1 -0
  234. package/dist/types/utils/types/shopping-cart.type.d.ts +44 -35
  235. package/dist/types/utils/types/ticket.type.d.ts +21 -5
  236. package/package.json +11 -6
  237. package/rollup.config.mjs +16 -1
  238. package/src/components/Image.tsx +49 -27
  239. package/src/components/hook-form/FormProvider.tsx +5 -2
  240. package/src/context/GlobalContext.tsx +3 -0
  241. package/src/form/ChildEventDialog.tsx +3 -3
  242. package/src/form/ContactPerson.tsx +1 -1
  243. package/src/form/Payment.tsx +2 -4
  244. package/src/form/PaymentOverviewBox.tsx +178 -139
  245. package/src/form/PaymentOverviewDrawer.tsx +446 -0
  246. package/src/form/PaymentPending.tsx +19 -3
  247. package/src/form/PaymentSuccess.tsx +46 -3
  248. package/src/form/Shipping.tsx +48 -33
  249. package/src/form/TicketForm.tsx +162 -43
  250. package/src/form/extra-field/ExtraField.tsx +3 -1
  251. package/src/form/extra-field/ReleaseExtraFields.tsx +1 -1
  252. package/src/form/index.tsx +6 -1
  253. package/src/form/merchandise/MerchandiseSelection.tsx +24 -0
  254. package/src/form/merchandise/MerchandiseSlider.tsx +62 -0
  255. package/src/form/payment/FeeBox.tsx +6 -34
  256. package/src/form/payment/PaymentOverviewCheckbox.tsx +88 -0
  257. package/src/form/product/ProductCard.tsx +258 -59
  258. package/src/form/product/ProductVariantsDialog.tsx +292 -139
  259. package/src/form/services/index.tsx +263 -0
  260. package/src/form/style.ts +16 -4
  261. package/src/form/tickets/ReleaseDescription.tsx +46 -0
  262. package/src/form/tickets/ReleaseWithMerchandise.tsx +271 -0
  263. package/src/form/tickets/TicketQuantityControl.tsx +100 -0
  264. package/src/form/tickets/TicketSelection.tsx +236 -0
  265. package/src/form/tickets/TicketSelectionMap.tsx +99 -0
  266. package/src/form/tickets/TicketSelectionMobile.tsx +188 -0
  267. package/src/form/tickets/TicketWithMerchandiseSelection.tsx +192 -0
  268. package/src/hooks/useScrollToFirstError.ts +99 -0
  269. package/src/locales/cs.tsx +50 -2
  270. package/src/locales/en.tsx +50 -1
  271. package/src/locales/es.tsx +50 -1
  272. package/src/locales/pl.tsx +50 -1
  273. package/src/locales/sk.tsx +50 -1
  274. package/src/locales/uk.tsx +50 -1
  275. package/src/modules/shopping-cart.ts +14 -11
  276. package/src/utils/data/global.ts +1 -0
  277. package/src/utils/data/shopping-cart.ts +5 -0
  278. package/src/utils/data/ticket.ts +1 -0
  279. package/src/utils/gtm.ts +29 -0
  280. package/src/utils/types/event.type.ts +1 -0
  281. package/src/utils/types/global.type.ts +1 -0
  282. package/src/utils/types/gtm.type.ts +6 -0
  283. package/src/utils/types/order.type.ts +1 -0
  284. package/src/utils/types/shopping-cart.type.ts +42 -31
  285. package/src/utils/types/ticket.type.ts +23 -3
  286. package/tsconfig.json +2 -1
  287. package/dist/cjs/_virtual/colorManipulator.js +0 -6
  288. package/dist/cjs/_virtual/colorManipulator.js.map +0 -1
  289. package/dist/cjs/_virtual/createStyled.js +0 -6
  290. package/dist/cjs/_virtual/createStyled.js.map +0 -1
  291. package/dist/cjs/_virtual/customParseFormat.js +0 -6
  292. package/dist/cjs/_virtual/customParseFormat.js.map +0 -1
  293. package/dist/cjs/_virtual/dayjs.min.js +0 -6
  294. package/dist/cjs/_virtual/dayjs.min.js.map +0 -1
  295. package/dist/cjs/_virtual/extends.js +0 -6
  296. package/dist/cjs/_virtual/extends.js.map +0 -1
  297. package/dist/cjs/_virtual/index.umd.js +0 -6
  298. package/dist/cjs/_virtual/index.umd.js.map +0 -1
  299. package/dist/cjs/_virtual/index10.js +0 -11
  300. package/dist/cjs/_virtual/index10.js.map +0 -1
  301. package/dist/cjs/_virtual/index11.js +0 -11
  302. package/dist/cjs/_virtual/index11.js.map +0 -1
  303. package/dist/cjs/_virtual/index12.js +0 -6
  304. package/dist/cjs/_virtual/index12.js.map +0 -1
  305. package/dist/cjs/_virtual/index13.js +0 -6
  306. package/dist/cjs/_virtual/index13.js.map +0 -1
  307. package/dist/cjs/_virtual/index14.js +0 -6
  308. package/dist/cjs/_virtual/index14.js.map +0 -1
  309. package/dist/cjs/_virtual/index15.js +0 -6
  310. package/dist/cjs/_virtual/index15.js.map +0 -1
  311. package/dist/cjs/_virtual/index4.js +0 -11
  312. package/dist/cjs/_virtual/index4.js.map +0 -1
  313. package/dist/cjs/_virtual/index5.js +0 -11
  314. package/dist/cjs/_virtual/index5.js.map +0 -1
  315. package/dist/cjs/_virtual/index6.js +0 -11
  316. package/dist/cjs/_virtual/index6.js.map +0 -1
  317. package/dist/cjs/_virtual/index7.js +0 -11
  318. package/dist/cjs/_virtual/index7.js.map +0 -1
  319. package/dist/cjs/_virtual/index8.js +0 -11
  320. package/dist/cjs/_virtual/index8.js.map +0 -1
  321. package/dist/cjs/_virtual/index9.js +0 -11
  322. package/dist/cjs/_virtual/index9.js.map +0 -1
  323. package/dist/cjs/_virtual/interopRequireDefault.js +0 -6
  324. package/dist/cjs/_virtual/interopRequireDefault.js.map +0 -1
  325. package/dist/cjs/_virtual/isBetween.js +0 -6
  326. package/dist/cjs/_virtual/isBetween.js.map +0 -1
  327. package/dist/cjs/_virtual/jsx-runtime.js +0 -6
  328. package/dist/cjs/_virtual/jsx-runtime.js.map +0 -1
  329. package/dist/cjs/_virtual/localizedFormat.js +0 -6
  330. package/dist/cjs/_virtual/localizedFormat.js.map +0 -1
  331. package/dist/cjs/_virtual/lodash.js +0 -6
  332. package/dist/cjs/_virtual/lodash.js.map +0 -1
  333. package/dist/cjs/_virtual/lottie.js +0 -6
  334. package/dist/cjs/_virtual/lottie.js.map +0 -1
  335. package/dist/cjs/_virtual/numeral.js +0 -6
  336. package/dist/cjs/_virtual/numeral.js.map +0 -1
  337. package/dist/cjs/_virtual/objectWithoutPropertiesLoose.js +0 -6
  338. package/dist/cjs/_virtual/objectWithoutPropertiesLoose.js.map +0 -1
  339. package/dist/cjs/_virtual/react-is.development3.js +0 -6
  340. package/dist/cjs/_virtual/react-is.development3.js.map +0 -1
  341. package/dist/cjs/_virtual/react-is.production.min2.js +0 -6
  342. package/dist/cjs/_virtual/react-is.production.min2.js.map +0 -1
  343. package/dist/cjs/_virtual/react-jsx-runtime.development.js +0 -6
  344. package/dist/cjs/_virtual/react-jsx-runtime.development.js.map +0 -1
  345. package/dist/cjs/_virtual/react-jsx-runtime.production.min.js +0 -6
  346. package/dist/cjs/_virtual/react-jsx-runtime.production.min.js.map +0 -1
  347. package/dist/cjs/_virtual/timezone.js +0 -6
  348. package/dist/cjs/_virtual/timezone.js.map +0 -1
  349. package/dist/cjs/_virtual/use-sync-external-store-shim.development.js +0 -6
  350. package/dist/cjs/_virtual/use-sync-external-store-shim.development.js.map +0 -1
  351. package/dist/cjs/_virtual/use-sync-external-store-shim.production.js +0 -6
  352. package/dist/cjs/_virtual/use-sync-external-store-shim.production.js.map +0 -1
  353. package/dist/cjs/_virtual/useThemeWithoutDefault.js +0 -6
  354. package/dist/cjs/_virtual/useThemeWithoutDefault.js.map +0 -1
  355. package/dist/cjs/_virtual/utc.js +0 -6
  356. package/dist/cjs/_virtual/utc.js.map +0 -1
  357. package/dist/cjs/_virtual/weekOfYear.js +0 -6
  358. package/dist/cjs/_virtual/weekOfYear.js.map +0 -1
  359. package/dist/cjs/hooks/useFirstRender.js +0 -14
  360. package/dist/cjs/hooks/useFirstRender.js.map +0 -1
  361. package/dist/cjs/utils/data/order.js +0 -8
  362. package/dist/cjs/utils/data/order.js.map +0 -1
  363. package/dist/esm/_virtual/colorManipulator.js +0 -4
  364. package/dist/esm/_virtual/colorManipulator.js.map +0 -1
  365. package/dist/esm/_virtual/createStyled.js +0 -4
  366. package/dist/esm/_virtual/createStyled.js.map +0 -1
  367. package/dist/esm/_virtual/customParseFormat.js +0 -4
  368. package/dist/esm/_virtual/customParseFormat.js.map +0 -1
  369. package/dist/esm/_virtual/dayjs.min.js +0 -4
  370. package/dist/esm/_virtual/dayjs.min.js.map +0 -1
  371. package/dist/esm/_virtual/extends.js +0 -4
  372. package/dist/esm/_virtual/extends.js.map +0 -1
  373. package/dist/esm/_virtual/index.umd.js +0 -4
  374. package/dist/esm/_virtual/index.umd.js.map +0 -1
  375. package/dist/esm/_virtual/index10.js +0 -7
  376. package/dist/esm/_virtual/index10.js.map +0 -1
  377. package/dist/esm/_virtual/index11.js +0 -7
  378. package/dist/esm/_virtual/index11.js.map +0 -1
  379. package/dist/esm/_virtual/index12.js +0 -4
  380. package/dist/esm/_virtual/index12.js.map +0 -1
  381. package/dist/esm/_virtual/index13.js +0 -4
  382. package/dist/esm/_virtual/index13.js.map +0 -1
  383. package/dist/esm/_virtual/index14.js +0 -4
  384. package/dist/esm/_virtual/index14.js.map +0 -1
  385. package/dist/esm/_virtual/index15.js +0 -4
  386. package/dist/esm/_virtual/index15.js.map +0 -1
  387. package/dist/esm/_virtual/index4.js +0 -7
  388. package/dist/esm/_virtual/index4.js.map +0 -1
  389. package/dist/esm/_virtual/index5.js +0 -7
  390. package/dist/esm/_virtual/index5.js.map +0 -1
  391. package/dist/esm/_virtual/index6.js +0 -7
  392. package/dist/esm/_virtual/index6.js.map +0 -1
  393. package/dist/esm/_virtual/index7.js +0 -7
  394. package/dist/esm/_virtual/index7.js.map +0 -1
  395. package/dist/esm/_virtual/index8.js +0 -7
  396. package/dist/esm/_virtual/index8.js.map +0 -1
  397. package/dist/esm/_virtual/index9.js +0 -7
  398. package/dist/esm/_virtual/index9.js.map +0 -1
  399. package/dist/esm/_virtual/interopRequireDefault.js +0 -4
  400. package/dist/esm/_virtual/interopRequireDefault.js.map +0 -1
  401. package/dist/esm/_virtual/isBetween.js +0 -4
  402. package/dist/esm/_virtual/isBetween.js.map +0 -1
  403. package/dist/esm/_virtual/jsx-runtime.js +0 -4
  404. package/dist/esm/_virtual/jsx-runtime.js.map +0 -1
  405. package/dist/esm/_virtual/localizedFormat.js +0 -4
  406. package/dist/esm/_virtual/localizedFormat.js.map +0 -1
  407. package/dist/esm/_virtual/lodash.js +0 -4
  408. package/dist/esm/_virtual/lodash.js.map +0 -1
  409. package/dist/esm/_virtual/lottie.js +0 -4
  410. package/dist/esm/_virtual/lottie.js.map +0 -1
  411. package/dist/esm/_virtual/numeral.js +0 -4
  412. package/dist/esm/_virtual/numeral.js.map +0 -1
  413. package/dist/esm/_virtual/objectWithoutPropertiesLoose.js +0 -4
  414. package/dist/esm/_virtual/objectWithoutPropertiesLoose.js.map +0 -1
  415. package/dist/esm/_virtual/react-is.development3.js +0 -4
  416. package/dist/esm/_virtual/react-is.development3.js.map +0 -1
  417. package/dist/esm/_virtual/react-is.production.min2.js +0 -4
  418. package/dist/esm/_virtual/react-is.production.min2.js.map +0 -1
  419. package/dist/esm/_virtual/react-jsx-runtime.development.js +0 -4
  420. package/dist/esm/_virtual/react-jsx-runtime.development.js.map +0 -1
  421. package/dist/esm/_virtual/react-jsx-runtime.production.min.js +0 -4
  422. package/dist/esm/_virtual/react-jsx-runtime.production.min.js.map +0 -1
  423. package/dist/esm/_virtual/timezone.js +0 -4
  424. package/dist/esm/_virtual/timezone.js.map +0 -1
  425. package/dist/esm/_virtual/use-sync-external-store-shim.development.js +0 -4
  426. package/dist/esm/_virtual/use-sync-external-store-shim.development.js.map +0 -1
  427. package/dist/esm/_virtual/use-sync-external-store-shim.production.js +0 -4
  428. package/dist/esm/_virtual/use-sync-external-store-shim.production.js.map +0 -1
  429. package/dist/esm/_virtual/useThemeWithoutDefault.js +0 -4
  430. package/dist/esm/_virtual/useThemeWithoutDefault.js.map +0 -1
  431. package/dist/esm/_virtual/utc.js +0 -4
  432. package/dist/esm/_virtual/utc.js.map +0 -1
  433. package/dist/esm/_virtual/weekOfYear.js +0 -4
  434. package/dist/esm/_virtual/weekOfYear.js.map +0 -1
  435. package/dist/esm/hooks/useFirstRender.js +0 -12
  436. package/dist/esm/hooks/useFirstRender.js.map +0 -1
  437. package/dist/esm/utils/data/order.js +0 -8
  438. package/dist/esm/utils/data/order.js.map +0 -1
  439. package/dist/index.cjs.js +0 -90295
  440. package/dist/index.cjs.js.map +0 -1
  441. package/dist/index.esm.js +0 -90275
  442. package/dist/index.esm.js.map +0 -1
  443. package/dist/types/hooks/data/useShoppingCart.d.ts +0 -8
  444. package/src/form/MerchandiseSelection.tsx +0 -29
  445. package/src/form/ReleaseWithMerchandise.tsx +0 -230
  446. package/src/form/TicketSelection.tsx +0 -284
  447. package/src/form/TicketWithMerchandiseSelection.tsx +0 -131
@@ -0,0 +1,446 @@
1
+ import { Box, Button, SwipeableDrawer, Typography } from '@mui/material';
2
+ import React, { useEffect } from 'react';
3
+ import { useRef, useState } from 'react';
4
+ import PaymentOverviewBox from './PaymentOverviewBox';
5
+ import { IEvent } from '@utils/types/event.type';
6
+ import useGlobal from '@hooks/useGlobal';
7
+ import { fCurrency } from '@utils/formatNumber';
8
+ import { EVENTLOOK_ORDER_FORM_ID } from '@utils/data/global.ts';
9
+
10
+ interface Props {
11
+ event: IEvent;
12
+ totalPrice: number;
13
+ termsAndConditionsRef?: React.RefObject<HTMLElement | null>;
14
+ onOpenChange?: (open: boolean) => void;
15
+ }
16
+
17
+ const swipeAreaWidth = 120;
18
+
19
+ const clearResetPulledPastTimeout = (timeoutRef: { current: number | null }) => {
20
+ if (timeoutRef.current !== null) {
21
+ window.clearTimeout(timeoutRef.current);
22
+ timeoutRef.current = null;
23
+ }
24
+ };
25
+
26
+ const PaymentOverviewDrawer: React.FC<Props> = ({
27
+ event,
28
+ totalPrice,
29
+ termsAndConditionsRef,
30
+ onOpenChange,
31
+ }) => {
32
+ const { t, lang } = useGlobal();
33
+ const [isDrawerOpened, setIsDrawerOpened] = useState(false);
34
+ const [isOpeningGesture, setIsOpeningGesture] = useState(false);
35
+ const [hasPulledPastClosedTabHeight, setHasPulledPastClosedTabHeight] = useState(false);
36
+ const [isDrawerHidden, setIsDrawerHidden] = useState(false);
37
+ const [closedTabHeight, setClosedTabHeight] = useState(0);
38
+ const openingTouchStartYRef = useRef<number | null>(null);
39
+ const openDrawerRef = useRef(false);
40
+ const isOpeningGestureRef = useRef(false);
41
+ const shouldReopenOnScrollUpRef = useRef(false);
42
+ const lastScrollYRef = useRef(0);
43
+ const isScrollingDownRef = useRef(false);
44
+ const wasAtPageBottomRef = useRef(false);
45
+ const resetPulledPastTimeoutRef = useRef<number | null>(null);
46
+ const closedTabRef = useRef<HTMLDivElement>(null);
47
+
48
+ useEffect(() => {
49
+ openDrawerRef.current = isDrawerOpened;
50
+ }, [isDrawerOpened]);
51
+
52
+ useEffect(() => {
53
+ isOpeningGestureRef.current = isOpeningGesture;
54
+ }, [isOpeningGesture]);
55
+
56
+ // reopens the drawer when user scrolls up and the drawer was closed by scrolling down to the bottom of the page
57
+ useEffect(() => {
58
+ if (typeof window === 'undefined') {
59
+ return;
60
+ }
61
+
62
+ const atBottomThreshold = 8;
63
+ lastScrollYRef.current = window.scrollY;
64
+ isScrollingDownRef.current = false;
65
+ wasAtPageBottomRef.current =
66
+ window.innerHeight + window.scrollY >=
67
+ document.documentElement.scrollHeight - atBottomThreshold;
68
+
69
+ const handleScroll = () => {
70
+ const currentY = window.scrollY;
71
+ const isScrollingUp = currentY < lastScrollYRef.current;
72
+ const isScrollingDown = currentY > lastScrollYRef.current;
73
+ const isAtPageBottom =
74
+ window.innerHeight + currentY >= document.documentElement.scrollHeight - atBottomThreshold;
75
+
76
+ isScrollingDownRef.current = isScrollingDown;
77
+
78
+ if (
79
+ isScrollingUp &&
80
+ wasAtPageBottomRef.current &&
81
+ shouldReopenOnScrollUpRef.current &&
82
+ !openDrawerRef.current
83
+ ) {
84
+ shouldReopenOnScrollUpRef.current = false;
85
+ setIsDrawerHidden(false);
86
+ openDrawerHandler();
87
+ }
88
+
89
+ wasAtPageBottomRef.current = isAtPageBottom;
90
+ lastScrollYRef.current = currentY;
91
+ };
92
+
93
+ window.addEventListener('scroll', handleScroll, { passive: true });
94
+
95
+ return () => {
96
+ window.removeEventListener('scroll', handleScroll);
97
+ };
98
+ }, []);
99
+
100
+ useEffect(() => {
101
+ const closedTab = closedTabRef.current;
102
+ if (!closedTab) return;
103
+
104
+ const updateClosedTabHeight = () => {
105
+ setClosedTabHeight(closedTab.offsetHeight);
106
+ };
107
+
108
+ updateClosedTabHeight();
109
+
110
+ const resizeObserver = new ResizeObserver(() => {
111
+ updateClosedTabHeight();
112
+ });
113
+
114
+ resizeObserver.observe(closedTab);
115
+
116
+ return () => {
117
+ resizeObserver.disconnect();
118
+ };
119
+ }, []);
120
+
121
+ useEffect(
122
+ () => () => {
123
+ clearResetPulledPastTimeout(resetPulledPastTimeoutRef);
124
+ },
125
+ []
126
+ );
127
+
128
+ useEffect(() => {
129
+ const termsAndConditionsElement = termsAndConditionsRef?.current;
130
+ if (!termsAndConditionsElement) {
131
+ return;
132
+ }
133
+
134
+ if (!('IntersectionObserver' in window)) {
135
+ return;
136
+ }
137
+
138
+ const observer = new IntersectionObserver(
139
+ (entries) => {
140
+ const entry = entries[0];
141
+ const hasReachedTermsSection = entry?.isIntersecting ?? false;
142
+ const shouldAutoCloseDrawer = hasReachedTermsSection;
143
+ const shouldHideDrawerTab =
144
+ hasReachedTermsSection && !openDrawerRef.current && !isOpeningGestureRef.current;
145
+ setIsDrawerHidden(shouldHideDrawerTab);
146
+
147
+ if (shouldAutoCloseDrawer && openDrawerRef.current && isScrollingDownRef.current) {
148
+ closeDrawerHandler({ shouldReopenOnScrollUp: true });
149
+ setIsDrawerHidden(true);
150
+ }
151
+ },
152
+ {
153
+ root: null,
154
+ threshold: 0,
155
+ rootMargin: '0px 0px -40% 0px',
156
+ }
157
+ );
158
+
159
+ observer.observe(termsAndConditionsElement);
160
+
161
+ return () => {
162
+ observer.disconnect();
163
+ };
164
+ }, [termsAndConditionsRef]);
165
+
166
+ const toggleDrawer = () => {
167
+ if (openDrawerRef.current) {
168
+ closeDrawerHandler();
169
+ return;
170
+ }
171
+
172
+ openDrawerHandler();
173
+ };
174
+
175
+ const openDrawerHandler = () => {
176
+ clearResetPulledPastTimeout(resetPulledPastTimeoutRef);
177
+ setIsOpeningGesture(false);
178
+ setHasPulledPastClosedTabHeight(false);
179
+ openingTouchStartYRef.current = null;
180
+ shouldReopenOnScrollUpRef.current = false;
181
+ setIsDrawerOpened(true);
182
+ onOpenChange?.(true);
183
+ };
184
+
185
+ const closeDrawerHandler = ({
186
+ shouldReopenOnScrollUp = false,
187
+ }: { shouldReopenOnScrollUp?: boolean } = {}) => {
188
+ clearResetPulledPastTimeout(resetPulledPastTimeoutRef);
189
+ setIsOpeningGesture(false);
190
+ setHasPulledPastClosedTabHeight(false);
191
+ openingTouchStartYRef.current = null;
192
+ shouldReopenOnScrollUpRef.current = shouldReopenOnScrollUp;
193
+ setIsDrawerOpened(false);
194
+ onOpenChange?.(false);
195
+ };
196
+
197
+ const scheduleResetPulledPastTimeout = () => {
198
+ clearResetPulledPastTimeout(resetPulledPastTimeoutRef);
199
+ resetPulledPastTimeoutRef.current = window.setTimeout(() => {
200
+ if (!openDrawerRef.current) {
201
+ setHasPulledPastClosedTabHeight(false);
202
+ }
203
+ }, 180);
204
+ };
205
+
206
+ const handleGestureStart = (startY: number | null) => {
207
+ openingTouchStartYRef.current = startY;
208
+ setIsOpeningGesture(true);
209
+ setHasPulledPastClosedTabHeight(false);
210
+ };
211
+
212
+ const handleGestureMove = (currentY?: number) => {
213
+ if (!isOpeningGestureRef.current) return;
214
+
215
+ const startY = openingTouchStartYRef.current;
216
+ if (startY === null || typeof currentY !== 'number') return;
217
+
218
+ const pullDistance = startY - currentY;
219
+ const currentClosedTabHeight = closedTabRef.current?.offsetHeight ?? 0;
220
+ setHasPulledPastClosedTabHeight(
221
+ currentClosedTabHeight > 0 && pullDistance >= currentClosedTabHeight
222
+ );
223
+ };
224
+
225
+ const handleGestureCancel = () => {
226
+ openingTouchStartYRef.current = null;
227
+ setIsOpeningGesture(false);
228
+ setHasPulledPastClosedTabHeight(false);
229
+ };
230
+
231
+ const handleGestureEnd = ({
232
+ shouldResetTouchStart = false,
233
+ }: { shouldResetTouchStart?: boolean } = {}) => {
234
+ if (shouldResetTouchStart) {
235
+ openingTouchStartYRef.current = null;
236
+ }
237
+
238
+ if (!isDrawerOpened) {
239
+ setIsOpeningGesture(false);
240
+ scheduleResetPulledPastTimeout();
241
+ }
242
+ };
243
+
244
+ return (
245
+ <Box sx={{ display: { md: 'none' } }}>
246
+ {/* Drawer Tab */}
247
+ <Box
248
+ ref={closedTabRef}
249
+ sx={{
250
+ position: 'fixed',
251
+ bottom: 0,
252
+ left: 0,
253
+ right: 0,
254
+ backgroundColor: (theme) => theme.palette.background.paper,
255
+ borderTopLeftRadius: isOpeningGesture || isDrawerOpened ? 0 : 16,
256
+ borderTopRightRadius: isOpeningGesture || isDrawerOpened ? 0 : 16,
257
+ boxShadow:
258
+ isOpeningGesture || isDrawerOpened ? 'none' : '0 -8px 10px 2px rgba(0,0,0,0.2)',
259
+ zIndex: (theme) => theme.zIndex.drawer + 1,
260
+ opacity: isDrawerHidden ? 0 : 1,
261
+ transform: isDrawerHidden ? 'translateY(calc(100% + 12px))' : 'translateY(0)',
262
+ transition:
263
+ 'opacity 180ms ease, transform 180ms ease, border-radius 120ms ease, box-shadow 120ms ease',
264
+ pointerEvents: 'none',
265
+ }}
266
+ >
267
+ {!isDrawerOpened && (
268
+ <Box
269
+ sx={{
270
+ display: 'flex',
271
+ justifyContent: 'center',
272
+ alignItems: 'center',
273
+ width: '100%',
274
+ py: 1,
275
+ }}
276
+ >
277
+ <Box
278
+ sx={{
279
+ width: 80,
280
+ height: 6,
281
+ backgroundColor: (theme) => theme.palette.grey[300],
282
+ borderRadius: 3,
283
+ opacity: isOpeningGesture ? 0 : 1,
284
+ transition: 'opacity 120ms ease',
285
+ }}
286
+ />
287
+ </Box>
288
+ )}
289
+ <Box
290
+ role="button"
291
+ aria-label={t('form.labels.payment_overview_open')}
292
+ onClick={toggleDrawer}
293
+ onTouchStart={(event: React.TouchEvent<HTMLDivElement>) => {
294
+ handleGestureStart(event.touches[0]?.clientY ?? null);
295
+ }}
296
+ onMouseDown={() => {
297
+ handleGestureStart(null);
298
+ }}
299
+ onTouchMove={(event: React.TouchEvent<HTMLDivElement>) => {
300
+ handleGestureMove(event.touches[0]?.clientY);
301
+ }}
302
+ onTouchCancel={handleGestureCancel}
303
+ onTouchEnd={() => {
304
+ handleGestureEnd({ shouldResetTouchStart: true });
305
+ }}
306
+ onMouseUp={() => {
307
+ handleGestureEnd();
308
+ }}
309
+ sx={{
310
+ width: '100%',
311
+ px: 2,
312
+ pb: 2,
313
+ pointerEvents: isDrawerOpened || isDrawerHidden ? 'none' : 'auto',
314
+ cursor: 'pointer',
315
+ }}
316
+ >
317
+ <Typography
318
+ sx={{
319
+ fontWeight: 'bold',
320
+ display: 'flex',
321
+ justifyContent: 'space-between',
322
+ alignItems: 'center',
323
+ }}
324
+ >
325
+ <span>{t('form.labels.total')}:</span>
326
+ <span>{fCurrency(totalPrice, lang, event.currency)}</span>
327
+ </Typography>
328
+
329
+ <Button
330
+ type="submit"
331
+ form={EVENTLOOK_ORDER_FORM_ID}
332
+ onClick={(event) => {
333
+ event.stopPropagation();
334
+ }}
335
+ variant="contained"
336
+ size="large"
337
+ fullWidth
338
+ sx={{ mt: 1, height: { xs: 36, md: 40 } }}
339
+ >
340
+ {t('buy')}
341
+ </Button>
342
+ </Box>
343
+ </Box>
344
+
345
+ {/* Drawer Content */}
346
+ <SwipeableDrawer
347
+ anchor="bottom"
348
+ open={isDrawerOpened}
349
+ onClose={() => closeDrawerHandler()}
350
+ onOpen={() => openDrawerHandler()}
351
+ swipeAreaWidth={swipeAreaWidth}
352
+ allowSwipeInChildren
353
+ disableSwipeToOpen={isDrawerHidden}
354
+ keepMounted
355
+ SwipeAreaProps={{
356
+ onTouchStart: (event: React.TouchEvent<HTMLDivElement>) => {
357
+ handleGestureStart(event.touches[0]?.clientY ?? null);
358
+ },
359
+ onMouseDown: () => {
360
+ handleGestureStart(null);
361
+ },
362
+ onTouchMove: (event: React.TouchEvent<HTMLDivElement>) => {
363
+ handleGestureMove(event.touches[0]?.clientY);
364
+ },
365
+ onTouchCancel: handleGestureCancel,
366
+ onTouchEnd: () => {
367
+ handleGestureEnd({ shouldResetTouchStart: true });
368
+ },
369
+ onMouseUp: () => {
370
+ handleGestureEnd();
371
+ },
372
+ }}
373
+ sx={{
374
+ display: { md: 'none' },
375
+ pointerEvents: isDrawerOpened ? 'none' : 'auto',
376
+ '& .MuiDrawer-paper': {
377
+ pointerEvents: 'auto',
378
+ },
379
+ '& .MuiSwipeArea-root': {
380
+ pointerEvents: 'auto',
381
+ },
382
+ }}
383
+ ModalProps={{
384
+ disableScrollLock: true,
385
+ keepMounted: false,
386
+ disableAutoFocus: true,
387
+ disableRestoreFocus: true,
388
+ disableEnforceFocus: true,
389
+ BackdropProps: {
390
+ sx: {
391
+ background: 'none',
392
+ pointerEvents: 'none',
393
+ },
394
+ },
395
+ }}
396
+ PaperProps={{
397
+ sx: {
398
+ borderTopLeftRadius: 16,
399
+ borderTopRightRadius: 16,
400
+ boxShadow: '0 -8px 10px 2px rgba(0,0,0,0.2)',
401
+ overflow: 'hidden',
402
+ mb:
403
+ isDrawerOpened ||
404
+ (!isDrawerOpened && (isOpeningGesture || hasPulledPastClosedTabHeight))
405
+ ? `${closedTabHeight}px`
406
+ : 0,
407
+ transition: 'none',
408
+ },
409
+ }}
410
+ >
411
+ <Box
412
+ role="button"
413
+ aria-label={t('form.labels.payment_overview_close')}
414
+ onClick={toggleDrawer}
415
+ sx={{
416
+ display: 'flex',
417
+ justifyContent: 'center',
418
+ alignItems: 'center',
419
+ backgroundColor: (theme) => theme.palette.background.paper,
420
+ cursor: 'pointer',
421
+ py: 1,
422
+ }}
423
+ >
424
+ <Box
425
+ sx={{
426
+ width: 80,
427
+ height: 6,
428
+ backgroundColor: (theme) => theme.palette.grey[300],
429
+ borderRadius: 3,
430
+ }}
431
+ />
432
+ </Box>
433
+ <Box
434
+ sx={{
435
+ height: '100%',
436
+ overflow: 'auto',
437
+ }}
438
+ >
439
+ <PaymentOverviewBox event={event} hideBuyButton />
440
+ </Box>
441
+ </SwipeableDrawer>
442
+ </Box>
443
+ );
444
+ };
445
+
446
+ export default PaymentOverviewDrawer;
@@ -1,6 +1,5 @@
1
- import React from 'react';
1
+ import React, { useEffect, useState } from 'react';
2
2
  import { Box, Typography } from '@mui/material';
3
- import Lottie from 'lottie-react';
4
3
  import bankTransferAnimation from '../utils/data/lottie/bank-transfer.json';
5
4
  import { varBounce } from '@components/animate';
6
5
  import { m } from 'framer-motion';
@@ -8,6 +7,23 @@ import useGlobal from '@hooks/useGlobal.ts';
8
7
 
9
8
  const PaymentPending: React.FC = () => {
10
9
  const { t } = useGlobal();
10
+ const [LottieComponent, setLottieComponent] = useState<React.ComponentType<any> | null>(null);
11
+
12
+ useEffect(() => {
13
+ if (typeof window === 'undefined') return;
14
+
15
+ let isMounted = true;
16
+
17
+ import('lottie-react').then((module) => {
18
+ if (isMounted) {
19
+ setLottieComponent(() => module.default);
20
+ }
21
+ });
22
+
23
+ return () => {
24
+ isMounted = false;
25
+ };
26
+ }, []);
11
27
 
12
28
  return (
13
29
  <Box textAlign="center">
@@ -17,7 +33,7 @@ const PaymentPending: React.FC = () => {
17
33
  </Typography>
18
34
  </m.div>
19
35
  <Box maxWidth={600} mx="auto">
20
- <Lottie animationData={bankTransferAnimation} />
36
+ {LottieComponent ? <LottieComponent animationData={bankTransferAnimation} /> : null}
21
37
  </Box>
22
38
  </Box>
23
39
  );
@@ -9,20 +9,23 @@ import { PropsWithChildren } from '@utils/types/global.type';
9
9
  import { IPaidTicket } from '@utils/types/ticket.type';
10
10
  import useResponsive from '@hooks/useResponsive';
11
11
  import { getPlaceAsString } from '@utils/place';
12
- import { fCurrency, fData } from '@utils/formatNumber';
12
+ import { fCurrency } from '@utils/formatNumber';
13
13
  import { useTheme } from '@mui/material/styles';
14
14
  import { IPaidProduct } from '@utils/types/product.type';
15
15
  import dayjs from 'dayjs';
16
16
  import useGlobal from '@hooks/useGlobal';
17
17
  import { Trans } from '@components/Trans';
18
+ import { getGtmPurchasePaid, gtmPurchasePaid, mapUserToUserData } from '@utils/gtm.ts';
19
+ import { IPixels } from '@utils/types/gtm.type.ts';
18
20
 
19
21
  interface Props {
20
22
  setIsPaying: Dispatch<SetStateAction<boolean>>;
21
23
  isIframe?: boolean;
24
+ pixels?: IPixels;
22
25
  }
23
26
 
24
- const PaymentSuccess: React.FC<Props> = ({ setIsPaying, isIframe }) => {
25
- const { showSnackbar, t, lang, callbacks, content } = useGlobal();
27
+ const PaymentSuccess: React.FC<Props> = ({ setIsPaying, isIframe, pixels }) => {
28
+ const { showSnackbar, t, lang, callbacks, content, user } = useGlobal();
26
29
  const theme = useTheme();
27
30
  const defaultState = 'PROCESSING';
28
31
  const errorState = 'ERROR';
@@ -53,9 +56,49 @@ const PaymentSuccess: React.FC<Props> = ({ setIsPaying, isIframe }) => {
53
56
  setProducts(products);
54
57
  setState(data.state);
55
58
  setGwUrl(data.gwUrl);
59
+
60
+ const items = [
61
+ ...data.tickets.map((ticket) => ({
62
+ item_id: ticket.number,
63
+ item_name: `${ticket.eventName} - ${ticket.releaseCategoryName} - ${ticket.releaseName}`,
64
+ price: ticket.price,
65
+ quantity: 1,
66
+ })),
67
+ ];
68
+ if (data.extraFee) {
69
+ items.push({
70
+ item_id: 'service_fee',
71
+ item_name: `Service fee`,
72
+ price: data.extraFee,
73
+ quantity: 1,
74
+ });
75
+ }
76
+ const item = {
77
+ currency: data.currency,
78
+ value: data.totalPrice,
79
+ tax: 0,
80
+ payment_type: data.paymentType,
81
+ transaction_id: String(data.orderNumber),
82
+ coupon: data?.promoCodes?.map((p) => p.code) || [],
83
+ items,
84
+ };
85
+
56
86
  switch (data.state) {
57
87
  case GopayState.PAID:
58
88
  setTitle('event.tickets.payment_success.paid.title');
89
+ if (isIframe) {
90
+ setTimeout(() => {
91
+ parent.postMessage(
92
+ {
93
+ type: 'eventlookFrameGtm',
94
+ item: getGtmPurchasePaid(item, pixels),
95
+ },
96
+ '*'
97
+ );
98
+ }, 1000);
99
+ } else {
100
+ gtmPurchasePaid(item, pixels, user ? mapUserToUserData(user) : undefined);
101
+ }
59
102
  break;
60
103
  default:
61
104
  setTitle('event.tickets.payment_success.unpaid');
@@ -46,7 +46,6 @@ const Shipping: React.FC<Props> = ({ event }) => {
46
46
  [products]
47
47
  );
48
48
  const shippingMethodId = watch('shipping.shippingMethodId');
49
- const branchId = watch('shipping.branchId');
50
49
  const [displayBranchName, setDisplayBranchName] = useState<string | null>(null);
51
50
  const [firstRender, setFirstRender] = useState<boolean>(true);
52
51
  const filteredShippingMethods = useMemo(
@@ -83,9 +82,21 @@ const Shipping: React.FC<Props> = ({ event }) => {
83
82
  }
84
83
  };
85
84
 
85
+ const openPacketaWidget = () => {
86
+ const interval = setInterval(() => {
87
+ if (window.Packeta && window.Packeta.Widget) {
88
+ clearInterval(interval);
89
+ window.Packeta.Widget.pick(options?.packetaApiKey, onSelectBranch, {
90
+ language: lang,
91
+ });
92
+ }
93
+ }, 100);
94
+ };
95
+
86
96
  const handleChangeBranch = () => {
87
97
  setValue('shipping.branchId', null);
88
98
  setDisplayBranchName(null);
99
+ openPacketaWidget();
89
100
  };
90
101
 
91
102
  useEffect(() => {
@@ -103,25 +114,14 @@ const Shipping: React.FC<Props> = ({ event }) => {
103
114
  if (selectedShippingMethod) {
104
115
  setValue('shipping.price', selectedShippingMethod.price);
105
116
 
106
- if (selectedShippingMethod.type === ShippingTypes.PACKETA) {
107
- if (!branchId) {
108
- const interval = setInterval(() => {
109
- if (window.Packeta && window.Packeta.Widget) {
110
- clearInterval(interval);
111
- window.Packeta.Widget.pick(options?.packetaApiKey, onSelectBranch, {
112
- language: lang,
113
- });
114
- }
115
- }, 100);
116
- }
117
- } else {
117
+ if (selectedShippingMethod.type !== ShippingTypes.PACKETA) {
118
118
  setValue('shipping.branchId', null);
119
119
  setDisplayBranchName(null);
120
120
  }
121
121
  } else {
122
122
  setValue('shipping.price', 0);
123
123
  }
124
- }, [shippingMethodId, shippingMethods, branchId]);
124
+ }, [shippingMethodId, shippingMethods]);
125
125
 
126
126
  return (
127
127
  <>
@@ -142,11 +142,30 @@ const Shipping: React.FC<Props> = ({ event }) => {
142
142
  control={control}
143
143
  render={({ field, fieldState: { error } }) => (
144
144
  <FormControl component="fieldset" sx={{ width: '100%' }}>
145
- <RadioGroup {...field}>
145
+ <RadioGroup
146
+ {...field}
147
+ onChange={(event, value) => {
148
+ field.onChange(event);
149
+ const selectedShippingMethod = filteredShippingMethods.find(
150
+ (method) => method.id === Number(value)
151
+ );
152
+
153
+ if (selectedShippingMethod?.type === ShippingTypes.PACKETA) {
154
+ openPacketaWidget();
155
+ }
156
+ }}
157
+ >
146
158
  {filteredShippingMethods.map((shippingMethod) => (
147
159
  <ShippingMethodItem
148
160
  key={shippingMethod.id}
149
161
  active={Number(shippingMethodId) === shippingMethod.id}
162
+ hasError={!!error}
163
+ sx={{
164
+ '& .MuiFormControlLabel-labelPlacementEnd': {
165
+ mr: 0,
166
+ width: '100%',
167
+ },
168
+ }}
150
169
  >
151
170
  <FormControlLabel
152
171
  value={shippingMethod.id}
@@ -158,35 +177,31 @@ const Shipping: React.FC<Props> = ({ event }) => {
158
177
  alignItems="center"
159
178
  width="100%"
160
179
  >
161
- <Stack direction="row" alignItems="center">
162
- <Box
163
- sx={{
164
- marginRight: 2,
165
- }}
166
- >
180
+ <Stack direction="column">
181
+ <Stack direction="row" alignItems="center" spacing={1}>
167
182
  <Typography sx={{ lineHeight: 1.2 }}>
168
183
  {t(`shipping_method.types.${shippingMethod.type}`)}
169
184
  </Typography>
170
- {displayBranchName &&
171
- shippingMethod.type === ShippingTypes.PACKETA &&
172
- shippingMethod.id === Number(shippingMethodId) && (
173
- <Typography variant="caption" sx={{ lineHeight: 1 }}>
174
- {displayBranchName}
175
- </Typography>
176
- )}
177
- </Box>
178
- {paymentImages[shippingMethod.type]}
185
+ {paymentImages[shippingMethod.type]}
186
+ </Stack>
187
+ {displayBranchName &&
188
+ shippingMethod.type === ShippingTypes.PACKETA &&
189
+ shippingMethod.id === Number(shippingMethodId) && (
190
+ <Typography variant="caption" sx={{ lineHeight: 1 }}>
191
+ {displayBranchName}
192
+ </Typography>
193
+ )}
179
194
  </Stack>
180
195
  {shippingMethod.type === ShippingTypes.PACKETA &&
181
- shippingMethod.id === Number(shippingMethodId) &&
182
- branchId && (
196
+ shippingMethod.id === Number(shippingMethodId) && (
183
197
  <Box>
184
198
  <Button
185
199
  onClick={handleChangeBranch}
186
200
  variant="outlined"
187
201
  size="small"
202
+ sx={{ px: 1, whiteSpace: 'nowrap' }}
188
203
  >
189
- {t('change')}
204
+ {t('event.tickets.shipping.choose_address')}
190
205
  </Button>
191
206
  </Box>
192
207
  )}