@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
@@ -1,8 +0,0 @@
1
- import { IShoppingCart, ICalculateShoppingCartDto } from '@utils/types/shopping-cart.type';
2
- export default function useShoppingCart(body: ICalculateShoppingCartDto): {
3
- data: IShoppingCart | undefined;
4
- error: any;
5
- isValidating: boolean;
6
- mutate: import("swr").KeyedMutator<IShoppingCart>;
7
- isLoading: boolean;
8
- };
@@ -1,29 +0,0 @@
1
- import React from 'react';
2
- import { Grid } from '@mui/material';
3
- import ProductCard from '@form/product/ProductCard';
4
- import { IEventProduct } from '@utils/types/event-product.type';
5
- import CustomSkeleton from '@components/CustomSkeleton';
6
-
7
- interface Props {
8
- eventProducts: IEventProduct[];
9
- eventId: number;
10
- isLoading?: boolean;
11
- }
12
-
13
- const MerchandiseSelection: React.FC<Props> = ({ eventProducts, eventId, isLoading }) => (
14
- <Grid container spacing={3}>
15
- {isLoading
16
- ? [...Array(3)].map((item) => (
17
- <Grid key={item} item xs={12} md={4}>
18
- <CustomSkeleton height={334} />
19
- </Grid>
20
- ))
21
- : eventProducts.map((eventProduct) => (
22
- <Grid key={eventProduct.id} item xs={12} md={4}>
23
- <ProductCard eventProduct={eventProduct} eventId={eventId} isOnlyMerchandise />
24
- </Grid>
25
- ))}
26
- </Grid>
27
- );
28
-
29
- export default MerchandiseSelection;
@@ -1,230 +0,0 @@
1
- import React, { useCallback, useState } from 'react';
2
- import { Box, Button, IconButton, Stack, Typography } from '@mui/material';
3
- import { Iconify } from '@components/iconify';
4
- import ProductVariantsDialog from '@form/product/ProductVariantsDialog';
5
- import { IReleaseShort } from '@utils/types/release.type';
6
- import { ITicketForm, ITicketFormTicket } from '@utils/types/ticket.type';
7
- import { useFormContext, useWatch } from 'react-hook-form';
8
- import { IEventProductForm } from '@utils/types/product.type';
9
- import { fCurrency } from '@utils/formatNumber';
10
- import { Currencies } from '@utils/data/currency';
11
- import { getSelectedQuantityByVariant } from '@utils/product';
12
- import ReleaseExtraFields from '@form/extra-field/ReleaseExtraFields';
13
- import useGlobal from '@hooks/useGlobal.ts';
14
-
15
- interface Props {
16
- eventId: number;
17
- release: IReleaseShort;
18
- activeReleases: IReleaseShort[];
19
- currency: Currencies;
20
- index: number;
21
- }
22
-
23
- const ReleaseWithMerchandise: React.FC<Props> = ({
24
- eventId,
25
- release,
26
- activeReleases,
27
- currency,
28
- index,
29
- }) => {
30
- const { t, lang } = useGlobal();
31
- const [openVariantDialog, setOpenVariantDialog] = useState<'add' | 'increase' | null>(null);
32
- const { setValue } = useFormContext<ITicketForm>();
33
- const tickets: ITicketFormTicket[] = useWatch({ name: `tickets.${eventId}`, defaultValue: [] });
34
- const products: IEventProductForm[] = useWatch({ name: `products.${eventId}`, defaultValue: [] });
35
- const addedRelease = tickets.find((ticket) => ticket.releaseId === release.id);
36
- const countTickets = addedRelease?.quantity || 0;
37
-
38
- const isReleaseSelected = (id: number) => !!tickets.find((ticket) => ticket.releaseId === id);
39
-
40
- const getSelectedQuantity = (id: number) =>
41
- tickets.find((ticket) => ticket.releaseId === id)?.quantity || 0;
42
-
43
- const getAvailableTicketsForRelease = (release: ITicketFormTicket): number => {
44
- const selectedRelease = activeReleases?.find((item) => item.id === release.releaseId);
45
- const availableQuantity = selectedRelease ? selectedRelease.availableTickets : 0;
46
- return availableQuantity > 10 ? 10 : availableQuantity;
47
- };
48
-
49
- const isMaxQuantity = (releaseId: number) => {
50
- const release = tickets.find((ticket) => ticket.releaseId === releaseId);
51
- if (!release) return false;
52
- return getSelectedQuantity(releaseId) >= getAvailableTicketsForRelease(release);
53
- };
54
-
55
- const addRelease = (product?: IEventProductForm) => {
56
- setValue(`tickets.${eventId}`, [
57
- ...tickets,
58
- {
59
- releaseId: release.id,
60
- quantity: 1,
61
- itemName: '',
62
- price: 0,
63
- products: product ? [product] : [],
64
- extraFields: release.extraFields?.length
65
- ? [
66
- release.extraFields.map((field) => ({
67
- eventExtraFieldId: field.id,
68
- value: '',
69
- })),
70
- ]
71
- : [],
72
- },
73
- ]);
74
- setOpenVariantDialog(null);
75
- };
76
-
77
- const increaseQuantity = (product?: IEventProductForm) => {
78
- const addedRelease = tickets.find((ticket) => ticket.releaseId === release.id);
79
- if (addedRelease) {
80
- const newQuantity = Number(addedRelease.quantity) + 1;
81
- const maxQuantity = getAvailableTicketsForRelease(addedRelease);
82
- setValue(
83
- `tickets.${eventId}`,
84
- tickets.map((ticket) =>
85
- ticket.releaseId === release.id
86
- ? {
87
- ...ticket,
88
- quantity: newQuantity > maxQuantity ? maxQuantity : newQuantity,
89
- products: product ? [...ticket.products, product] : ticket.products,
90
- extraFields: release.extraFields?.length
91
- ? [
92
- ...ticket.extraFields,
93
- release.extraFields.map((field) => ({
94
- eventExtraFieldId: field.id,
95
- value: '',
96
- })),
97
- ]
98
- : [],
99
- }
100
- : ticket
101
- )
102
- );
103
- setOpenVariantDialog(null);
104
- }
105
- };
106
-
107
- const decreaseQuantity = useCallback(() => {
108
- const addedRelease = tickets.find((ticket) => ticket.releaseId === release.id);
109
- if (addedRelease) {
110
- const newQuantity = Number(addedRelease.quantity) - 1;
111
- if (newQuantity < 1) {
112
- setValue(
113
- `tickets.${eventId}`,
114
- tickets.filter((ticket) => ticket.releaseId !== release.id)
115
- );
116
- } else {
117
- setValue(
118
- `tickets.${eventId}`,
119
- tickets.map((ticket) => {
120
- if (ticket.releaseId !== release.id) return ticket;
121
-
122
- return {
123
- ...ticket,
124
- quantity: newQuantity,
125
- products: ticket?.products?.slice(0, -1), // non-mutating "pop"
126
- extraFields: ticket?.extraFields?.slice(0, -1),
127
- };
128
- })
129
- );
130
- }
131
- }
132
- }, [tickets, release.id, setValue]);
133
-
134
- return (
135
- <Box>
136
- <Stack direction="row" spacing={1}>
137
- <Stack
138
- direction="row"
139
- spacing={1}
140
- justifyContent="space-between"
141
- alignItems="center"
142
- sx={{ width: '100%', backgroundColor: 'grey.200', p: 1, pl: 1.5, borderRadius: 1 }}
143
- >
144
- <Stack direction="row" spacing={2} alignItems="center">
145
- <Stack direction="row" spacing={0.5} alignItems="center">
146
- <Iconify
147
- icon="ion:ticket-outline"
148
- color="primary.main"
149
- sx={{ width: 24, height: 24 }}
150
- />
151
- {release.product && (
152
- <>
153
- <Typography fontSize={20} lineHeight={1}>
154
- +
155
- </Typography>
156
- <Iconify
157
- icon="lucide-lab:shirt-t"
158
- color="primary.main"
159
- sx={{ width: 24, height: 24 }}
160
- />
161
- </>
162
- )}
163
- </Stack>
164
- <Typography color="grey.500">
165
- {release.releaseCategoryName} - {release.name} -{' '}
166
- {fCurrency(release.price, lang, currency)}
167
- </Typography>
168
- </Stack>
169
- {isReleaseSelected(release.id) ? (
170
- <Stack direction="row" spacing={1} py={0.5}>
171
- <IconButton onClick={() => decreaseQuantity()} size="small" color="primary">
172
- <Iconify icon="eva:minus-fill" />
173
- </IconButton>
174
- <Typography color="grey.500">{getSelectedQuantity(release.id)}</Typography>
175
- <IconButton
176
- onClick={() =>
177
- release.product ? setOpenVariantDialog('increase') : increaseQuantity()
178
- }
179
- size="small"
180
- color="primary"
181
- disabled={isMaxQuantity(release.id)}
182
- >
183
- <Iconify icon="eva:plus-fill" />
184
- </IconButton>
185
- </Stack>
186
- ) : (
187
- <Button
188
- onClick={() =>
189
- !release.locked && (release.product ? setOpenVariantDialog('add') : addRelease())
190
- }
191
- variant="contained"
192
- disabled={release.locked}
193
- >
194
- {t('add')}
195
- </Button>
196
- )}
197
- </Stack>
198
- </Stack>
199
- <Typography
200
- variant="caption"
201
- content="div"
202
- mt={2}
203
- mb={release.extraFields?.length ? 2 : 0}
204
- display="block"
205
- >
206
- {release.description}
207
- </Typography>
208
- {release.extraFields && release.extraFields.length > 0 && (
209
- <ReleaseExtraFields
210
- release={release}
211
- eventId={eventId}
212
- releaseIndex={index}
213
- quantity={countTickets}
214
- />
215
- )}
216
- {release.product && (
217
- <ProductVariantsDialog
218
- eventProduct={release.product}
219
- openDialog={!!openVariantDialog}
220
- callback={openVariantDialog === 'increase' ? increaseQuantity : addRelease}
221
- onClose={() => setOpenVariantDialog(null)}
222
- selectedQuantityByVariant={getSelectedQuantityByVariant(products, tickets)}
223
- eventId={eventId}
224
- />
225
- )}
226
- </Box>
227
- );
228
- };
229
-
230
- export default ReleaseWithMerchandise;
@@ -1,284 +0,0 @@
1
- import React, { useEffect, useState } from 'react';
2
- import { useFormContext, useWatch } from 'react-hook-form';
3
- import {
4
- Box,
5
- Divider,
6
- Grid,
7
- IconButton,
8
- MenuItem,
9
- Skeleton,
10
- Stack,
11
- Typography,
12
- } from '@mui/material';
13
- import { RHFSelect } from '@components/hook-form';
14
- import { ITicketForm, ITicketFormTicket } from '@utils/types/ticket.type';
15
- import useEventActiveReleases from '@hooks/data/useEventActiveReleases';
16
- import { fCurrency } from '@utils/formatNumber';
17
- import { Iconify } from '@components/iconify';
18
- import { groupBy } from '@utils/global';
19
- import { IReleaseShort } from '@utils/types/release.type';
20
- import FeeBox from '@form/payment/FeeBox';
21
- import { IEvent } from '@utils/types/event.type';
22
- import useResponsive from '@hooks/useResponsive';
23
- import ReleaseExtraFields from '@form/extra-field/ReleaseExtraFields';
24
- import { EventType } from '@utils/data/event';
25
- import useGlobal from '@hooks/useGlobal.ts';
26
-
27
- interface Props {
28
- event: IEvent;
29
- }
30
-
31
- const TicketSelection: React.FC<Props> = ({ event }) => {
32
- const { t, lang } = useGlobal();
33
- const isMobile = useResponsive('down', 'md');
34
- const { setValue, watch } = useFormContext<ITicketForm>();
35
- const tickets = useWatch({
36
- name: `tickets.${event.id}`,
37
- defaultValue: [],
38
- }) as ITicketFormTicket[];
39
- const eventTimeslotId = watch('eventTimeslotId');
40
- const [soldOutReleaseCategoryNames, setSoldOutReleaseCategoryNames] = useState<string[]>([]);
41
- const { data: activeReleases, mutate } = useEventActiveReleases(
42
- event.id,
43
- false,
44
- event.type === EventType.RECURRING ? eventTimeslotId : undefined
45
- );
46
-
47
- const showLoading = !activeReleases && event.type !== EventType.RECURRING;
48
-
49
- useEffect(() => {
50
- selectedTickets();
51
- }, [tickets]);
52
-
53
- const isReleaseSelected = (id: number) => !!tickets.find((ticket) => ticket.releaseId === id);
54
-
55
- const getRelease = (releaseId: number) => {
56
- const release = activeReleases?.find((activeRelease) => activeRelease.id === releaseId);
57
- return release ? release : null;
58
- };
59
-
60
- const getExtraFields = (releaseId: number | '', index: number) => {
61
- if (!releaseId) return null;
62
-
63
- const release = getRelease(releaseId);
64
-
65
- if (!release || !release?.extraFields || release?.extraFields.length <= 0) return null;
66
-
67
- const addedRelease = tickets.find((ticket) => ticket.releaseId === release.id);
68
- const countTickets = addedRelease?.quantity || 0;
69
- return (
70
- <ReleaseExtraFields
71
- release={release}
72
- eventId={event.id}
73
- releaseIndex={index}
74
- quantity={countTickets}
75
- />
76
- );
77
- };
78
-
79
- const getAvailableTicketsForRelease = (release: ITicketFormTicket): number => {
80
- const selectedRelease = activeReleases?.find((item) => item.id === release.releaseId);
81
- const availableQuantity = selectedRelease ? selectedRelease.availableTickets : 0;
82
- return availableQuantity > 10 ? 10 : availableQuantity;
83
- };
84
-
85
- const countReleaseCategories = (): number => {
86
- const grouped = groupBy(activeReleases || [], 'releaseCategoryName');
87
- return Object.keys(grouped).length;
88
- };
89
-
90
- const selectedReleaseIsSoldOut = (releases: IReleaseShort[] | undefined) => {
91
- const lockedSelectedReleases: boolean[] | undefined = releases?.map((item, index) => {
92
- const nextRelease = releases?.find(
93
- (item2) =>
94
- item2.releaseCategoryName === item.releaseCategoryName && item2.order === item.order++
95
- );
96
- const selected = tickets.find((ticket) => ticket.releaseId === item.id);
97
- return !!nextRelease && item.locked && !!selected && index + 1 == tickets.length;
98
- });
99
- return lockedSelectedReleases && lockedSelectedReleases.includes(true);
100
- };
101
-
102
- const countUnlockedReleases = () => activeReleases?.filter((item) => !item.locked).length || 0;
103
-
104
- const countSelectedTickets = () => {
105
- let count = 0;
106
- for (const ticket of tickets) {
107
- count += +ticket.quantity;
108
- }
109
-
110
- return count;
111
- };
112
-
113
- const isQuantityDisabled = (value: number, releaseId: number | '') => {
114
- const releaseSelected = tickets.find((item) => item.releaseId === releaseId);
115
- return releaseSelected && releaseSelected.quantity
116
- ? countSelectedTickets() + value - releaseSelected.quantity > 10
117
- : countSelectedTickets() + value > 10;
118
- };
119
-
120
- const removeTicket = (indexToRemove: number) => {
121
- const activeReleases = tickets.filter((_ticket, index) => index !== indexToRemove);
122
- setValue(`tickets.${event.id}`, activeReleases);
123
- };
124
-
125
- const selectedTickets = async () => {
126
- const releases = await mutate();
127
- const allFilled = tickets.filter((item) => !item.releaseId || !item.quantity);
128
-
129
- const soldOutReleaseCategories = activeReleases?.filter((release) =>
130
- tickets.find(
131
- (ticket) =>
132
- release.id === ticket.releaseId &&
133
- ticket.quantity === release.availableTickets &&
134
- release.availableTickets !== 10
135
- )
136
- );
137
- setSoldOutReleaseCategoryNames(
138
- soldOutReleaseCategories?.map((item) => item.releaseCategoryName) || []
139
- );
140
-
141
- if (
142
- (soldOutReleaseCategories &&
143
- selectedReleaseIsSoldOut(releases) &&
144
- tickets.length < soldOutReleaseCategories.length + countUnlockedReleases() &&
145
- !allFilled.length) ||
146
- (activeReleases &&
147
- soldOutReleaseCategories?.length &&
148
- activeReleases?.length > tickets.length &&
149
- tickets.length < soldOutReleaseCategories.length + countUnlockedReleases() &&
150
- !allFilled.length) ||
151
- (tickets.length < countReleaseCategories() && !allFilled.length)
152
- ) {
153
- setValue(`tickets.${event.id}`, [
154
- ...tickets,
155
- {
156
- releaseId: '',
157
- quantity: '',
158
- itemName: '',
159
- price: 0,
160
- products: [],
161
- extraFields: [],
162
- },
163
- ]);
164
- }
165
- };
166
-
167
- return (
168
- <Stack spacing={3} direction="column" divider={<Divider sx={{ borderStyle: 'dashed' }} />}>
169
- {tickets.map((item, index) => (
170
- <Box key={index}>
171
- <Grid container spacing={3}>
172
- <Grid item xs={12} md={6}>
173
- {showLoading ? (
174
- <Skeleton
175
- variant="rounded"
176
- sx={{
177
- width: '100%',
178
- height: (theme) => theme.spacing(7.5),
179
- }}
180
- />
181
- ) : (
182
- <RHFSelect
183
- name={`tickets.${event.id}.${index}.releaseId`}
184
- value={item.releaseId}
185
- label={
186
- index > 0
187
- ? t('form.labels.add_another_release')
188
- : t('form.labels.release_category_price')
189
- }
190
- maxHeight="calc(100vh - 2rem)"
191
- onChange={(e) => {
192
- setValue(`tickets.${event.id}.${index}.releaseId`, Number(e.target.value));
193
- setValue(`tickets.${event.id}.${index}.extraFields`, []);
194
- }}
195
- >
196
- <MenuItem key={0} value="">
197
- {t('choose')}
198
- </MenuItem>
199
- {activeReleases?.map((activeRelease) => (
200
- <MenuItem
201
- key={activeRelease.id}
202
- value={activeRelease.id}
203
- disabled={
204
- isReleaseSelected(activeRelease.id) ||
205
- (activeRelease.locked &&
206
- !soldOutReleaseCategoryNames.includes(activeRelease.releaseCategoryName))
207
- }
208
- >
209
- {activeRelease.releaseCategoryName} - {activeRelease.name}:{' '}
210
- {activeRelease.price === 0
211
- ? t('free')
212
- : fCurrency(activeRelease.price, lang, event.currency)}
213
- </MenuItem>
214
- ))}
215
- </RHFSelect>
216
- )}
217
- </Grid>
218
- <Grid key={index} item xs={12} md={6}>
219
- {showLoading ? (
220
- <Skeleton
221
- variant="rounded"
222
- sx={{
223
- width: '100%',
224
- height: (theme) => theme.spacing(7.5),
225
- }}
226
- />
227
- ) : (
228
- <Stack direction="row" alignItems="center" spacing={1}>
229
- <RHFSelect
230
- name={`tickets.${event.id}.${index}.quantity`}
231
- value={item.quantity}
232
- label={t('form.labels.quantity')}
233
- >
234
- {[...Array(getAvailableTicketsForRelease(item))].map((_, index2) => (
235
- <MenuItem
236
- key={index2}
237
- value={index2 + 1}
238
- disabled={isQuantityDisabled(index2 + 1, item.releaseId)}
239
- >
240
- {index2 + 1}
241
- </MenuItem>
242
- ))}
243
- {!item.releaseId && (
244
- <MenuItem disabled sx={{ textTransform: 'unset!important' }}>
245
- {t('event.tickets.stepper.1.quantity_select')}
246
- </MenuItem>
247
- )}
248
- </RHFSelect>
249
- {item.releaseId && item.quantity && (
250
- <Box>
251
- <IconButton color="primary" onClick={() => removeTicket(index)}>
252
- <Iconify icon="carbon:trash-can" />
253
- </IconButton>
254
- </Box>
255
- )}
256
- </Stack>
257
- )}
258
- </Grid>
259
- </Grid>
260
- {activeReleases && item.releaseId && (
261
- <Typography
262
- variant="caption"
263
- content="div"
264
- mt={2}
265
- mb={getRelease(item.releaseId)?.extraFields?.length ? 2 : 0}
266
- display="block"
267
- >
268
- {getRelease(item.releaseId)?.description ?? ''}
269
- </Typography>
270
- )}
271
- {getExtraFields(item.releaseId, index)}
272
- </Box>
273
- ))}
274
- <Box>
275
- <Typography variant="caption" component="div" fontStyle="italic" mb={2}>
276
- *{t('event.tickets.stepper.1.max_ticket_quantity')}
277
- </Typography>
278
- {isMobile && <FeeBox event={event} align="right" />}
279
- </Box>
280
- </Stack>
281
- );
282
- };
283
-
284
- export default TicketSelection;
@@ -1,131 +0,0 @@
1
- import React, { useEffect, useMemo, useRef } from 'react';
2
- import { useFormContext, useWatch } from 'react-hook-form';
3
- import { Box, Divider, Skeleton, Stack, Typography } from '@mui/material';
4
- import { ITicketForm, ITicketFormTicket } from '@utils/types/ticket.type';
5
- import useEventActiveReleases from '@hooks/data/useEventActiveReleases';
6
- import { groupBy } from '@utils/global';
7
- import { IReleaseShort } from '@utils/types/release.type';
8
- import FeeBox from '@form/payment/FeeBox';
9
- import { IEvent } from '@utils/types/event.type';
10
- import useResponsive from '@hooks/useResponsive';
11
- import ReleaseWithMerchandise from '@form/ReleaseWithMerchandise';
12
- import { EventType } from '@utils/data/event';
13
- import useGlobal from '@hooks/useGlobal.ts';
14
-
15
- interface Props {
16
- event: IEvent;
17
- }
18
-
19
- const TicketWithMerchandiseSelection: React.FC<Props> = ({ event }) => {
20
- const { t } = useGlobal();
21
- const isMobile = useResponsive('down', 'md');
22
- const { setValue, watch } = useFormContext<ITicketForm>();
23
- const tickets: ITicketFormTicket[] = useWatch({ name: `tickets.${event.id}`, defaultValue: [] });
24
- const eventTimeslotId = watch('eventTimeslotId');
25
- const { data: activeReleases, mutate } = useEventActiveReleases(
26
- event.id,
27
- false,
28
- event.type === EventType.RECURRING ? eventTimeslotId : undefined
29
- );
30
-
31
- useEffect(() => {
32
- selectedTickets();
33
- }, [tickets]);
34
-
35
- const countReleaseCategories = (): number => {
36
- const grouped = groupBy(activeReleases || [], 'releaseCategoryName');
37
- return Object.keys(grouped).length;
38
- };
39
-
40
- const selectedReleaseIsSoldOut = (releases: IReleaseShort[] | undefined) => {
41
- const lockedSelectedReleases: boolean[] | undefined = releases?.map((item, index) => {
42
- const nextRelease = releases?.find(
43
- (item2) =>
44
- item2.releaseCategoryName === item.releaseCategoryName && item2.order === item.order++
45
- );
46
- const selected = tickets.find((ticket) => ticket.releaseId === item.id);
47
- return !!nextRelease && item.locked && !!selected && index + 1 == tickets.length;
48
- });
49
- return lockedSelectedReleases && lockedSelectedReleases.includes(true);
50
- };
51
-
52
- const countUnlockedReleases = () => activeReleases?.filter((item) => !item.locked).length || 0;
53
-
54
- const selectedTickets = async () => {
55
- const releases = await mutate();
56
- const allFilled = tickets.filter((item) => !item.releaseId || !item.quantity);
57
-
58
- const soldOutReleaseCategories = activeReleases?.filter((release) =>
59
- tickets.find(
60
- (ticket) =>
61
- release.id === ticket.releaseId &&
62
- ticket.quantity === release.availableTickets &&
63
- release.availableTickets !== 10
64
- )
65
- );
66
-
67
- if (
68
- (soldOutReleaseCategories &&
69
- selectedReleaseIsSoldOut(releases) &&
70
- tickets.length < soldOutReleaseCategories.length + countUnlockedReleases() &&
71
- !allFilled.length) ||
72
- (activeReleases &&
73
- soldOutReleaseCategories?.length &&
74
- activeReleases?.length > tickets.length &&
75
- tickets.length < soldOutReleaseCategories.length + countUnlockedReleases() &&
76
- !allFilled.length) ||
77
- (tickets.length < countReleaseCategories() && !allFilled.length)
78
- ) {
79
- setValue(`tickets.${event.id}`, [
80
- ...tickets,
81
- {
82
- releaseId: '',
83
- quantity: '',
84
- itemName: '',
85
- price: 0,
86
- products: [],
87
- extraFields: [],
88
- },
89
- ]);
90
- }
91
- };
92
-
93
- return (
94
- <Stack spacing={3} direction="column" divider={<Divider sx={{ borderStyle: 'dashed' }} />}>
95
- {!activeReleases && event.type !== EventType.RECURRING ? (
96
- <Skeleton
97
- variant="rounded"
98
- sx={{
99
- width: '100%',
100
- height: (theme) => theme.spacing(7.5),
101
- }}
102
- />
103
- ) : (
104
- activeReleases?.map((release, index) => (
105
- <ReleaseWithMerchandise
106
- key={release.id}
107
- eventId={event.id}
108
- release={release}
109
- activeReleases={activeReleases}
110
- currency={event.currency}
111
- index={index}
112
- />
113
- ))
114
- )}
115
- {!activeReleases && event.type === EventType.RECURRING && (
116
- <Typography variant="h5">{t('event.tickets.stepper.1.select_timeslot')}</Typography>
117
- )}
118
- {!!activeReleases && !activeReleases.length && (
119
- <Typography variant="h5">{t('event.tickets.stepper.1.no_tickets')}</Typography>
120
- )}
121
- <Box>
122
- <Typography variant="caption" component="div" fontStyle="italic" mb={2}>
123
- *{t('event.tickets.stepper.1.max_ticket_quantity')}
124
- </Typography>
125
- {isMobile && <FeeBox event={event} align="right" />}
126
- </Box>
127
- </Stack>
128
- );
129
- };
130
-
131
- export default TicketWithMerchandiseSelection;