@eventlook/sdk 1.4.48 → 1.4.49-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (233) hide show
  1. package/.env.example +1 -0
  2. package/dist/cjs/_virtual/_commonjsHelpers.js +8 -0
  3. package/dist/cjs/_virtual/_commonjsHelpers.js.map +1 -0
  4. package/dist/cjs/_virtual/index.js +6 -0
  5. package/dist/cjs/_virtual/index.js.map +1 -0
  6. package/dist/cjs/_virtual/index2.js +6 -0
  7. package/dist/cjs/_virtual/index2.js.map +1 -0
  8. package/dist/cjs/_virtual/index3.js +6 -0
  9. package/dist/cjs/_virtual/index3.js.map +1 -0
  10. package/dist/cjs/_virtual/react-is.development.js +6 -0
  11. package/dist/cjs/_virtual/react-is.development.js.map +1 -0
  12. package/dist/cjs/_virtual/react-is.development2.js +6 -0
  13. package/dist/cjs/_virtual/react-is.development2.js.map +1 -0
  14. package/dist/cjs/_virtual/react-is.production.js +6 -0
  15. package/dist/cjs/_virtual/react-is.production.js.map +1 -0
  16. package/dist/cjs/_virtual/react-is.production.min.js +6 -0
  17. package/dist/cjs/_virtual/react-is.production.min.js.map +1 -0
  18. package/dist/cjs/components/hook-form/FormProvider.js +2 -2
  19. package/dist/cjs/components/hook-form/FormProvider.js.map +1 -1
  20. package/dist/cjs/form/ChildEventDialog.js +3 -3
  21. package/dist/cjs/form/ChildEventDialog.js.map +1 -1
  22. package/dist/cjs/form/ContactPerson.js +1 -1
  23. package/dist/cjs/form/ContactPerson.js.map +1 -1
  24. package/dist/cjs/form/PaymentOverviewBox.js +47 -61
  25. package/dist/cjs/form/PaymentOverviewBox.js.map +1 -1
  26. package/dist/cjs/form/PaymentOverviewDrawer.js +157 -0
  27. package/dist/cjs/form/PaymentOverviewDrawer.js.map +1 -0
  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 +21 -18
  31. package/dist/cjs/form/Shipping.js.map +1 -1
  32. package/dist/cjs/form/TicketForm.js +94 -33
  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 +5 -6
  37. package/dist/cjs/form/TicketSelection.js.map +1 -1
  38. package/dist/cjs/form/TicketSelectionMobile.js +98 -0
  39. package/dist/cjs/form/TicketSelectionMobile.js.map +1 -0
  40. package/dist/cjs/form/TicketWithMerchandiseSelection.js +3 -5
  41. package/dist/cjs/form/TicketWithMerchandiseSelection.js.map +1 -1
  42. package/dist/cjs/form/index.js +1 -1
  43. package/dist/cjs/form/index.js.map +1 -1
  44. package/dist/cjs/form/merchandise/MerchandiseSelection.js +14 -0
  45. package/dist/cjs/form/merchandise/MerchandiseSelection.js.map +1 -0
  46. package/dist/cjs/form/merchandise/MerchandiseSlider.js +40 -0
  47. package/dist/cjs/form/merchandise/MerchandiseSlider.js.map +1 -0
  48. package/dist/cjs/form/merchendise/MerchandiseSelection.js +19 -0
  49. package/dist/cjs/form/merchendise/MerchandiseSelection.js.map +1 -0
  50. package/dist/cjs/form/merchendise/MerchandiseSlider.js +75 -0
  51. package/dist/cjs/form/merchendise/MerchandiseSlider.js.map +1 -0
  52. package/dist/cjs/form/payment/FeeBox.js +4 -16
  53. package/dist/cjs/form/payment/FeeBox.js.map +1 -1
  54. package/dist/cjs/form/payment/PaymentOverviewCheckbox.js +33 -28
  55. package/dist/cjs/form/payment/PaymentOverviewCheckbox.js.map +1 -1
  56. package/dist/cjs/form/product/ProductCard.js +139 -36
  57. package/dist/cjs/form/product/ProductCard.js.map +1 -1
  58. package/dist/cjs/form/product/ProductVariantsDialog.js +157 -96
  59. package/dist/cjs/form/product/ProductVariantsDialog.js.map +1 -1
  60. package/dist/cjs/form/services/index.js +133 -0
  61. package/dist/cjs/form/services/index.js.map +1 -0
  62. package/dist/cjs/form/style.js +7 -3
  63. package/dist/cjs/form/style.js.map +1 -1
  64. package/dist/cjs/form/tickets/ReleaseDescription.js +23 -0
  65. package/dist/cjs/form/tickets/ReleaseDescription.js.map +1 -0
  66. package/dist/cjs/form/tickets/ReleaseWithMerchandise.js +141 -0
  67. package/dist/cjs/form/tickets/ReleaseWithMerchandise.js.map +1 -0
  68. package/dist/cjs/form/tickets/TicketQuantityControl.js +52 -0
  69. package/dist/cjs/form/tickets/TicketQuantityControl.js.map +1 -0
  70. package/dist/cjs/form/tickets/TicketSelection.js +139 -0
  71. package/dist/cjs/form/tickets/TicketSelection.js.map +1 -0
  72. package/dist/cjs/form/tickets/TicketSelectionMap.js +73 -0
  73. package/dist/cjs/form/tickets/TicketSelectionMap.js.map +1 -0
  74. package/dist/cjs/form/tickets/TicketSelectionMobile.js +90 -0
  75. package/dist/cjs/form/tickets/TicketSelectionMobile.js.map +1 -0
  76. package/dist/cjs/form/tickets/TicketWithMerchandiseSelection.js +117 -0
  77. package/dist/cjs/form/tickets/TicketWithMerchandiseSelection.js.map +1 -0
  78. package/dist/cjs/hooks/useConsentScrollOnDrawerOpen.js +59 -0
  79. package/dist/cjs/hooks/useConsentScrollOnDrawerOpen.js.map +1 -0
  80. package/dist/cjs/hooks/useScrollToFirstError.js +64 -0
  81. package/dist/cjs/hooks/useScrollToFirstError.js.map +1 -0
  82. package/dist/cjs/locales/cs.js +18 -3
  83. package/dist/cjs/locales/cs.js.map +1 -1
  84. package/dist/cjs/locales/en.js +17 -2
  85. package/dist/cjs/locales/en.js.map +1 -1
  86. package/dist/cjs/locales/es.js +16 -1
  87. package/dist/cjs/locales/es.js.map +1 -1
  88. package/dist/cjs/locales/pl.js +16 -1
  89. package/dist/cjs/locales/pl.js.map +1 -1
  90. package/dist/cjs/locales/sk.js +17 -2
  91. package/dist/cjs/locales/sk.js.map +1 -1
  92. package/dist/cjs/locales/uk.js +16 -1
  93. package/dist/cjs/locales/uk.js.map +1 -1
  94. package/dist/cjs/utils/data/global.js +2 -0
  95. package/dist/cjs/utils/data/global.js.map +1 -1
  96. package/dist/esm/_virtual/_commonjsHelpers.js +6 -0
  97. package/dist/esm/_virtual/_commonjsHelpers.js.map +1 -0
  98. package/dist/esm/_virtual/index.js +4 -0
  99. package/dist/esm/_virtual/index.js.map +1 -0
  100. package/dist/esm/_virtual/index2.js +4 -0
  101. package/dist/esm/_virtual/index2.js.map +1 -0
  102. package/dist/esm/_virtual/index3.js +4 -0
  103. package/dist/esm/_virtual/index3.js.map +1 -0
  104. package/dist/esm/_virtual/react-is.development.js +4 -0
  105. package/dist/esm/_virtual/react-is.development.js.map +1 -0
  106. package/dist/esm/_virtual/react-is.development2.js +4 -0
  107. package/dist/esm/_virtual/react-is.development2.js.map +1 -0
  108. package/dist/esm/_virtual/react-is.production.js +4 -0
  109. package/dist/esm/_virtual/react-is.production.js.map +1 -0
  110. package/dist/esm/_virtual/react-is.production.min.js +4 -0
  111. package/dist/esm/_virtual/react-is.production.min.js.map +1 -0
  112. package/dist/esm/components/hook-form/FormProvider.js +2 -2
  113. package/dist/esm/components/hook-form/FormProvider.js.map +1 -1
  114. package/dist/esm/form/ChildEventDialog.js +3 -3
  115. package/dist/esm/form/ChildEventDialog.js.map +1 -1
  116. package/dist/esm/form/ContactPerson.js +1 -1
  117. package/dist/esm/form/ContactPerson.js.map +1 -1
  118. package/dist/esm/form/PaymentOverviewBox.js +48 -62
  119. package/dist/esm/form/PaymentOverviewBox.js.map +1 -1
  120. package/dist/esm/form/PaymentOverviewDrawer.js +153 -0
  121. package/dist/esm/form/PaymentOverviewDrawer.js.map +1 -0
  122. package/dist/esm/form/ReleaseWithMerchandise.js +58 -49
  123. package/dist/esm/form/ReleaseWithMerchandise.js.map +1 -1
  124. package/dist/esm/form/Shipping.js +21 -18
  125. package/dist/esm/form/Shipping.js.map +1 -1
  126. package/dist/esm/form/TicketForm.js +96 -35
  127. package/dist/esm/form/TicketForm.js.map +1 -1
  128. package/dist/esm/form/TicketQuantityControl.js +47 -0
  129. package/dist/esm/form/TicketQuantityControl.js.map +1 -0
  130. package/dist/esm/form/TicketSelection.js +5 -6
  131. package/dist/esm/form/TicketSelection.js.map +1 -1
  132. package/dist/esm/form/TicketSelectionMobile.js +94 -0
  133. package/dist/esm/form/TicketSelectionMobile.js.map +1 -0
  134. package/dist/esm/form/TicketWithMerchandiseSelection.js +4 -6
  135. package/dist/esm/form/TicketWithMerchandiseSelection.js.map +1 -1
  136. package/dist/esm/form/index.js +1 -1
  137. package/dist/esm/form/index.js.map +1 -1
  138. package/dist/esm/form/merchandise/MerchandiseSelection.js +10 -0
  139. package/dist/esm/form/merchandise/MerchandiseSelection.js.map +1 -0
  140. package/dist/esm/form/merchandise/MerchandiseSlider.js +36 -0
  141. package/dist/esm/form/merchandise/MerchandiseSlider.js.map +1 -0
  142. package/dist/esm/form/merchendise/MerchandiseSelection.js +15 -0
  143. package/dist/esm/form/merchendise/MerchandiseSelection.js.map +1 -0
  144. package/dist/esm/form/merchendise/MerchandiseSlider.js +71 -0
  145. package/dist/esm/form/merchendise/MerchandiseSlider.js.map +1 -0
  146. package/dist/esm/form/payment/FeeBox.js +5 -17
  147. package/dist/esm/form/payment/FeeBox.js.map +1 -1
  148. package/dist/esm/form/payment/PaymentOverviewCheckbox.js +35 -30
  149. package/dist/esm/form/payment/PaymentOverviewCheckbox.js.map +1 -1
  150. package/dist/esm/form/product/ProductCard.js +140 -37
  151. package/dist/esm/form/product/ProductCard.js.map +1 -1
  152. package/dist/esm/form/product/ProductVariantsDialog.js +159 -98
  153. package/dist/esm/form/product/ProductVariantsDialog.js.map +1 -1
  154. package/dist/esm/form/services/index.js +129 -0
  155. package/dist/esm/form/services/index.js.map +1 -0
  156. package/dist/esm/form/style.js +7 -3
  157. package/dist/esm/form/style.js.map +1 -1
  158. package/dist/esm/form/tickets/ReleaseDescription.js +19 -0
  159. package/dist/esm/form/tickets/ReleaseDescription.js.map +1 -0
  160. package/dist/esm/form/tickets/ReleaseWithMerchandise.js +137 -0
  161. package/dist/esm/form/tickets/ReleaseWithMerchandise.js.map +1 -0
  162. package/dist/esm/form/tickets/TicketQuantityControl.js +48 -0
  163. package/dist/esm/form/tickets/TicketQuantityControl.js.map +1 -0
  164. package/dist/esm/form/tickets/TicketSelection.js +135 -0
  165. package/dist/esm/form/tickets/TicketSelection.js.map +1 -0
  166. package/dist/esm/form/tickets/TicketSelectionMap.js +69 -0
  167. package/dist/esm/form/tickets/TicketSelectionMap.js.map +1 -0
  168. package/dist/esm/form/tickets/TicketSelectionMobile.js +86 -0
  169. package/dist/esm/form/tickets/TicketSelectionMobile.js.map +1 -0
  170. package/dist/esm/form/tickets/TicketWithMerchandiseSelection.js +113 -0
  171. package/dist/esm/form/tickets/TicketWithMerchandiseSelection.js.map +1 -0
  172. package/dist/esm/hooks/useConsentScrollOnDrawerOpen.js +55 -0
  173. package/dist/esm/hooks/useConsentScrollOnDrawerOpen.js.map +1 -0
  174. package/dist/esm/hooks/useScrollToFirstError.js +60 -0
  175. package/dist/esm/hooks/useScrollToFirstError.js.map +1 -0
  176. package/dist/esm/locales/cs.js +18 -3
  177. package/dist/esm/locales/cs.js.map +1 -1
  178. package/dist/esm/locales/en.js +17 -2
  179. package/dist/esm/locales/en.js.map +1 -1
  180. package/dist/esm/locales/es.js +16 -1
  181. package/dist/esm/locales/es.js.map +1 -1
  182. package/dist/esm/locales/pl.js +16 -1
  183. package/dist/esm/locales/pl.js.map +1 -1
  184. package/dist/esm/locales/sk.js +17 -2
  185. package/dist/esm/locales/sk.js.map +1 -1
  186. package/dist/esm/locales/uk.js +16 -1
  187. package/dist/esm/locales/uk.js.map +1 -1
  188. package/dist/esm/utils/data/global.js +2 -1
  189. package/dist/esm/utils/data/global.js.map +1 -1
  190. package/dist/types/components/Image.d.ts +4 -4
  191. package/dist/types/form/PaymentOverviewDrawer.d.ts +8 -0
  192. package/dist/types/form/merchendise/MerchandiseSelection.d.ts +9 -0
  193. package/dist/types/form/merchendise/MerchandiseSlider.d.ts +10 -0
  194. package/dist/types/form/merchendise/MerchendiseSlider.d.ts +0 -0
  195. package/dist/types/form/style.d.ts +1 -1
  196. package/package.json +5 -1
  197. package/rollup.config.mjs +2 -0
  198. package/src/components/hook-form/FormProvider.tsx +5 -2
  199. package/src/form/ChildEventDialog.tsx +3 -3
  200. package/src/form/ContactPerson.tsx +1 -1
  201. package/src/form/PaymentOverviewBox.tsx +89 -122
  202. package/src/form/PaymentOverviewDrawer.tsx +238 -0
  203. package/src/form/Shipping.tsx +29 -17
  204. package/src/form/TicketForm.tsx +140 -39
  205. package/src/form/index.tsx +3 -1
  206. package/src/form/merchandise/MerchandiseSelection.tsx +24 -0
  207. package/src/form/merchandise/MerchandiseSlider.tsx +62 -0
  208. package/src/form/payment/FeeBox.tsx +4 -31
  209. package/src/form/payment/PaymentOverviewCheckbox.tsx +57 -56
  210. package/src/form/product/ProductCard.tsx +250 -59
  211. package/src/form/product/ProductVariantsDialog.tsx +253 -140
  212. package/src/form/services/index.tsx +263 -0
  213. package/src/form/style.ts +9 -3
  214. package/src/form/tickets/ReleaseDescription.tsx +46 -0
  215. package/src/form/tickets/ReleaseWithMerchandise.tsx +239 -0
  216. package/src/form/tickets/TicketQuantityControl.tsx +94 -0
  217. package/src/form/{TicketSelection.tsx → tickets/TicketSelection.tsx} +24 -128
  218. package/src/form/{TicketSelectionMap.tsx → tickets/TicketSelectionMap.tsx} +9 -1
  219. package/src/form/tickets/TicketSelectionMobile.tsx +177 -0
  220. package/src/form/{TicketWithMerchandiseSelection.tsx → tickets/TicketWithMerchandiseSelection.tsx} +3 -7
  221. package/src/hooks/useConsentScrollOnDrawerOpen.ts +73 -0
  222. package/src/hooks/useScrollToFirstError.ts +94 -0
  223. package/src/locales/cs.tsx +18 -3
  224. package/src/locales/en.tsx +17 -2
  225. package/src/locales/es.tsx +16 -1
  226. package/src/locales/pl.tsx +16 -1
  227. package/src/locales/sk.tsx +17 -2
  228. package/src/locales/uk.tsx +16 -1
  229. package/src/utils/data/global.ts +1 -0
  230. package/tsconfig.json +2 -1
  231. package/.claude/settings.local.json +0 -9
  232. package/src/form/MerchandiseSelection.tsx +0 -29
  233. package/src/form/ReleaseWithMerchandise.tsx +0 -230
