@eventlook/sdk 1.4.46-beta.6 → 1.4.46

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 (228) hide show
  1. package/.claude/settings.local.json +9 -0
  2. package/dist/cjs/components/Image.js +29 -14
  3. package/dist/cjs/components/Image.js.map +1 -1
  4. package/dist/cjs/components/hook-form/FormProvider.js +2 -2
  5. package/dist/cjs/components/hook-form/FormProvider.js.map +1 -1
  6. package/dist/cjs/form/ChildEventDialog.js +3 -3
  7. package/dist/cjs/form/ChildEventDialog.js.map +1 -1
  8. package/dist/cjs/form/ContactPerson.js +1 -1
  9. package/dist/cjs/form/ContactPerson.js.map +1 -1
  10. package/dist/cjs/form/Payment.js +2 -2
  11. package/dist/cjs/form/Payment.js.map +1 -1
  12. package/dist/cjs/form/PaymentOverviewBox.js +23 -15
  13. package/dist/cjs/form/PaymentOverviewBox.js.map +1 -1
  14. package/dist/cjs/form/PaymentPending.js +4 -1
  15. package/dist/cjs/form/PaymentPending.js.map +1 -1
  16. package/dist/cjs/form/ReleaseWithMerchandise.js +48 -57
  17. package/dist/cjs/form/ReleaseWithMerchandise.js.map +1 -1
  18. package/dist/cjs/form/TicketForm.js +18 -36
  19. package/dist/cjs/form/TicketForm.js.map +1 -1
  20. package/dist/cjs/form/TicketSelection.js +6 -5
  21. package/dist/cjs/form/TicketSelection.js.map +1 -1
  22. package/dist/cjs/form/TicketWithMerchandiseSelection.js +5 -3
  23. package/dist/cjs/form/TicketWithMerchandiseSelection.js.map +1 -1
  24. package/dist/cjs/form/index.js +1 -1
  25. package/dist/cjs/form/index.js.map +1 -1
  26. package/dist/cjs/form/payment/FeeBox.js +4 -1
  27. package/dist/cjs/form/payment/FeeBox.js.map +1 -1
  28. package/dist/cjs/form/payment/PaymentOverviewCheckbox.js +27 -17
  29. package/dist/cjs/form/payment/PaymentOverviewCheckbox.js.map +1 -1
  30. package/dist/cjs/form/product/ProductCard.js +34 -49
  31. package/dist/cjs/form/product/ProductCard.js.map +1 -1
  32. package/dist/cjs/form/product/ProductVariantsDialog.js +94 -118
  33. package/dist/cjs/form/product/ProductVariantsDialog.js.map +1 -1
  34. package/dist/cjs/locales/cs.js +1 -16
  35. package/dist/cjs/locales/cs.js.map +1 -1
  36. package/dist/cjs/locales/en.js +1 -16
  37. package/dist/cjs/locales/en.js.map +1 -1
  38. package/dist/cjs/locales/es.js +0 -15
  39. package/dist/cjs/locales/es.js.map +1 -1
  40. package/dist/cjs/locales/pl.js +0 -15
  41. package/dist/cjs/locales/pl.js.map +1 -1
  42. package/dist/cjs/locales/sk.js +0 -15
  43. package/dist/cjs/locales/sk.js.map +1 -1
  44. package/dist/cjs/locales/uk.js +0 -15
  45. package/dist/cjs/locales/uk.js.map +1 -1
  46. package/dist/cjs/utils/data/global.js +0 -2
  47. package/dist/cjs/utils/data/global.js.map +1 -1
  48. package/dist/esm/components/Image.js +30 -15
  49. package/dist/esm/components/Image.js.map +1 -1
  50. package/dist/esm/components/hook-form/FormProvider.js +2 -2
  51. package/dist/esm/components/hook-form/FormProvider.js.map +1 -1
  52. package/dist/esm/form/ChildEventDialog.js +3 -3
  53. package/dist/esm/form/ChildEventDialog.js.map +1 -1
  54. package/dist/esm/form/ContactPerson.js +1 -1
  55. package/dist/esm/form/ContactPerson.js.map +1 -1
  56. package/dist/esm/form/Payment.js +2 -2
  57. package/dist/esm/form/Payment.js.map +1 -1
  58. package/dist/esm/form/PaymentOverviewBox.js +23 -15
  59. package/dist/esm/form/PaymentOverviewBox.js.map +1 -1
  60. package/dist/esm/form/PaymentPending.js +4 -1
  61. package/dist/esm/form/PaymentPending.js.map +1 -1
  62. package/dist/esm/form/ReleaseWithMerchandise.js +49 -58
  63. package/dist/esm/form/ReleaseWithMerchandise.js.map +1 -1
  64. package/dist/esm/form/TicketForm.js +20 -38
  65. package/dist/esm/form/TicketForm.js.map +1 -1
  66. package/dist/esm/form/TicketSelection.js +6 -5
  67. package/dist/esm/form/TicketSelection.js.map +1 -1
  68. package/dist/esm/form/TicketWithMerchandiseSelection.js +6 -4
  69. package/dist/esm/form/TicketWithMerchandiseSelection.js.map +1 -1
  70. package/dist/esm/form/index.js +1 -1
  71. package/dist/esm/form/index.js.map +1 -1
  72. package/dist/esm/form/payment/FeeBox.js +4 -1
  73. package/dist/esm/form/payment/FeeBox.js.map +1 -1
  74. package/dist/esm/form/payment/PaymentOverviewCheckbox.js +29 -19
  75. package/dist/esm/form/payment/PaymentOverviewCheckbox.js.map +1 -1
  76. package/dist/esm/form/product/ProductCard.js +35 -50
  77. package/dist/esm/form/product/ProductCard.js.map +1 -1
  78. package/dist/esm/form/product/ProductVariantsDialog.js +95 -119
  79. package/dist/esm/form/product/ProductVariantsDialog.js.map +1 -1
  80. package/dist/esm/locales/cs.js +1 -16
  81. package/dist/esm/locales/cs.js.map +1 -1
  82. package/dist/esm/locales/en.js +1 -16
  83. package/dist/esm/locales/en.js.map +1 -1
  84. package/dist/esm/locales/es.js +0 -15
  85. package/dist/esm/locales/es.js.map +1 -1
  86. package/dist/esm/locales/pl.js +0 -15
  87. package/dist/esm/locales/pl.js.map +1 -1
  88. package/dist/esm/locales/sk.js +0 -15
  89. package/dist/esm/locales/sk.js.map +1 -1
  90. package/dist/esm/locales/uk.js +0 -15
  91. package/dist/esm/locales/uk.js.map +1 -1
  92. package/dist/esm/utils/data/global.js +1 -2
  93. package/dist/esm/utils/data/global.js.map +1 -1
  94. package/dist/types/components/Image.d.ts +4 -4
  95. package/dist/types/form/style.d.ts +1 -1
  96. package/package.json +2 -8
  97. package/rollup.config.mjs +0 -2
  98. package/src/components/Image.tsx +48 -27
  99. package/src/components/hook-form/FormProvider.tsx +2 -5
  100. package/src/form/ChildEventDialog.tsx +3 -3
  101. package/src/form/ContactPerson.tsx +1 -1
  102. package/src/form/MerchandiseSelection.tsx +29 -0
  103. package/src/form/Payment.tsx +2 -2
  104. package/src/form/PaymentOverviewBox.tsx +72 -40
  105. package/src/form/PaymentPending.tsx +1 -1
  106. package/src/form/ReleaseWithMerchandise.tsx +230 -0
  107. package/src/form/TicketForm.tsx +18 -56
  108. package/src/form/{tickets/TicketSelection.tsx → TicketSelection.tsx} +109 -17
  109. package/src/form/{tickets/TicketSelectionMap.tsx → TicketSelectionMap.tsx} +1 -9
  110. package/src/form/{tickets/TicketWithMerchandiseSelection.tsx → TicketWithMerchandiseSelection.tsx} +7 -3
  111. package/src/form/index.tsx +1 -3
  112. package/src/form/payment/FeeBox.tsx +10 -0
  113. package/src/form/payment/PaymentOverviewCheckbox.tsx +56 -33
  114. package/src/form/product/ProductCard.tsx +52 -67
  115. package/src/form/product/ProductVariantsDialog.tsx +137 -195
  116. package/src/locales/cs.tsx +1 -16
  117. package/src/locales/en.tsx +1 -16
  118. package/src/locales/es.tsx +0 -15
  119. package/src/locales/pl.tsx +0 -15
  120. package/src/locales/sk.tsx +0 -15
  121. package/src/locales/uk.tsx +0 -15
  122. package/src/utils/data/global.ts +0 -1
  123. package/tsconfig.json +1 -2
  124. package/.env.example +0 -1
  125. package/dist/cjs/_virtual/_commonjsHelpers.js +0 -8
  126. package/dist/cjs/_virtual/_commonjsHelpers.js.map +0 -1
  127. package/dist/cjs/_virtual/index.js +0 -6
  128. package/dist/cjs/_virtual/index.js.map +0 -1
  129. package/dist/cjs/_virtual/index2.js +0 -6
  130. package/dist/cjs/_virtual/index2.js.map +0 -1
  131. package/dist/cjs/_virtual/index3.js +0 -6
  132. package/dist/cjs/_virtual/index3.js.map +0 -1
  133. package/dist/cjs/_virtual/react-is.development.js +0 -6
  134. package/dist/cjs/_virtual/react-is.development.js.map +0 -1
  135. package/dist/cjs/_virtual/react-is.development2.js +0 -6
  136. package/dist/cjs/_virtual/react-is.development2.js.map +0 -1
  137. package/dist/cjs/_virtual/react-is.production.js +0 -6
  138. package/dist/cjs/_virtual/react-is.production.js.map +0 -1
  139. package/dist/cjs/_virtual/react-is.production.min.js +0 -6
  140. package/dist/cjs/_virtual/react-is.production.min.js.map +0 -1
  141. package/dist/cjs/form/PaymentOverviewDrawer.js +0 -114
  142. package/dist/cjs/form/PaymentOverviewDrawer.js.map +0 -1
  143. package/dist/cjs/form/TicketQuantityControl.js +0 -51
  144. package/dist/cjs/form/TicketQuantityControl.js.map +0 -1
  145. package/dist/cjs/form/TicketSelectionMobile.js +0 -98
  146. package/dist/cjs/form/TicketSelectionMobile.js.map +0 -1
  147. package/dist/cjs/form/merchandise/MerchandiseSelection.js +0 -14
  148. package/dist/cjs/form/merchandise/MerchandiseSelection.js.map +0 -1
  149. package/dist/cjs/form/merchandise/MerchandiseSlider.js +0 -39
  150. package/dist/cjs/form/merchandise/MerchandiseSlider.js.map +0 -1
  151. package/dist/cjs/form/merchendise/MerchandiseSelection.js +0 -19
  152. package/dist/cjs/form/merchendise/MerchandiseSelection.js.map +0 -1
  153. package/dist/cjs/form/merchendise/MerchandiseSlider.js +0 -75
  154. package/dist/cjs/form/merchendise/MerchandiseSlider.js.map +0 -1
  155. package/dist/cjs/form/services/index.js +0 -131
  156. package/dist/cjs/form/services/index.js.map +0 -1
  157. package/dist/cjs/form/tickets/ReleaseDescription.js +0 -23
  158. package/dist/cjs/form/tickets/ReleaseDescription.js.map +0 -1
  159. package/dist/cjs/form/tickets/ReleaseWithMerchandise.js +0 -139
  160. package/dist/cjs/form/tickets/ReleaseWithMerchandise.js.map +0 -1
  161. package/dist/cjs/form/tickets/TicketQuantityControl.js +0 -52
  162. package/dist/cjs/form/tickets/TicketQuantityControl.js.map +0 -1
  163. package/dist/cjs/form/tickets/TicketSelection.js +0 -134
  164. package/dist/cjs/form/tickets/TicketSelection.js.map +0 -1
  165. package/dist/cjs/form/tickets/TicketSelectionMap.js +0 -73
  166. package/dist/cjs/form/tickets/TicketSelectionMap.js.map +0 -1
  167. package/dist/cjs/form/tickets/TicketSelectionMobile.js +0 -88
  168. package/dist/cjs/form/tickets/TicketSelectionMobile.js.map +0 -1
  169. package/dist/cjs/form/tickets/TicketWithMerchandiseSelection.js +0 -117
  170. package/dist/cjs/form/tickets/TicketWithMerchandiseSelection.js.map +0 -1
  171. package/dist/esm/_virtual/_commonjsHelpers.js +0 -6
  172. package/dist/esm/_virtual/_commonjsHelpers.js.map +0 -1
  173. package/dist/esm/_virtual/index.js +0 -4
  174. package/dist/esm/_virtual/index.js.map +0 -1
  175. package/dist/esm/_virtual/index2.js +0 -4
  176. package/dist/esm/_virtual/index2.js.map +0 -1
  177. package/dist/esm/_virtual/index3.js +0 -4
  178. package/dist/esm/_virtual/index3.js.map +0 -1
  179. package/dist/esm/_virtual/react-is.development.js +0 -4
  180. package/dist/esm/_virtual/react-is.development.js.map +0 -1
  181. package/dist/esm/_virtual/react-is.development2.js +0 -4
  182. package/dist/esm/_virtual/react-is.development2.js.map +0 -1
  183. package/dist/esm/_virtual/react-is.production.js +0 -4
  184. package/dist/esm/_virtual/react-is.production.js.map +0 -1
  185. package/dist/esm/_virtual/react-is.production.min.js +0 -4
  186. package/dist/esm/_virtual/react-is.production.min.js.map +0 -1
  187. package/dist/esm/form/PaymentOverviewDrawer.js +0 -110
  188. package/dist/esm/form/PaymentOverviewDrawer.js.map +0 -1
  189. package/dist/esm/form/TicketQuantityControl.js +0 -47
  190. package/dist/esm/form/TicketQuantityControl.js.map +0 -1
  191. package/dist/esm/form/TicketSelectionMobile.js +0 -94
  192. package/dist/esm/form/TicketSelectionMobile.js.map +0 -1
  193. package/dist/esm/form/merchandise/MerchandiseSelection.js +0 -10
  194. package/dist/esm/form/merchandise/MerchandiseSelection.js.map +0 -1
  195. package/dist/esm/form/merchandise/MerchandiseSlider.js +0 -35
  196. package/dist/esm/form/merchandise/MerchandiseSlider.js.map +0 -1
  197. package/dist/esm/form/merchendise/MerchandiseSelection.js +0 -15
  198. package/dist/esm/form/merchendise/MerchandiseSelection.js.map +0 -1
  199. package/dist/esm/form/merchendise/MerchandiseSlider.js +0 -71
  200. package/dist/esm/form/merchendise/MerchandiseSlider.js.map +0 -1
  201. package/dist/esm/form/services/index.js +0 -127
  202. package/dist/esm/form/services/index.js.map +0 -1
  203. package/dist/esm/form/tickets/ReleaseDescription.js +0 -19
  204. package/dist/esm/form/tickets/ReleaseDescription.js.map +0 -1
  205. package/dist/esm/form/tickets/ReleaseWithMerchandise.js +0 -135
  206. package/dist/esm/form/tickets/ReleaseWithMerchandise.js.map +0 -1
  207. package/dist/esm/form/tickets/TicketQuantityControl.js +0 -48
  208. package/dist/esm/form/tickets/TicketQuantityControl.js.map +0 -1
  209. package/dist/esm/form/tickets/TicketSelection.js +0 -130
  210. package/dist/esm/form/tickets/TicketSelection.js.map +0 -1
  211. package/dist/esm/form/tickets/TicketSelectionMap.js +0 -69
  212. package/dist/esm/form/tickets/TicketSelectionMap.js.map +0 -1
  213. package/dist/esm/form/tickets/TicketSelectionMobile.js +0 -84
  214. package/dist/esm/form/tickets/TicketSelectionMobile.js.map +0 -1
  215. package/dist/esm/form/tickets/TicketWithMerchandiseSelection.js +0 -113
  216. package/dist/esm/form/tickets/TicketWithMerchandiseSelection.js.map +0 -1
  217. package/dist/types/form/PaymentOverviewDrawer.d.ts +0 -8
  218. package/dist/types/form/merchendise/MerchandiseSelection.d.ts +0 -9
  219. package/dist/types/form/merchendise/MerchandiseSlider.d.ts +0 -10
  220. package/dist/types/form/merchendise/MerchendiseSlider.d.ts +0 -0
  221. package/src/form/PaymentOverviewDrawer.tsx +0 -180
  222. package/src/form/merchandise/MerchandiseSelection.tsx +0 -24
  223. package/src/form/merchandise/MerchandiseSlider.tsx +0 -61
  224. package/src/form/services/index.tsx +0 -260
  225. package/src/form/tickets/ReleaseDescription.tsx +0 -46
  226. package/src/form/tickets/ReleaseWithMerchandise.tsx +0 -237
  227. package/src/form/tickets/TicketQuantityControl.tsx +0 -94
  228. package/src/form/tickets/TicketSelectionMobile.tsx +0 -175
