@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
@@ -1,260 +0,0 @@
1
- import React, { useMemo, useState } from 'react';
2
- import {
3
- Box,
4
- Button,
5
- Checkbox,
6
- Dialog,
7
- DialogContent,
8
- DialogTitle,
9
- Divider,
10
- FormControlLabel,
11
- IconButton,
12
- Link,
13
- Stack,
14
- Typography,
15
- } from '@mui/material';
16
- import { useWatch, Controller } from 'react-hook-form';
17
- import { fCurrency } from '@utils/formatNumber';
18
- import useGlobal from '@hooks/useGlobal';
19
- import { Iconify } from '@components';
20
- import { ITicketForm, ITicketFormTicket } from '@utils/types/ticket.type';
21
- import { IEvent } from '@utils/types/event.type';
22
- import { useFormContext } from 'react-hook-form';
23
-
24
- interface Props {
25
- event: IEvent;
26
- }
27
-
28
- interface BorderedCheckboxProps {
29
- name: string;
30
- disabled: boolean;
31
- title: React.ReactNode;
32
- price: React.ReactNode;
33
- onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;
34
- }
35
-
36
- const BorderedCheckbox: React.FC<BorderedCheckboxProps> = ({
37
- name,
38
- disabled,
39
- title,
40
- price,
41
- onChange,
42
- }) => {
43
- const { control } = useFormContext<ITicketForm>();
44
-
45
- return (
46
- <Controller
47
- name={name as any}
48
- control={control}
49
- render={({ field }) => (
50
- <FormControlLabel
51
- control={
52
- <Checkbox
53
- {...field}
54
- checked={field.value || false}
55
- onChange={(e) => {
56
- onChange?.(e);
57
- if (!e.defaultPrevented) {
58
- field.onChange(e);
59
- }
60
- }}
61
- disabled={disabled}
62
- />
63
- }
64
- label={
65
- <Stack
66
- direction="row"
67
- justifyContent="space-between"
68
- alignItems="center"
69
- sx={{ width: '100%' }}
70
- >
71
- <Typography variant="body2" fontWeight={400}>
72
- {title}
73
- </Typography>
74
- <Typography variant="body2" fontWeight={700} sx={{ whiteSpace: 'nowrap' }}>
75
- {price}
76
- </Typography>
77
- </Stack>
78
- }
79
- sx={{
80
- m: 0,
81
- px: 1,
82
- pr: 0.5,
83
- pl: 0,
84
- borderRadius: 1,
85
- width: '100%',
86
- border: '1px solid',
87
- borderColor: 'primary.main',
88
- '& .MuiFormControlLabel-label': {
89
- width: '100%',
90
- },
91
- }}
92
- />
93
- )}
94
- />
95
- );
96
- };
97
-
98
- const Services: React.FC<Props> = ({ event }) => {
99
- const { t, lang, showSnackbar } = useGlobal();
100
- const [open, setOpen] = useState(false);
101
- const ticketInsurancePricePerUnit = Number(
102
- useWatch<ITicketForm>({
103
- name: 'ticketInsurancePricePerUnit',
104
- defaultValue: 0,
105
- }) || 0
106
- );
107
- const smsNotificationPrice = Number(
108
- useWatch<ITicketForm>({
109
- name: 'smsNotificationPrice',
110
- defaultValue: 0,
111
- }) || 0
112
- );
113
- const tickets = useWatch<ITicketForm, 'tickets'>({
114
- name: 'tickets',
115
- defaultValue: {},
116
- });
117
-
118
- const totalTickets = useMemo(() => {
119
- const items: ITicketFormTicket[] = Object.values(tickets || {}).flat();
120
- return items.reduce((sum, ticket) => sum + (Number(ticket.quantity) || 0), 0);
121
- }, [tickets]);
122
-
123
- const handleOpen = (e: React.MouseEvent<HTMLAnchorElement>) => {
124
- e.preventDefault();
125
- setOpen(true);
126
- };
127
-
128
- const handleClose = () => setOpen(false);
129
-
130
- const handleServiceChange = (e: React.ChangeEvent<HTMLInputElement>) => {
131
- if (totalTickets <= 0) {
132
- e.preventDefault();
133
- showSnackbar(t('event.tickets.services.add_tickets_first'), {
134
- variant: 'error',
135
- });
136
- }
137
- };
138
-
139
- return (
140
- <Stack spacing={1.5}>
141
- <BorderedCheckbox
142
- name="ticketInsurance"
143
- disabled={false}
144
- title={t('event.tickets.insurance.label')}
145
- price={
146
- <>
147
- + {fCurrency(ticketInsurancePricePerUnit, lang, event.currency)} /{' '}
148
- {t('event.tickets.insurance.per_ticket')}
149
- </>
150
- }
151
- onChange={handleServiceChange}
152
- />
153
-
154
- <BorderedCheckbox
155
- name="smsNotification"
156
- disabled={false}
157
- title={t('event.tickets.sms_notification.label')}
158
- price={<>+ {fCurrency(smsNotificationPrice, lang, event.currency)}</>}
159
- onChange={handleServiceChange}
160
- />
161
-
162
- <Box sx={{ display: 'flex', justifyContent: 'flex-end' }}>
163
- <Link variant="body2" underline="always" onClick={handleOpen} color={'text.primary'}>
164
- {t('event.tickets.stepper.8.additional_info')}
165
- </Link>
166
- </Box>
167
-
168
- <Dialog
169
- open={open}
170
- onClose={handleClose}
171
- maxWidth="sm"
172
- fullWidth
173
- PaperProps={{
174
- sx: {
175
- borderRadius: 4,
176
- overflow: 'hidden',
177
- },
178
- }}
179
- >
180
- <DialogTitle
181
- sx={{
182
- position: 'relative',
183
- textAlign: 'center',
184
- fontWeight: 700,
185
- fontSize: { xs: '1.5rem', sm: '1.75rem' },
186
- pt: { xs: 3.5, sm: 4 },
187
- pb: { xs: 2, sm: 2.5 },
188
- px: { xs: 3, sm: 4 },
189
- }}
190
- >
191
- {t('event.tickets.stepper.8.title')}:
192
- <IconButton
193
- onClick={handleClose}
194
- size="small"
195
- sx={{ position: 'absolute', right: 16, top: 16 }}
196
- >
197
- <Iconify icon="carbon:close" />
198
- </IconButton>
199
- </DialogTitle>
200
- <DialogContent sx={{ px: { xs: 3, sm: 4 }, pb: { xs: 4, sm: 5 } }}>
201
- <Stack spacing={3}>
202
- <Box>
203
- <Typography variant="subtitle2" fontWeight={700} gutterBottom>
204
- {t('event.tickets.insurance.label')}
205
- </Typography>
206
- <Typography variant="body2" paragraph>
207
- {t('event.tickets.insurance.modal.description')}
208
- </Typography>
209
- <Typography variant="body2" paragraph>
210
- {t('event.tickets.insurance.modal.coverage')}
211
- </Typography>
212
- <BorderedCheckbox
213
- name="ticketInsurance"
214
- disabled={false}
215
- title={t('event.tickets.insurance.label')}
216
- price={
217
- <>
218
- + {fCurrency(ticketInsurancePricePerUnit, lang, event.currency)} /{' '}
219
- {t('event.tickets.insurance.per_ticket')}
220
- </>
221
- }
222
- onChange={handleServiceChange}
223
- />
224
- </Box>
225
- <Divider />
226
- <Box>
227
- <Typography variant="subtitle2" fontWeight={700} gutterBottom>
228
- {t('event.tickets.sms_notification.label')}
229
- </Typography>
230
- <Typography variant="body2" paragraph>
231
- {t('event.tickets.sms_notification.modal.description')}
232
- </Typography>
233
- <BorderedCheckbox
234
- name="smsNotification"
235
- disabled={false}
236
- title={t('event.tickets.sms_notification.label')}
237
- price={<>+ {fCurrency(smsNotificationPrice, lang, event.currency)}</>}
238
- onChange={handleServiceChange}
239
- />
240
- </Box>
241
- <Button
242
- variant="outlined"
243
- onClick={handleClose}
244
- sx={{
245
- mt: 1,
246
- py: 1.25,
247
- borderRadius: 2,
248
- fontWeight: 700,
249
- }}
250
- >
251
- {t('close')}
252
- </Button>
253
- </Stack>
254
- </DialogContent>
255
- </Dialog>
256
- </Stack>
257
- );
258
- };
259
-
260
- export default Services;
@@ -1,46 +0,0 @@
1
- import React from 'react';
2
- import { Box, Collapse, Link, Stack, Typography } from '@mui/material';
3
- import { Iconify } from '@components/iconify';
4
-
5
- interface ReleaseDescriptionProps {
6
- description?: string | null;
7
- isExpanded: boolean;
8
- onToggle: () => void;
9
- moreInfoLabel: string;
10
- showCollapse?: boolean;
11
- }
12
-
13
- const ReleaseDescription: React.FC<ReleaseDescriptionProps> = ({
14
- description,
15
- isExpanded,
16
- onToggle,
17
- moreInfoLabel,
18
- showCollapse = false,
19
- }) => {
20
- if (!description) return null;
21
-
22
- if (showCollapse) {
23
- return (
24
- <Collapse in={isExpanded}>
25
- <Typography variant="body2" color="text.secondary">
26
- {description}
27
- </Typography>
28
- </Collapse>
29
- );
30
- }
31
-
32
- return (
33
- <Link onClick={onToggle} color="inherit" underline="always" fontSize={12}>
34
- <Stack direction="row" alignItems="center" spacing={0}>
35
- <Box>{moreInfoLabel}</Box>
36
-
37
- <Iconify
38
- sx={{ width: 24, height: 24 }}
39
- icon={isExpanded ? 'eva:chevron-up-fill' : 'eva:chevron-down-fill'}
40
- />
41
- </Stack>
42
- </Link>
43
- );
44
- };
45
-
46
- export default ReleaseDescription;
@@ -1,237 +0,0 @@
1
- import React, { useCallback, useState } from 'react';
2
- import { Box, Stack, Typography } from '@mui/material';
3
- import ProductVariantsDialog from '@form/product/ProductVariantsDialog';
4
- import TicketQuantityControl from '@form/tickets/TicketQuantityControl';
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 ReleaseDescription from '@form/tickets/ReleaseDescription';
14
- import useGlobal from '@hooks/useGlobal.ts';
15
-
16
- interface Props {
17
- eventId: number;
18
- release: IReleaseShort;
19
- activeReleases: IReleaseShort[];
20
- currency: Currencies;
21
- index: number;
22
- }
23
-
24
- const ReleaseWithMerchandise: React.FC<Props> = ({
25
- eventId,
26
- release,
27
- activeReleases,
28
- currency,
29
- index,
30
- }) => {
31
- const { t, lang } = useGlobal();
32
- const [openVariantDialog, setOpenVariantDialog] = useState<'add' | 'increase' | null>(null);
33
- const [isDescriptionExpanded, setIsDescriptionExpanded] = useState(false);
34
- const { setValue } = useFormContext<ITicketForm>();
35
- const tickets: ITicketFormTicket[] = useWatch({ name: `tickets.${eventId}`, defaultValue: [] });
36
- const products: IEventProductForm[] = useWatch({ name: `products.${eventId}`, defaultValue: [] });
37
- const addedRelease = tickets.find((ticket) => ticket.releaseId === release.id);
38
- const countTickets = addedRelease?.quantity || 0;
39
-
40
- const getReleaseTitle = (release: IReleaseShort) =>
41
- release.releaseCategoryName || release.name || '';
42
-
43
- const getSelectedQuantity = (id: number) =>
44
- tickets.find((ticket) => ticket.releaseId === id)?.quantity || 0;
45
-
46
- const getAvailableTicketsForRelease = (release: ITicketFormTicket): number => {
47
- const selectedRelease = activeReleases?.find((item) => item.id === release.releaseId);
48
- const availableQuantity = selectedRelease ? selectedRelease.availableTickets : 0;
49
- return availableQuantity > 10 ? 10 : availableQuantity;
50
- };
51
-
52
- const isMaxQuantity = (releaseId: number) => {
53
- const release = tickets.find((ticket) => ticket.releaseId === releaseId);
54
- if (!release) return false;
55
- return getSelectedQuantity(releaseId) >= getAvailableTicketsForRelease(release);
56
- };
57
-
58
- const addRelease = (productsToAdd?: IEventProductForm[] | IEventProductForm) => {
59
- const normalizedProducts = Array.isArray(productsToAdd)
60
- ? productsToAdd
61
- : productsToAdd
62
- ? [productsToAdd]
63
- : [];
64
- const quantity = normalizedProducts.length ? normalizedProducts.length : 1;
65
- const extraFields = release.extraFields?.length
66
- ? Array.from({ length: quantity }, () =>
67
- release.extraFields!.map((field) => ({
68
- eventExtraFieldId: field.id,
69
- value: '',
70
- }))
71
- )
72
- : [];
73
-
74
- setValue(`tickets.${eventId}`, [
75
- ...tickets,
76
- {
77
- releaseId: release.id,
78
- quantity,
79
- itemName: '',
80
- price: 0,
81
- products: normalizedProducts,
82
- extraFields,
83
- },
84
- ]);
85
- setOpenVariantDialog(null);
86
- };
87
-
88
- const increaseQuantity = (productsToAdd?: IEventProductForm[] | IEventProductForm) => {
89
- const normalizedProducts = Array.isArray(productsToAdd)
90
- ? productsToAdd
91
- : productsToAdd
92
- ? [productsToAdd]
93
- : [];
94
- const addedRelease = tickets.find((ticket) => ticket.releaseId === release.id);
95
- if (addedRelease) {
96
- const increment = normalizedProducts.length ? normalizedProducts.length : 1;
97
- const maxQuantity = getAvailableTicketsForRelease(addedRelease);
98
- const availableIncrement = Math.max(
99
- 0,
100
- Math.min(increment, maxQuantity - Number(addedRelease.quantity))
101
- );
102
- if (availableIncrement === 0) return;
103
-
104
- const newQuantity = Number(addedRelease.quantity) + availableIncrement;
105
- const productsSlice = normalizedProducts.slice(0, availableIncrement);
106
- const extraFieldsToAdd = release.extraFields?.length
107
- ? Array.from({ length: availableIncrement }, () =>
108
- release.extraFields!.map((field) => ({
109
- eventExtraFieldId: field.id,
110
- value: '',
111
- }))
112
- )
113
- : [];
114
-
115
- setValue(
116
- `tickets.${eventId}`,
117
- tickets.map((ticket) =>
118
- ticket.releaseId === release.id
119
- ? {
120
- ...ticket,
121
- quantity: newQuantity > maxQuantity ? maxQuantity : newQuantity,
122
- products: [...ticket.products, ...productsSlice],
123
- extraFields: release.extraFields?.length
124
- ? [...ticket.extraFields, ...extraFieldsToAdd]
125
- : [],
126
- }
127
- : ticket
128
- )
129
- );
130
- setOpenVariantDialog(null);
131
- }
132
- };
133
-
134
- const decreaseQuantity = useCallback(() => {
135
- const addedRelease = tickets.find((ticket) => ticket.releaseId === release.id);
136
- if (addedRelease) {
137
- const newQuantity = Number(addedRelease.quantity) - 1;
138
- if (newQuantity < 1) {
139
- setValue(
140
- `tickets.${eventId}`,
141
- tickets.filter((ticket) => ticket.releaseId !== release.id)
142
- );
143
- } else {
144
- setValue(
145
- `tickets.${eventId}`,
146
- tickets.map((ticket) => {
147
- if (ticket.releaseId !== release.id) return ticket;
148
-
149
- return {
150
- ...ticket,
151
- quantity: newQuantity,
152
- products: ticket?.products?.slice(0, -1), // non-mutating "pop"
153
- extraFields: ticket?.extraFields?.slice(0, -1),
154
- };
155
- })
156
- );
157
- }
158
- }
159
- }, [tickets, release.id, setValue]);
160
-
161
- return (
162
- <Box
163
- sx={{
164
- p: 1,
165
- pb: 0,
166
- borderRadius: 1,
167
- bgcolor: (theme) =>
168
- theme.palette.mode === 'light' ? theme.palette.grey[100] : theme.palette.grey[800],
169
- }}
170
- >
171
- <Stack spacing={0}>
172
- <Box>
173
- <Typography variant="subtitle1" fontWeight={600}>
174
- {getReleaseTitle(release)}
175
- </Typography>
176
- </Box>
177
-
178
- <Stack direction="row" alignItems="center" justifyContent="space-between">
179
- <Stack>
180
- <Typography variant="body2">
181
- {release.price === 0 ? t('free') : fCurrency(release.price, lang, currency)}
182
- </Typography>
183
-
184
- <ReleaseDescription
185
- description={release.description}
186
- isExpanded={isDescriptionExpanded}
187
- onToggle={() => setIsDescriptionExpanded((prev) => !prev)}
188
- moreInfoLabel={t('more_info')}
189
- />
190
- </Stack>
191
-
192
- <TicketQuantityControl
193
- quantity={getSelectedQuantity(release.id)}
194
- isDisabled={release.locked}
195
- canAddFirst={!release.locked}
196
- canAddMore={!isMaxQuantity(release.id)}
197
- addLabel={t('add')}
198
- onDecrement={() => decreaseQuantity()}
199
- onIncrement={() =>
200
- release.product ? setOpenVariantDialog('increase') : increaseQuantity()
201
- }
202
- onAddFirst={() => (release.product ? setOpenVariantDialog('add') : addRelease())}
203
- />
204
- </Stack>
205
-
206
- <ReleaseDescription
207
- description={release.description}
208
- isExpanded={isDescriptionExpanded}
209
- onToggle={() => setIsDescriptionExpanded((prev) => !prev)}
210
- moreInfoLabel={t('more_info')}
211
- showCollapse
212
- />
213
- {release.extraFields && release.extraFields.length > 0 && (
214
- <ReleaseExtraFields
215
- release={release}
216
- eventId={eventId}
217
- releaseIndex={index}
218
- quantity={countTickets}
219
- />
220
- )}
221
- {release.product && (
222
- <ProductVariantsDialog
223
- eventProduct={release.product}
224
- openDialog={!!openVariantDialog}
225
- callback={openVariantDialog === 'increase' ? increaseQuantity : addRelease}
226
- onClose={() => setOpenVariantDialog(null)}
227
- selectedQuantityByVariant={getSelectedQuantityByVariant(products, tickets)}
228
- eventId={eventId}
229
- canAddOnlyOneAtATime
230
- />
231
- )}
232
- </Stack>
233
- </Box>
234
- );
235
- };
236
-
237
- export default ReleaseWithMerchandise;
@@ -1,94 +0,0 @@
1
- import React from 'react';
2
- import { Box, Button, IconButton, Stack } from '@mui/material';
3
- import { Iconify } from '@components/iconify';
4
-
5
- interface TicketQuantityControlProps {
6
- quantity: number;
7
- isDisabled: boolean;
8
- canAddFirst: boolean;
9
- canAddMore: boolean;
10
- addLabel: string;
11
- onDecrement: () => void;
12
- onIncrement: () => void;
13
- onAddFirst: () => void;
14
- }
15
-
16
- const TicketQuantityControl: React.FC<TicketQuantityControlProps> = ({
17
- quantity,
18
- isDisabled,
19
- canAddFirst,
20
- canAddMore,
21
- addLabel,
22
- onDecrement,
23
- onIncrement,
24
- onAddFirst,
25
- }) => {
26
- if (quantity > 0) {
27
- return (
28
- <Stack direction="row" spacing={{ xs: 0.5, md: 1 }} alignItems="center">
29
- <IconButton
30
- onClick={onDecrement}
31
- disabled={isDisabled || quantity <= 0}
32
- sx={{
33
- width: { xs: 36, md: 40 },
34
- height: { xs: 36, md: 40 },
35
- borderRadius: 1,
36
- border: '1px solid',
37
- borderColor: 'grey.300',
38
- }}
39
- >
40
- <Iconify icon="eva:minus-fill" />
41
- </IconButton>
42
- <Box
43
- sx={{
44
- width: { xs: 36, md: 40 },
45
- height: { xs: 36, md: 40 },
46
- borderRadius: 1,
47
- border: '1px solid',
48
- borderColor: 'grey.300',
49
- display: 'flex',
50
- alignItems: 'center',
51
- justifyContent: 'center',
52
- fontWeight: 600,
53
- }}
54
- >
55
- {quantity}
56
- </Box>
57
- <IconButton
58
- onClick={onIncrement}
59
- disabled={isDisabled || !canAddMore}
60
- sx={{
61
- width: { xs: 36, md: 40 },
62
- height: { xs: 36, md: 40 },
63
- borderRadius: 1,
64
- bgcolor: 'primary.main',
65
- color: 'primary.contrastText',
66
- '&:hover': { bgcolor: 'primary.dark' },
67
- }}
68
- >
69
- <Iconify icon="eva:plus-fill" />
70
- </IconButton>
71
- </Stack>
72
- );
73
- }
74
-
75
- return (
76
- <Button
77
- variant="contained"
78
- onClick={onAddFirst}
79
- disabled={isDisabled || !canAddFirst}
80
- sx={{
81
- height: { xs: 36, md: 40 },
82
- width: { xs: 116, md: 136 },
83
- borderRadius: 1,
84
- px: 3,
85
- textTransform: 'none',
86
- fontWeight: 600,
87
- }}
88
- >
89
- {addLabel}
90
- </Button>
91
- );
92
- };
93
-
94
- export default TicketQuantityControl;