@@ -1,5 +1,16 @@
1
- import { Button, Card, Stack, Typography } from '@mui/material';
2
- import { Iconify } from '@components/iconify';
1
+ import {
2
+ Box,
3
+ Button,
4
+ Card,
5
+ Dialog,
6
+ DialogActions,
7
+ DialogContent,
8
+ DialogTitle,
9
+ IconButton,
10
+ Link,
11
+ Stack,
12
+ Typography,
13
+ } from '@mui/material';
3
14
  import Image from '@components/Image';
4
15
  import { IEventProduct } from '@utils/types/event-product.type';
5
16
  import React, { useMemo, useState } from 'react';
@@ -9,6 +20,7 @@ import { useFormContext, useWatch } from 'react-hook-form';
9
20
  import { ITicketForm, ITicketFormTicket } from '@utils/types/ticket.type';
10
21
  import { getSelectedQuantityByVariant } from '@utils/product';
11
22
  import useGlobal from '@hooks/useGlobal.ts';
23
+ import { fCurrency } from '@utils/formatNumber';
12
24
 
13
25
  interface Props {
14
26
  eventProduct: IEventProduct;
@@ -17,85 +29,264 @@ interface Props {
17
29
  }
18
30
 
19
31
  const ProductCard: React.FC<Props> = ({ eventProduct, eventId, isOnlyMerchandise }) => {
20
- const { t } = useGlobal();
32
+ const { t, lang } = useGlobal();
21
33
  const [openVariantDialog, setOpenVariantDialog] = useState<boolean>(false);
22
- const { setValue } = useFormContext<ITicketForm>();
34
+ const [openSimpleProductDialog, setOpenSimpleProductDialog] = useState<boolean>(false);
35
+ const { setValue, getValues } = useFormContext<ITicketForm>();
23
36
  const tickets: ITicketFormTicket[] = useWatch({ name: `tickets.${eventId}`, defaultValue: [] });
24
37
  const products: IEventProductForm[] = useWatch({ name: `products.${eventId}`, defaultValue: [] });
38
+ const isSimpleProduct = eventProduct.eventProductVariants.length === 1;
39
+ const simpleVariant = isSimpleProduct ? eventProduct.eventProductVariants[0] : undefined;
25
40
 
26
- const onSelectVariant = (selectedVariant: IEventProductForm) => {
27
- const variant = products.find(
28
- (product) => product.eventProductVariantId === selectedVariant.eventProductVariantId
29
- );
41
+ const onSelectVariant = (selectedVariants: IEventProductForm[] | IEventProductForm) => {
42
+ const normalized = Array.isArray(selectedVariants) ? selectedVariants : [selectedVariants];
43
+ const currentProducts =
44
+ (getValues(`products.${eventId}`) as IEventProductForm[] | undefined) ?? [];
45
+ const nextProducts = [...currentProducts];
46
+
47
+ normalized.forEach((selectedVariant) => {
48
+ const index = nextProducts.findIndex(
49
+ (product) => product.eventProductVariantId === selectedVariant.eventProductVariantId
50
+ );
30
51
 
31
- if (variant) {
32
- if (selectedVariant.quantity === 0) {
33
- setValue(
34
- `products.${eventId}`,
35
- products.filter(
36
- (product) => product.eventProductVariantId !== variant.eventProductVariantId
37
- )
38
- );
52
+ if (index >= 0) {
53
+ if (selectedVariant.quantity <= 0) {
54
+ nextProducts.splice(index, 1);
55
+ } else {
56
+ nextProducts[index] = {
57
+ ...nextProducts[index],
58
+ quantity: selectedVariant.quantity,
59
+ };
60
+ }
39
61
  } else {
40
- setValue(
41
- `products.${eventId}`,
42
- products.map((product) => {
43
- if (product.eventProductVariantId === selectedVariant.eventProductVariantId) {
44
- return {
45
- ...product,
46
- quantity: selectedVariant.quantity,
47
- };
48
- }
49
- return product;
50
- })
51
- );
62
+ if (selectedVariant.quantity > 0) {
63
+ nextProducts.push(selectedVariant);
64
+ }
52
65
  }
53
- } else if (selectedVariant.quantity !== 0) {
54
- setValue(`products.${eventId}`, [...products, selectedVariant]);
55
- }
66
+ });
67
+
68
+ setValue(`products.${eventId}`, nextProducts, {
69
+ shouldDirty: true,
70
+ shouldValidate: true,
71
+ });
56
72
  };
57
73
 
58
- const eventNotEmpty = useMemo(() => products.some((product) => product?.quantity), [products]);
74
+ const eventNotEmpty = useMemo(() => {
75
+ const variantIds = new Set(eventProduct.eventProductVariants.map((variant) => variant.id));
76
+ return products.some(
77
+ (product) => product?.quantity && variantIds.has(product.eventProductVariantId)
78
+ );
79
+ }, [products, eventProduct.eventProductVariants]);
80
+
81
+ const selectedQuantityByVariant = useMemo(
82
+ () => getSelectedQuantityByVariant(products, tickets),
83
+ [products, tickets]
84
+ );
85
+
86
+ const simpleProductQuantity = useMemo(() => {
87
+ if (!simpleVariant) return 0;
88
+ const matched = products.find((product) => product.eventProductVariantId === simpleVariant.id);
89
+ return matched?.quantity ?? 0;
90
+ }, [products, simpleVariant]);
91
+
92
+ const simpleProductMaxAvailable = useMemo(() => {
93
+ if (!simpleVariant) return 0;
94
+ const { quantity, sold } = simpleVariant.productVariant;
95
+ if (!quantity) return Number.POSITIVE_INFINITY;
96
+ const used = selectedQuantityByVariant[simpleVariant.id] ?? 0;
97
+ return quantity - sold - used;
98
+ }, [simpleVariant, selectedQuantityByVariant]);
99
+
100
+ const onChangeSimpleProductQuantity = (nextQuantity: number) => {
101
+ if (!simpleVariant) return;
102
+ if (nextQuantity < 0 || nextQuantity > 10) return;
103
+ if (
104
+ nextQuantity > simpleProductQuantity &&
105
+ nextQuantity - simpleProductQuantity > simpleProductMaxAvailable
106
+ )
107
+ return;
108
+
109
+ onSelectVariant({
110
+ eventProductVariantId: simpleVariant.id,
111
+ productVariantId: simpleVariant.productVariant.id,
112
+ quantity: nextQuantity,
113
+ price: simpleVariant.priceWithVat,
114
+ excludedShippingMethodIds: eventProduct.excludedShippingMethods.map((method) => method.id),
115
+ });
116
+ };
59
117
 
60
118
  return (
61
119
  <>
62
- <Card sx={{ p: 2 }}>
63
- <Stack spacing={1}>
64
- <Image src={eventProduct.product.previewImage.url} ratio="1/1" sx={{ borderRadius: 2 }} />
65
- <Typography variant="h5">{eventProduct.product.name}</Typography>
66
- <Typography
67
- variant="caption"
68
- dangerouslySetInnerHTML={{ __html: eventProduct.product.description }}
69
- sx={{
70
- height: 44,
71
- textOverflow: 'ellipsis',
72
- overflow: 'hidden',
73
- display: '-webkit-box',
74
- WebkitLineClamp: 2,
75
- WebkitBoxOrient: 'vertical',
76
- }}
120
+ <Card
121
+ sx={{
122
+ p: 0,
123
+ borderRadius: 0,
124
+ boxShadow: 'none',
125
+ background: 'none',
126
+ }}
127
+ >
128
+ <Stack spacing={0}>
129
+ <Image
130
+ src={eventProduct.product.previewImage.url}
131
+ ratio="21/9"
132
+ sx={{ borderRadius: 1, maxHeight: 96 }}
77
133
  />
78
- <Button
79
- variant="contained"
80
- onClick={() => setOpenVariantDialog(true)}
81
- fullWidth
82
- startIcon={
83
- eventNotEmpty ? <Iconify icon="eva:edit-fill" /> : <Iconify icon="eva:plus-fill" />
84
- }
85
- >
86
- {eventNotEmpty ? t('change') : t('add')}
87
- </Button>
134
+ <Typography variant="h5" sx={{ fontSize: '14px', fontWeight: 700 }}>
135
+ {eventProduct.product.name}
136
+ </Typography>
137
+ <Stack direction="row" alignItems="center" justifyContent="space-between" spacing={1}>
138
+ <Typography variant="body2" color="text.primary">
139
+ {eventProduct.product.priceWithVat > 0
140
+ ? fCurrency(eventProduct.product.priceWithVat, lang, eventProduct.product.currency)
141
+ : t('free')}
142
+ </Typography>
143
+ {isSimpleProduct && (
144
+ <Link
145
+ onClick={() => setOpenSimpleProductDialog(true)}
146
+ color="inherit"
147
+ underline="always"
148
+ fontSize={12}
149
+ >
150
+ {t('more_info')}
151
+ </Link>
152
+ )}
153
+ </Stack>
154
+ {isSimpleProduct ? (
155
+ simpleProductQuantity > 0 ? (
156
+ <Stack direction="row" spacing={1} alignItems="center" width="100%">
157
+ <IconButton
158
+ onClick={() => onChangeSimpleProductQuantity(simpleProductQuantity - 1)}
159
+ disabled={simpleProductQuantity <= 0}
160
+ sx={{
161
+ flex: '1 1 0',
162
+ height: 36,
163
+ p: 0,
164
+ borderRadius: 1,
165
+ border: '1px solid',
166
+ borderColor: 'grey.300',
167
+ }}
168
+ >
169
+ -
170
+ </IconButton>
171
+ <Box
172
+ sx={{
173
+ flex: '1 1 0',
174
+ height: 36,
175
+ borderRadius: 1,
176
+ border: '1px solid',
177
+ borderColor: 'grey.300',
178
+ display: 'flex',
179
+ alignItems: 'center',
180
+ justifyContent: 'center',
181
+ fontWeight: 700,
182
+ }}
183
+ >
184
+ {simpleProductQuantity}
185
+ </Box>
186
+ <IconButton
187
+ onClick={() => onChangeSimpleProductQuantity(simpleProductQuantity + 1)}
188
+ disabled={simpleProductQuantity >= 10 || simpleProductMaxAvailable <= 0}
189
+ sx={{
190
+ flex: '1 1 0',
191
+ height: 36,
192
+ p: 0,
193
+ borderRadius: 1,
194
+ bgcolor: 'primary.main',
195
+ color: 'primary.contrastText',
196
+ '&:hover': { bgcolor: 'primary.dark' },
197
+ '&.Mui-disabled': {
198
+ bgcolor: 'action.disabledBackground',
199
+ color: 'action.disabled',
200
+ },
201
+ }}
202
+ >
203
+ +
204
+ </IconButton>
205
+ </Stack>
206
+ ) : (
207
+ <Button
208
+ variant="contained"
209
+ onClick={() => onChangeSimpleProductQuantity(1)}
210
+ disabled={simpleProductMaxAvailable <= 0}
211
+ fullWidth
212
+ >
213
+ {t('add')}
214
+ </Button>
215
+ )
216
+ ) : (
217
+ <Button
218
+ variant={eventNotEmpty ? 'contained' : 'outlined'}
219
+ onClick={() => setOpenVariantDialog(true)}
220
+ fullWidth
221
+ sx={{
222
+ color: eventNotEmpty ? (theme) => theme.palette.common.white : 'inherit',
223
+ borderColor: (theme) => theme.palette.grey[300],
224
+ }}
225
+ >
226
+ {eventNotEmpty
227
+ ? t('event.tickets.merchandise.show_added')
228
+ : t('event.tickets.merchandise.show_sizes')}
229
+ </Button>
230
+ )}
88
231
  </Stack>
89
232
  </Card>
90
233
  <ProductVariantsDialog
91
234
  eventProduct={eventProduct}
92
235
  eventId={eventId}
93
- openDialog={openVariantDialog}
236
+ openDialog={openVariantDialog && !isSimpleProduct}
94
237
  onClose={() => setOpenVariantDialog(false)}
95
238
  callback={onSelectVariant}
96
- selectedQuantityByVariant={getSelectedQuantityByVariant(products, tickets)}
239
+ selectedQuantityByVariant={selectedQuantityByVariant}
97
240
  isOnlyMerchandise={isOnlyMerchandise}
98
241
  />
242
+ <Dialog
243
+ open={openSimpleProductDialog && isSimpleProduct}
244
+ onClose={() => setOpenSimpleProductDialog(false)}
245
+ fullWidth
246
+ maxWidth="sm"
247
+ >
248
+ <DialogTitle
249
+ sx={{
250
+ textAlign: 'center',
251
+ fontWeight: 700,
252
+ fontSize: { xs: '1.5rem', sm: '2rem' },
253
+ mb: 2,
254
+ }}
255
+ >
256
+ {eventProduct.product.name}
257
+ </DialogTitle>
258
+ <DialogContent sx={{ pb: 0 }}>
259
+ <Stack spacing={2}>
260
+ <Typography
261
+ variant="body2"
262
+ dangerouslySetInnerHTML={{ __html: eventProduct.product.description }}
263
+ />
264
+ <Typography variant="body1" color="text.primary">
265
+ {eventProduct.product.priceWithVat > 0
266
+ ? fCurrency(eventProduct.product.priceWithVat, lang, eventProduct.product.currency)
267
+ : t('free')}
268
+ </Typography>
269
+ </Stack>
270
+ </DialogContent>
271
+ <DialogActions sx={{ px: 3, pb: 3 }}>
272
+ <Stack spacing={1} width="100%">
273
+ <Button
274
+ variant="contained"
275
+ onClick={() => {
276
+ onChangeSimpleProductQuantity(simpleProductQuantity + 1);
277
+ setOpenSimpleProductDialog(false);
278
+ }}
279
+ disabled={simpleProductQuantity >= 10 || simpleProductMaxAvailable <= 0}
280
+ fullWidth
281
+ >
282
+ {t('add')}
283
+ </Button>
284
+ <Button variant="outlined" onClick={() => setOpenSimpleProductDialog(false)} fullWidth>
285
+ {t('close')}
286
+ </Button>
287
+ </Stack>
288
+ </DialogActions>
289
+ </Dialog>
99
290
  </>
100
291
  );
101
292
  };