@@ -18,7 +18,7 @@ const ContactPerson: React.FC<Props> = ({ event }) => {
18
18
  const { t, content } = useGlobal();
19
19
 
20
20
  return (
21
- <Grid container spacing={{ xs: 1, md: 2 }}>
21
+ <Grid container spacing={3}>
22
22
  <Grid item xs={12} md={6}>
23
23
  <RHFTextField name="firstName" label={t('form.labels.first_name')} />
24
24
  </Grid>
@@ -0,0 +1,29 @@
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;
@@ -286,7 +286,7 @@ const Payment: React.FC<Props> = ({ event }) => {
286
286
  src={payment.image.url}
287
287
  sx={{
288
288
  height: '20px',
289
- '& .wrapper img': {
289
+ '& img': {
290
290
  objectFit: 'contain',
291
291
  },
292
292
  }}
@@ -320,7 +320,7 @@ const Payment: React.FC<Props> = ({ event }) => {
320
320
  maxWidth: '70px',
321
321
  display: 'inline-block',
322
322
  marginRight: 1,
323
- '& .wrapper img': {
323
+ '& img': {
324
324
  objectFit: 'contain',
325
325
  objectPosition: 'left',
326
326
  },
@@ -26,7 +26,6 @@ import { ICalculateShoppingCartDto, IShoppingCartDto } from '@utils/types/shoppi
26
26
  import { PromoCodeTypes } from '@utils/data/promo-code.ts';
27
27
  import useActiveEventProducts from '@hooks/data/useActiveEventProducts';
28
28
  import useDebounce from '@hooks/useDebounce';
29
- import { EVENTLOOK_ORDER_FORM_ID } from '@utils/data/global.ts';
30
29
 
31
30
  interface Props {
32
31
  event: IEvent;
@@ -55,9 +54,9 @@ const PaymentOverviewBox: React.FC<Props> = ({ event }) => {
55
54
  totalFee,
56
55
  isPaymentVerify,
57
56
  ticketInsurance,
57
+ ticketInsurancePricePerUnit,
58
58
  smsNotification,
59
59
  smsNotificationPrice,
60
- ticketInsurancePricePerUnit,
61
60
  } = values;
62
61
  const tickets: Record<string, ITicketFormTicket[]> = useWatch({
63
62
  name: 'tickets',
@@ -447,8 +446,7 @@ const PaymentOverviewBox: React.FC<Props> = ({ event }) => {
447
446
  />
448
447
  }
449
448
  sx={{
450
- backgroundColor: (theme) =>
451
- theme.palette.mode === 'light' ? theme.palette.grey[100] : theme.palette.grey[900],
449
+ backgroundColor: (theme) => theme.palette.grey.A100,
452
450
  borderRadius: 1,
453
451
  }}
454
452
  >
@@ -477,34 +475,6 @@ const PaymentOverviewBox: React.FC<Props> = ({ event }) => {
477
475
  )}
478
476
  <Stack className="overview-card__order-info" p={2} spacing={1}>
479
477
  {!!selectedTickets.length && !isMobile && <Divider sx={{ borderStyle: 'dashed' }} />}
480
-
481
- {!!selectedTickets.length && (
482
- <>
483
- {/* TODO: Uncomment this when Colonnade response - must update terms and conditions and email info */}
484
- <PaymentOverviewCheckbox
485
- checkboxName="ticketInsurance"
486
- label={t('event.tickets.insurance.label')}
487
- value={
488
- <>
489
- {ticketInsurance && totalItemCount.totalTickets > 0 ? '' : '+ '}
490
- {fCurrency(ticketInsurancePricePerUnit, lang, event.currency)} /{' '}
491
- {t('event.tickets.insurance.per_ticket')}
492
- </>
493
- }
494
- />
495
- <PaymentOverviewCheckbox
496
- checkboxName="smsNotification"
497
- label={t('event.tickets.sms_notification.label')}
498
- value={
499
- <>
500
- {smsNotification && totalItemCount.totalTickets > 0 ? '' : '+ '}
501
- {fCurrency(smsNotificationPrice, lang, event.currency)}
502
- </>
503
- }
504
- />
505
- <Divider sx={{ borderStyle: 'dashed' }} />
506
- </>
507
- )}
508
478
  {selectedTickets.map((ticket, index) => (
509
479
  <Box key={index}>
510
480
  <Stack direction="row" justifyContent="space-between" alignItems="center" spacing={2}>
@@ -588,6 +558,22 @@ const PaymentOverviewBox: React.FC<Props> = ({ event }) => {
588
558
  </Typography>
589
559
  </Stack>
590
560
  )}
561
+ {ticketInsurance && totalItemCount.totalTickets > 0 && (
562
+ <Stack direction="row" justifyContent="space-between" alignItems="center" spacing={2}>
563
+ <Typography variant="caption">{t('form.labels.ticket_insurance')}</Typography>
564
+ <Typography variant="caption">
565
+ {fCurrency(values.ticketInsurancePrice, lang, event.currency)}
566
+ </Typography>
567
+ </Stack>
568
+ )}
569
+ {smsNotification && totalItemCount.totalTickets > 0 && (
570
+ <Stack direction="row" justifyContent="space-between" alignItems="center" spacing={2}>
571
+ <Typography variant="caption">{t('form.labels.sms_notification')}</Typography>
572
+ <Typography variant="caption">
573
+ {fCurrency(values.smsNotificationPrice, lang, event.currency)}
574
+ </Typography>
575
+ </Stack>
576
+ )}
591
577
  {!!total && !!totalFee && (
592
578
  <Stack direction="row" justifyContent="space-between" alignItems="center" spacing={2}>
593
579
  <Typography variant="caption">{t('form.labels.service_fee')}</Typography>
@@ -597,15 +583,61 @@ const PaymentOverviewBox: React.FC<Props> = ({ event }) => {
597
583
  {((!!selectedTickets.length && isMobile) || !isMobile) && (
598
584
  <Divider sx={{ borderStyle: 'dashed' }} />
599
585
  )}
586
+ {!!selectedTickets.length && (
587
+ <>
588
+ {/* TODO: Uncomment this when Colonnade response - must update terms and conditions and email info */}
589
+ {/*<PaymentOverviewCheckbox*/}
590
+ {/* checkboxName="ticketInsurance"*/}
591
+ {/* label={t('event.tickets.insurance.label')}*/}
592
+ {/* value={*/}
593
+ {/* <>*/}
594
+ {/* + {fCurrency(ticketInsurancePricePerUnit, lang, event.currency)} /{' '}*/}
595
+ {/* {t('event.tickets.insurance.per_ticket')}*/}
596
+ {/* </>*/}
597
+ {/* }*/}
598
+ {/* modal={{*/}
599
+ {/* title: t('event.tickets.insurance.label'),*/}
600
+ {/* description: (*/}
601
+ {/* <>*/}
602
+ {/* <Typography variant="body2" paragraph>*/}
603
+ {/* {t('event.tickets.insurance.modal.description')}*/}
604
+ {/* </Typography>*/}
605
+ {/* <Typography variant="body2" paragraph>*/}
606
+ {/* {t('event.tickets.insurance.modal.coverage')}*/}
607
+ {/* </Typography>*/}
608
+ {/* <Typography variant="body2" sx={{ fontWeight: 600 }}>*/}
609
+ {/* {t('event.tickets.insurance.modal.price')}:{' '}*/}
610
+ {/* {fCurrency(ticketInsurancePricePerUnit, lang, event.currency)} /{' '}*/}
611
+ {/* {t('event.tickets.insurance.per_ticket')}*/}
612
+ {/* </Typography>*/}
613
+ {/* </>*/}
614
+ {/* ),*/}
615
+ {/* }}*/}
616
+ {/*/>*/}
617
+ <PaymentOverviewCheckbox
618
+ checkboxName="smsNotification"
619
+ label={t('event.tickets.sms_notification.label')}
620
+ value={<>+ {fCurrency(smsNotificationPrice, lang, event.currency)}</>}
621
+ modal={{
622
+ title: t('event.tickets.sms_notification.label'),
623
+ description: (
624
+ <>
625
+ <Typography variant="body2" paragraph>
626
+ {t('event.tickets.sms_notification.modal.description')}
627
+ </Typography>
628
+ <Typography variant="body2" sx={{ fontWeight: 600 }}>
629
+ {t('event.tickets.sms_notification.modal.price')}:{' '}
630
+ {fCurrency(smsNotificationPrice, lang, event.currency)}
631
+ </Typography>
632
+ </>
633
+ ),
634
+ }}
635
+ />
636
+ <Divider sx={{ borderStyle: 'dashed' }} />
637
+ </>
638
+ )}
600
639
  <FeeBox event={event} />
601
- <LoadingButton
602
- type="submit"
603
- form={EVENTLOOK_ORDER_FORM_ID}
604
- variant="contained"
605
- size="large"
606
- fullWidth
607
- sx={{ height: { xs: 36, md: 40 } }}
608
- >
640
+ <LoadingButton type="submit" variant="contained" size="large" fullWidth>
609
641
  {t(isPaymentVerify ? 'verify' : 'buy')}
610
642
  </LoadingButton>
611
643
  </Stack>
@@ -17,7 +17,7 @@ const PaymentPending: React.FC = () => {
17
17
  </Typography>
18
18
  </m.div>
19
19
  <Box maxWidth={600} mx="auto">
20
- {/* <Lottie animationData={bankTransferAnimation} /> */}
20
+ <Lottie animationData={bankTransferAnimation} />
21
21
  </Box>
22
22
  </Box>
23
23
  );
@@ -0,0 +1,230 @@
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;
@@ -14,7 +14,7 @@ import {
14
14
  Typography,
15
15
  } from '@mui/material';
16
16
  import dayjs from 'dayjs';
17
- import TicketSelection from '@form/tickets/TicketSelection';
17
+ import TicketSelection from '@form/TicketSelection';
18
18
  import ContactPerson from '@form/ContactPerson';
19
19
  import Payment from '@form/Payment';
20
20
  import EmailConfirmation from '@form/EmailConfirmation';
@@ -44,8 +44,8 @@ import {
44
44
  import ReleaseCountdown from '@form/ReleaseCountdown';
45
45
  import { cloneObject } from '@utils/global';
46
46
  import PaymentPending from '@form/PaymentPending';
47
- import MerchandiseSelection from '@form/merchandise/MerchandiseSelection';
48
- import TicketWithMerchandiseSelection from '@form/tickets/TicketWithMerchandiseSelection';
47
+ import MerchandiseSelection from '@form/MerchandiseSelection';
48
+ import TicketWithMerchandiseSelection from '@form/TicketWithMerchandiseSelection';
49
49
  import useActiveEventProducts from '@hooks/data/useActiveEventProducts';
50
50
  import Shipping from '@form/Shipping';
51
51
  import useErrors from '@hooks/useErrors';
@@ -53,12 +53,9 @@ import { EventType } from '@utils/data/event';
53
53
  import TimeslotSelection from '@form/TimeslotSelection';
54
54
  import useGlobal from '@hooks/useGlobal';
55
55
  import { Trans } from '@components/Trans';
56
- import { EVENTLOOK_ORDER_FORM_ID, EVENTLOOK_ORDER_FORM_CONTAINER_ID } from '@utils/data/global.ts';
56
+ import { EVENTLOOK_ORDER_FORM_ID } from '@utils/data/global.ts';
57
57
  import ChildEventSection from './ChildEvents';
58
- import TicketSelectionMap from '@form/tickets/TicketSelectionMap';
59
- import PaymentOverviewDrawer from './PaymentOverviewDrawer';
60
- import { getPlaceAsString } from '@utils/place';
61
- import Services from '@form/services';
58
+ import TicketSelectionMap from '@form/TicketSelectionMap.tsx';
62
59
 
63
60
  interface Props {
64
61
  event: IEvent;
@@ -66,7 +63,6 @@ interface Props {
66
63
  selectedReleaseId?: number;
67
64
  isIframe?: boolean;
68
65
  isInline?: boolean;
69
- headerSlot?: React.ReactNode;
70
66
  }
71
67
 
72
68
  const TicketForm: React.FC<Props> = ({
@@ -75,7 +71,6 @@ const TicketForm: React.FC<Props> = ({
75
71
  selectedReleaseId,
76
72
  isIframe,
77
73
  isInline,
78
- headerSlot,
79
74
  }) => {
80
75
  const { t, setGlobal, callbacks, links, user, options, showSnackbar, content, seatingIframeUrl } =
81
76
  useGlobal();
@@ -449,7 +444,7 @@ const TicketForm: React.FC<Props> = ({
449
444
  }, [window.location.search]);
450
445
 
451
446
  useEffect(() => {
452
- const subscription = methods.watch((value) => {
447
+ const subscription = methods.watch((value, { name }) => {
453
448
  if (
454
449
  JSON.stringify(defaultValues) !== JSON.stringify(value) &&
455
450
  !hasFiredBeginCheckout.current
@@ -476,7 +471,7 @@ const TicketForm: React.FC<Props> = ({
476
471
  useEffect(() => {
477
472
  if (hasGopayId || isPaying || paymentRedirect) {
478
473
  if (options?.autoscrollAfterViewChange) {
479
- const orderForm = document.getElementById(EVENTLOOK_ORDER_FORM_CONTAINER_ID);
474
+ const orderForm = document.getElementById(EVENTLOOK_ORDER_FORM_ID);
480
475
  if (orderForm) {
481
476
  orderForm.scrollIntoView({ behavior: 'smooth' });
482
477
  }
@@ -488,7 +483,7 @@ const TicketForm: React.FC<Props> = ({
488
483
  return <ReleaseCountdown event={event} setShowReleaseDate={setShowReleaseDate} />;
489
484
 
490
485
  return (
491
- <Box id={EVENTLOOK_ORDER_FORM_CONTAINER_ID}>
486
+ <Box id={EVENTLOOK_ORDER_FORM_ID}>
492
487
  {hasGopayId ? (
493
488
  <PaymentSuccess setIsPaying={setIsPaying} isIframe={isIframe} pixels={pixels} />
494
489
  ) : isPaying ? (
@@ -501,45 +496,21 @@ const TicketForm: React.FC<Props> = ({
501
496
  isInline={isInline}
502
497
  />
503
498
  ) : (
504
- <FormProvider
505
- methods={methods}
506
- // @ts-ignore
507
- onSubmit={methods.handleSubmit(onSubmit)}
508
- formId={EVENTLOOK_ORDER_FORM_ID}
509
- >
510
- <Stack
499
+ // @ts-ignore
500
+ <FormProvider methods={methods} onSubmit={methods.handleSubmit(onSubmit)}>
501
+ <Typography
511
502
  className="overview-card__event-info"
512
503
  display={{ md: 'none' }}
504
+ variant="h4"
513
505
  sx={{
514
506
  mb: 2,
515
507
  }}
516
508
  >
517
- <Typography variant="h3" component="h1">
518
- {event.name}
519
- </Typography>
520
- <Typography variant="h5" component="h2">
521
- {dayjs(event.startDate).format('DD.MM.YYYY HH:mm')}
522
- </Typography>
523
- <Typography variant="body2" mt={1}>
524
- {getPlaceAsString(event.place)}
525
- </Typography>
526
- {headerSlot ? <>{headerSlot}</> : null}
527
- </Stack>
509
+ {event.name} - {dayjs(event.startDate).format('DD.MM.YYYY HH:mm')}
510
+ </Typography>
528
511
  <Grid container spacing={2}>
529
512
  <Grid item xs={12} md={8}>
530
- <Stepper
531
- orientation="vertical"
532
- sx={(theme) => ({
533
- [theme.breakpoints.down('sm')]: {
534
- '& .MuiStepContent-root': {
535
- borderLeftWidth: 0,
536
- paddingLeft: 0,
537
- marginLeft: 0,
538
- },
539
- '& .MuiStepConnector-line': { borderLeftWidth: 0 },
540
- },
541
- })}
542
- >
513
+ <Stepper orientation="vertical">
543
514
  {event.type === EventType.RECURRING && (
544
515
  <Step active>
545
516
  <StepLabel>{t('event.tickets.stepper.6.title')}</StepLabel>
@@ -572,12 +543,6 @@ const TicketForm: React.FC<Props> = ({
572
543
  </StepContent>
573
544
  </Step>
574
545
  )}
575
- <Step active>
576
- <StepLabel>{t('event.tickets.stepper.8.title')}</StepLabel>
577
- <StepContent>
578
- <Services event={event} />
579
- </StepContent>
580
- </Step>
581
546
  {event.children.length && (
582
547
  <Step active>
583
548
  <StepLabel>{t('event.tickets.stepper.7.title')}</StepLabel>
@@ -611,7 +576,7 @@ const TicketForm: React.FC<Props> = ({
611
576
  </StepContent>
612
577
  </Step>
613
578
  </Stepper>
614
- <Stack mt={2} ml={{ xs: 1, md: 4 }}>
579
+ <Stack mt={2} ml={4}>
615
580
  <RHFCheckbox
616
581
  name="termsAndConditions"
617
582
  label={
@@ -631,13 +596,10 @@ const TicketForm: React.FC<Props> = ({
631
596
  />
632
597
  </Stack>
633
598
  </Grid>
634
- <Grid item xs={12} md={4} sx={{ display: { xs: 'none', md: 'block' } }}>
599
+ <Grid item xs={12} md={4}>
635
600
  <PaymentOverviewBox event={event} />
636
601
  </Grid>
637
602
  </Grid>
638
-
639
- <PaymentOverviewDrawer event={event} totalPrice={values.total} />
640
-
641
603
  <EmailConfirmation
642
604
  open={formStep === 2 && !isIframe}
643
605
  onClose={() => setFormStep(1)}
@@ -651,7 +613,7 @@ const TicketForm: React.FC<Props> = ({
651
613
  };
652
614
 
653
615
  const CustomLink: React.FC<PropsWithChildren<LinkProps>> = ({ href = '', children, ...other }) => (
654
- <Link href={href} {...other} sx={{ color: 'inherit', textDecoration: 'underline' }}>
616
+ <Link href={href} {...other}>
655
617
  {children}
656
618
  </Link>
657
619
  );