@eventlook/sdk 1.4.46-beta.7 → 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.
- package/.claude/settings.local.json +9 -0
- package/dist/cjs/components/Image.js +29 -14
- package/dist/cjs/components/Image.js.map +1 -1
- package/dist/cjs/components/hook-form/FormProvider.js +2 -2
- package/dist/cjs/components/hook-form/FormProvider.js.map +1 -1
- package/dist/cjs/form/ChildEventDialog.js +3 -3
- package/dist/cjs/form/ChildEventDialog.js.map +1 -1
- package/dist/cjs/form/ContactPerson.js +1 -1
- package/dist/cjs/form/ContactPerson.js.map +1 -1
- package/dist/cjs/form/Payment.js +2 -2
- package/dist/cjs/form/Payment.js.map +1 -1
- package/dist/cjs/form/PaymentOverviewBox.js +61 -47
- package/dist/cjs/form/PaymentOverviewBox.js.map +1 -1
- package/dist/cjs/form/PaymentPending.js +4 -1
- package/dist/cjs/form/PaymentPending.js.map +1 -1
- package/dist/cjs/form/ReleaseWithMerchandise.js +48 -57
- package/dist/cjs/form/ReleaseWithMerchandise.js.map +1 -1
- package/dist/cjs/form/TicketForm.js +25 -43
- package/dist/cjs/form/TicketForm.js.map +1 -1
- package/dist/cjs/form/TicketSelection.js +6 -5
- package/dist/cjs/form/TicketSelection.js.map +1 -1
- package/dist/cjs/form/TicketWithMerchandiseSelection.js +5 -3
- package/dist/cjs/form/TicketWithMerchandiseSelection.js.map +1 -1
- package/dist/cjs/form/index.js +1 -1
- package/dist/cjs/form/index.js.map +1 -1
- package/dist/cjs/form/payment/FeeBox.js +16 -4
- package/dist/cjs/form/payment/FeeBox.js.map +1 -1
- package/dist/cjs/form/payment/PaymentOverviewCheckbox.js +28 -34
- package/dist/cjs/form/payment/PaymentOverviewCheckbox.js.map +1 -1
- package/dist/cjs/form/product/ProductCard.js +36 -117
- package/dist/cjs/form/product/ProductCard.js.map +1 -1
- package/dist/cjs/form/product/ProductVariantsDialog.js +96 -158
- package/dist/cjs/form/product/ProductVariantsDialog.js.map +1 -1
- package/dist/cjs/locales/cs.js +2 -17
- package/dist/cjs/locales/cs.js.map +1 -1
- package/dist/cjs/locales/en.js +2 -17
- package/dist/cjs/locales/en.js.map +1 -1
- package/dist/cjs/locales/es.js +1 -16
- package/dist/cjs/locales/es.js.map +1 -1
- package/dist/cjs/locales/pl.js +1 -16
- package/dist/cjs/locales/pl.js.map +1 -1
- package/dist/cjs/locales/sk.js +1 -16
- package/dist/cjs/locales/sk.js.map +1 -1
- package/dist/cjs/locales/uk.js +1 -16
- package/dist/cjs/locales/uk.js.map +1 -1
- package/dist/cjs/utils/data/global.js +0 -2
- package/dist/cjs/utils/data/global.js.map +1 -1
- package/dist/esm/components/Image.js +30 -15
- package/dist/esm/components/Image.js.map +1 -1
- package/dist/esm/components/hook-form/FormProvider.js +2 -2
- package/dist/esm/components/hook-form/FormProvider.js.map +1 -1
- package/dist/esm/form/ChildEventDialog.js +3 -3
- package/dist/esm/form/ChildEventDialog.js.map +1 -1
- package/dist/esm/form/ContactPerson.js +1 -1
- package/dist/esm/form/ContactPerson.js.map +1 -1
- package/dist/esm/form/Payment.js +2 -2
- package/dist/esm/form/Payment.js.map +1 -1
- package/dist/esm/form/PaymentOverviewBox.js +62 -48
- package/dist/esm/form/PaymentOverviewBox.js.map +1 -1
- package/dist/esm/form/PaymentPending.js +4 -1
- package/dist/esm/form/PaymentPending.js.map +1 -1
- package/dist/esm/form/ReleaseWithMerchandise.js +49 -58
- package/dist/esm/form/ReleaseWithMerchandise.js.map +1 -1
- package/dist/esm/form/TicketForm.js +27 -45
- package/dist/esm/form/TicketForm.js.map +1 -1
- package/dist/esm/form/TicketSelection.js +6 -5
- package/dist/esm/form/TicketSelection.js.map +1 -1
- package/dist/esm/form/TicketWithMerchandiseSelection.js +6 -4
- package/dist/esm/form/TicketWithMerchandiseSelection.js.map +1 -1
- package/dist/esm/form/index.js +1 -1
- package/dist/esm/form/index.js.map +1 -1
- package/dist/esm/form/payment/FeeBox.js +17 -5
- package/dist/esm/form/payment/FeeBox.js.map +1 -1
- package/dist/esm/form/payment/PaymentOverviewCheckbox.js +30 -36
- package/dist/esm/form/payment/PaymentOverviewCheckbox.js.map +1 -1
- package/dist/esm/form/product/ProductCard.js +37 -118
- package/dist/esm/form/product/ProductCard.js.map +1 -1
- package/dist/esm/form/product/ProductVariantsDialog.js +98 -160
- package/dist/esm/form/product/ProductVariantsDialog.js.map +1 -1
- package/dist/esm/locales/cs.js +2 -17
- package/dist/esm/locales/cs.js.map +1 -1
- package/dist/esm/locales/en.js +2 -17
- package/dist/esm/locales/en.js.map +1 -1
- package/dist/esm/locales/es.js +1 -16
- package/dist/esm/locales/es.js.map +1 -1
- package/dist/esm/locales/pl.js +1 -16
- package/dist/esm/locales/pl.js.map +1 -1
- package/dist/esm/locales/sk.js +1 -16
- package/dist/esm/locales/sk.js.map +1 -1
- package/dist/esm/locales/uk.js +1 -16
- package/dist/esm/locales/uk.js.map +1 -1
- package/dist/esm/utils/data/global.js +1 -2
- package/dist/esm/utils/data/global.js.map +1 -1
- package/dist/types/components/Image.d.ts +4 -4
- package/dist/types/form/style.d.ts +1 -1
- package/package.json +2 -8
- package/rollup.config.mjs +0 -2
- package/src/components/Image.tsx +48 -27
- package/src/components/hook-form/FormProvider.tsx +2 -5
- package/src/form/ChildEventDialog.tsx +3 -3
- package/src/form/ContactPerson.tsx +1 -1
- package/src/form/MerchandiseSelection.tsx +29 -0
- package/src/form/Payment.tsx +2 -2
- package/src/form/PaymentOverviewBox.tsx +122 -89
- package/src/form/PaymentPending.tsx +1 -1
- package/src/form/ReleaseWithMerchandise.tsx +230 -0
- package/src/form/TicketForm.tsx +25 -63
- package/src/form/{tickets/TicketSelection.tsx → TicketSelection.tsx} +128 -24
- package/src/form/{tickets/TicketSelectionMap.tsx → TicketSelectionMap.tsx} +1 -9
- package/src/form/{tickets/TicketWithMerchandiseSelection.tsx → TicketWithMerchandiseSelection.tsx} +7 -3
- package/src/form/index.tsx +1 -3
- package/src/form/payment/FeeBox.tsx +31 -4
- package/src/form/payment/PaymentOverviewCheckbox.tsx +56 -57
- package/src/form/product/ProductCard.tsx +59 -179
- package/src/form/product/ProductVariantsDialog.tsx +140 -253
- package/src/locales/cs.tsx +2 -17
- package/src/locales/en.tsx +2 -17
- package/src/locales/es.tsx +1 -16
- package/src/locales/pl.tsx +1 -16
- package/src/locales/sk.tsx +1 -16
- package/src/locales/uk.tsx +1 -16
- package/src/utils/data/global.ts +0 -1
- package/tsconfig.json +1 -2
- package/.env.example +0 -1
- package/dist/cjs/_virtual/_commonjsHelpers.js +0 -8
- package/dist/cjs/_virtual/_commonjsHelpers.js.map +0 -1
- package/dist/cjs/_virtual/index.js +0 -6
- package/dist/cjs/_virtual/index.js.map +0 -1
- package/dist/cjs/_virtual/index2.js +0 -6
- package/dist/cjs/_virtual/index2.js.map +0 -1
- package/dist/cjs/_virtual/index3.js +0 -6
- package/dist/cjs/_virtual/index3.js.map +0 -1
- package/dist/cjs/_virtual/react-is.development.js +0 -6
- package/dist/cjs/_virtual/react-is.development.js.map +0 -1
- package/dist/cjs/_virtual/react-is.development2.js +0 -6
- package/dist/cjs/_virtual/react-is.development2.js.map +0 -1
- package/dist/cjs/_virtual/react-is.production.js +0 -6
- package/dist/cjs/_virtual/react-is.production.js.map +0 -1
- package/dist/cjs/_virtual/react-is.production.min.js +0 -6
- package/dist/cjs/_virtual/react-is.production.min.js.map +0 -1
- package/dist/cjs/form/PaymentOverviewDrawer.js +0 -149
- package/dist/cjs/form/PaymentOverviewDrawer.js.map +0 -1
- package/dist/cjs/form/TicketQuantityControl.js +0 -51
- package/dist/cjs/form/TicketQuantityControl.js.map +0 -1
- package/dist/cjs/form/TicketSelectionMobile.js +0 -98
- package/dist/cjs/form/TicketSelectionMobile.js.map +0 -1
- package/dist/cjs/form/merchandise/MerchandiseSelection.js +0 -14
- package/dist/cjs/form/merchandise/MerchandiseSelection.js.map +0 -1
- package/dist/cjs/form/merchandise/MerchandiseSlider.js +0 -40
- package/dist/cjs/form/merchandise/MerchandiseSlider.js.map +0 -1
- package/dist/cjs/form/merchendise/MerchandiseSelection.js +0 -19
- package/dist/cjs/form/merchendise/MerchandiseSelection.js.map +0 -1
- package/dist/cjs/form/merchendise/MerchandiseSlider.js +0 -75
- package/dist/cjs/form/merchendise/MerchandiseSlider.js.map +0 -1
- package/dist/cjs/form/services/index.js +0 -134
- package/dist/cjs/form/services/index.js.map +0 -1
- package/dist/cjs/form/tickets/ReleaseDescription.js +0 -23
- package/dist/cjs/form/tickets/ReleaseDescription.js.map +0 -1
- package/dist/cjs/form/tickets/ReleaseWithMerchandise.js +0 -141
- package/dist/cjs/form/tickets/ReleaseWithMerchandise.js.map +0 -1
- package/dist/cjs/form/tickets/TicketQuantityControl.js +0 -52
- package/dist/cjs/form/tickets/TicketQuantityControl.js.map +0 -1
- package/dist/cjs/form/tickets/TicketSelection.js +0 -139
- package/dist/cjs/form/tickets/TicketSelection.js.map +0 -1
- package/dist/cjs/form/tickets/TicketSelectionMap.js +0 -73
- package/dist/cjs/form/tickets/TicketSelectionMap.js.map +0 -1
- package/dist/cjs/form/tickets/TicketSelectionMobile.js +0 -90
- package/dist/cjs/form/tickets/TicketSelectionMobile.js.map +0 -1
- package/dist/cjs/form/tickets/TicketWithMerchandiseSelection.js +0 -117
- package/dist/cjs/form/tickets/TicketWithMerchandiseSelection.js.map +0 -1
- package/dist/esm/_virtual/_commonjsHelpers.js +0 -6
- package/dist/esm/_virtual/_commonjsHelpers.js.map +0 -1
- package/dist/esm/_virtual/index.js +0 -4
- package/dist/esm/_virtual/index.js.map +0 -1
- package/dist/esm/_virtual/index2.js +0 -4
- package/dist/esm/_virtual/index2.js.map +0 -1
- package/dist/esm/_virtual/index3.js +0 -4
- package/dist/esm/_virtual/index3.js.map +0 -1
- package/dist/esm/_virtual/react-is.development.js +0 -4
- package/dist/esm/_virtual/react-is.development.js.map +0 -1
- package/dist/esm/_virtual/react-is.development2.js +0 -4
- package/dist/esm/_virtual/react-is.development2.js.map +0 -1
- package/dist/esm/_virtual/react-is.production.js +0 -4
- package/dist/esm/_virtual/react-is.production.js.map +0 -1
- package/dist/esm/_virtual/react-is.production.min.js +0 -4
- package/dist/esm/_virtual/react-is.production.min.js.map +0 -1
- package/dist/esm/form/PaymentOverviewDrawer.js +0 -145
- package/dist/esm/form/PaymentOverviewDrawer.js.map +0 -1
- package/dist/esm/form/TicketQuantityControl.js +0 -47
- package/dist/esm/form/TicketQuantityControl.js.map +0 -1
- package/dist/esm/form/TicketSelectionMobile.js +0 -94
- package/dist/esm/form/TicketSelectionMobile.js.map +0 -1
- package/dist/esm/form/merchandise/MerchandiseSelection.js +0 -10
- package/dist/esm/form/merchandise/MerchandiseSelection.js.map +0 -1
- package/dist/esm/form/merchandise/MerchandiseSlider.js +0 -36
- package/dist/esm/form/merchandise/MerchandiseSlider.js.map +0 -1
- package/dist/esm/form/merchendise/MerchandiseSelection.js +0 -15
- package/dist/esm/form/merchendise/MerchandiseSelection.js.map +0 -1
- package/dist/esm/form/merchendise/MerchandiseSlider.js +0 -71
- package/dist/esm/form/merchendise/MerchandiseSlider.js.map +0 -1
- package/dist/esm/form/services/index.js +0 -130
- package/dist/esm/form/services/index.js.map +0 -1
- package/dist/esm/form/tickets/ReleaseDescription.js +0 -19
- package/dist/esm/form/tickets/ReleaseDescription.js.map +0 -1
- package/dist/esm/form/tickets/ReleaseWithMerchandise.js +0 -137
- package/dist/esm/form/tickets/ReleaseWithMerchandise.js.map +0 -1
- package/dist/esm/form/tickets/TicketQuantityControl.js +0 -48
- package/dist/esm/form/tickets/TicketQuantityControl.js.map +0 -1
- package/dist/esm/form/tickets/TicketSelection.js +0 -135
- package/dist/esm/form/tickets/TicketSelection.js.map +0 -1
- package/dist/esm/form/tickets/TicketSelectionMap.js +0 -69
- package/dist/esm/form/tickets/TicketSelectionMap.js.map +0 -1
- package/dist/esm/form/tickets/TicketSelectionMobile.js +0 -86
- package/dist/esm/form/tickets/TicketSelectionMobile.js.map +0 -1
- package/dist/esm/form/tickets/TicketWithMerchandiseSelection.js +0 -113
- package/dist/esm/form/tickets/TicketWithMerchandiseSelection.js.map +0 -1
- package/dist/types/form/PaymentOverviewDrawer.d.ts +0 -8
- package/dist/types/form/merchendise/MerchandiseSelection.d.ts +0 -9
- package/dist/types/form/merchendise/MerchandiseSlider.d.ts +0 -10
- package/dist/types/form/merchendise/MerchendiseSlider.d.ts +0 -0
- package/src/form/PaymentOverviewDrawer.tsx +0 -228
- package/src/form/merchandise/MerchandiseSelection.tsx +0 -24
- package/src/form/merchandise/MerchandiseSlider.tsx +0 -62
- package/src/form/services/index.tsx +0 -263
- package/src/form/tickets/ReleaseDescription.tsx +0 -46
- package/src/form/tickets/ReleaseWithMerchandise.tsx +0 -239
- package/src/form/tickets/TicketQuantityControl.tsx +0 -94
- package/src/form/tickets/TicketSelectionMobile.tsx +0 -177
|
@@ -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;
|
package/src/form/TicketForm.tsx
CHANGED
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
Typography,
|
|
15
15
|
} from '@mui/material';
|
|
16
16
|
import dayjs from 'dayjs';
|
|
17
|
-
import TicketSelection from '@form/
|
|
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/
|
|
48
|
-
import TicketWithMerchandiseSelection from '@form/
|
|
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
|
|
56
|
+
import { EVENTLOOK_ORDER_FORM_ID } from '@utils/data/global.ts';
|
|
57
57
|
import ChildEventSection from './ChildEvents';
|
|
58
|
-
import TicketSelectionMap from '@form/
|
|
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(
|
|
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={
|
|
486
|
+
<Box id={EVENTLOOK_ORDER_FORM_ID}>
|
|
492
487
|
{hasGopayId ? (
|
|
493
488
|
<PaymentSuccess setIsPaying={setIsPaying} isIframe={isIframe} pixels={pixels} />
|
|
494
489
|
) : isPaying ? (
|
|
@@ -501,56 +496,32 @@ const TicketForm: React.FC<Props> = ({
|
|
|
501
496
|
isInline={isInline}
|
|
502
497
|
/>
|
|
503
498
|
) : (
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
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
|
-
|
|
518
|
-
|
|
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>
|
|
546
|
-
<StepContent
|
|
517
|
+
<StepContent>
|
|
547
518
|
<TimeslotSelection event={event} />
|
|
548
519
|
</StepContent>
|
|
549
520
|
</Step>
|
|
550
521
|
)}
|
|
551
522
|
<Step active>
|
|
552
523
|
<StepLabel>{t('event.tickets.stepper.1.title')}</StepLabel>
|
|
553
|
-
<StepContent
|
|
524
|
+
<StepContent>
|
|
554
525
|
{event.mapId && seatingIframeUrl ? (
|
|
555
526
|
<TicketSelectionMap event={event} />
|
|
556
527
|
) : event.hasMerchandise ? (
|
|
@@ -563,7 +534,7 @@ const TicketForm: React.FC<Props> = ({
|
|
|
563
534
|
{event.hasMerchandise && eventProducts.length && (
|
|
564
535
|
<Step active>
|
|
565
536
|
<StepLabel>{t('event.tickets.stepper.4.title')}</StepLabel>
|
|
566
|
-
<StepContent
|
|
537
|
+
<StepContent>
|
|
567
538
|
<MerchandiseSelection
|
|
568
539
|
eventProducts={eventProducts}
|
|
569
540
|
eventId={event.id}
|
|
@@ -572,30 +543,24 @@ 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 sx={{ pr: { xs: 0 } }}>
|
|
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>
|
|
584
|
-
<StepContent
|
|
549
|
+
<StepContent>
|
|
585
550
|
<ChildEventSection events={event.children} />
|
|
586
551
|
</StepContent>
|
|
587
552
|
</Step>
|
|
588
553
|
)}
|
|
589
554
|
<Step active>
|
|
590
555
|
<StepLabel>{t('event.tickets.stepper.2.title')}</StepLabel>
|
|
591
|
-
<StepContent
|
|
556
|
+
<StepContent>
|
|
592
557
|
<ContactPerson event={event} />
|
|
593
558
|
</StepContent>
|
|
594
559
|
</Step>
|
|
595
560
|
{event.hasMerchandise && showShippingMethods() && (
|
|
596
561
|
<Step active>
|
|
597
562
|
<StepLabel>{t('event.tickets.stepper.5.title')}</StepLabel>
|
|
598
|
-
<StepContent
|
|
563
|
+
<StepContent>
|
|
599
564
|
<Shipping event={event} />
|
|
600
565
|
</StepContent>
|
|
601
566
|
</Step>
|
|
@@ -606,12 +571,12 @@ const TicketForm: React.FC<Props> = ({
|
|
|
606
571
|
`event.tickets.stepper.3.${values.isPaymentVerify ? 'title_verify' : 'title'}`
|
|
607
572
|
)}
|
|
608
573
|
</StepLabel>
|
|
609
|
-
<StepContent
|
|
574
|
+
<StepContent>
|
|
610
575
|
<Payment event={event} />
|
|
611
576
|
</StepContent>
|
|
612
577
|
</Step>
|
|
613
578
|
</Stepper>
|
|
614
|
-
<Stack mt={2} ml={
|
|
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}
|
|
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}
|
|
616
|
+
<Link href={href} {...other}>
|
|
655
617
|
{children}
|
|
656
618
|
</Link>
|
|
657
619
|
);
|
|
@@ -1,23 +1,36 @@
|
|
|
1
1
|
import React, { useEffect, useRef, useState } from 'react';
|
|
2
2
|
import { useFormContext, useWatch } from 'react-hook-form';
|
|
3
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
Box,
|
|
5
|
+
Button,
|
|
6
|
+
Divider,
|
|
7
|
+
Grid,
|
|
8
|
+
IconButton,
|
|
9
|
+
MenuItem,
|
|
10
|
+
Skeleton,
|
|
11
|
+
Stack,
|
|
12
|
+
Typography,
|
|
13
|
+
} from '@mui/material';
|
|
14
|
+
import { RHFSelect } from '@components/hook-form';
|
|
4
15
|
import { ITicketForm, ITicketFormTicket } from '@utils/types/ticket.type';
|
|
5
16
|
import useEventActiveReleases from '@hooks/data/useEventActiveReleases';
|
|
17
|
+
import { fCurrency } from '@utils/formatNumber';
|
|
18
|
+
import { Iconify } from '@components/iconify';
|
|
6
19
|
import { groupBy } from '@utils/global';
|
|
7
20
|
import { IReleaseShort } from '@utils/types/release.type';
|
|
21
|
+
import FeeBox from '@form/payment/FeeBox';
|
|
8
22
|
import { IEvent } from '@utils/types/event.type';
|
|
9
23
|
import useResponsive from '@hooks/useResponsive';
|
|
10
24
|
import ReleaseExtraFields from '@form/extra-field/ReleaseExtraFields';
|
|
11
25
|
import { EventType } from '@utils/data/event';
|
|
12
26
|
import useGlobal from '@hooks/useGlobal.ts';
|
|
13
|
-
import TicketSelectionMobile from './TicketSelectionMobile';
|
|
14
27
|
|
|
15
28
|
interface Props {
|
|
16
29
|
event: IEvent;
|
|
17
30
|
}
|
|
18
31
|
|
|
19
32
|
const TicketSelection: React.FC<Props> = ({ event }) => {
|
|
20
|
-
const { t } = useGlobal();
|
|
33
|
+
const { t, lang } = useGlobal();
|
|
21
34
|
const isMobile = useResponsive('down', 'md');
|
|
22
35
|
const { setValue, watch } = useFormContext<ITicketForm>();
|
|
23
36
|
const tickets = useWatch({
|
|
@@ -65,11 +78,11 @@ const TicketSelection: React.FC<Props> = ({ event }) => {
|
|
|
65
78
|
);
|
|
66
79
|
};
|
|
67
80
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
81
|
+
const getAvailableTicketsForRelease = (release: ITicketFormTicket): number => {
|
|
82
|
+
const selectedRelease = activeReleases?.find((item) => item.id === release.releaseId);
|
|
83
|
+
const availableQuantity = selectedRelease ? selectedRelease.availableTickets : 0;
|
|
84
|
+
return availableQuantity > 10 ? 10 : availableQuantity;
|
|
85
|
+
};
|
|
73
86
|
|
|
74
87
|
const countReleaseCategories = (): number => {
|
|
75
88
|
const grouped = groupBy(activeReleases || [], 'releaseCategoryName');
|
|
@@ -175,26 +188,117 @@ const TicketSelection: React.FC<Props> = ({ event }) => {
|
|
|
175
188
|
};
|
|
176
189
|
|
|
177
190
|
return (
|
|
178
|
-
<Stack
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
191
|
+
<Stack spacing={3} direction="column" divider={<Divider sx={{ borderStyle: 'dashed' }} />}>
|
|
192
|
+
{tickets.map((item, index) => (
|
|
193
|
+
<Box key={index}>
|
|
194
|
+
<Grid container spacing={3}>
|
|
195
|
+
<Grid item xs={12} md={6}>
|
|
196
|
+
{showLoading ? (
|
|
197
|
+
<Skeleton
|
|
198
|
+
variant="rounded"
|
|
199
|
+
sx={{
|
|
200
|
+
width: '100%',
|
|
201
|
+
height: (theme) => theme.spacing(7.5),
|
|
202
|
+
}}
|
|
203
|
+
/>
|
|
204
|
+
) : (
|
|
205
|
+
<RHFSelect
|
|
206
|
+
name={`tickets.${event.id}.${index}.releaseId`}
|
|
207
|
+
value={item.releaseId}
|
|
208
|
+
label={
|
|
209
|
+
index > 0
|
|
210
|
+
? t('form.labels.add_another_release')
|
|
211
|
+
: t('form.labels.release_category_price')
|
|
212
|
+
}
|
|
213
|
+
maxHeight="calc(100vh - 2rem)"
|
|
214
|
+
onChange={(e) => {
|
|
215
|
+
setValue(`tickets.${event.id}.${index}.releaseId`, Number(e.target.value));
|
|
216
|
+
setValue(`tickets.${event.id}.${index}.extraFields`, []);
|
|
217
|
+
}}
|
|
218
|
+
>
|
|
219
|
+
<MenuItem key={0} value="">
|
|
220
|
+
{t('choose')}
|
|
221
|
+
</MenuItem>
|
|
222
|
+
{activeReleases?.map((activeRelease) => (
|
|
223
|
+
<MenuItem
|
|
224
|
+
key={activeRelease.id}
|
|
225
|
+
value={activeRelease.id}
|
|
226
|
+
disabled={
|
|
227
|
+
isReleaseSelected(activeRelease.id) ||
|
|
228
|
+
(activeRelease.locked &&
|
|
229
|
+
!soldOutReleaseCategoryNames.includes(activeRelease.releaseCategoryName))
|
|
230
|
+
}
|
|
231
|
+
>
|
|
232
|
+
{activeRelease.releaseCategoryName} - {activeRelease.name}:{' '}
|
|
233
|
+
{activeRelease.price === 0
|
|
234
|
+
? t('free')
|
|
235
|
+
: fCurrency(activeRelease.price, lang, event.currency)}
|
|
236
|
+
</MenuItem>
|
|
237
|
+
))}
|
|
238
|
+
</RHFSelect>
|
|
239
|
+
)}
|
|
240
|
+
</Grid>
|
|
241
|
+
<Grid key={index} item xs={12} md={6}>
|
|
242
|
+
{showLoading ? (
|
|
243
|
+
<Skeleton
|
|
244
|
+
variant="rounded"
|
|
245
|
+
sx={{
|
|
246
|
+
width: '100%',
|
|
247
|
+
height: (theme) => theme.spacing(7.5),
|
|
248
|
+
}}
|
|
249
|
+
/>
|
|
250
|
+
) : (
|
|
251
|
+
<Stack direction="row" alignItems="center" spacing={1}>
|
|
252
|
+
<RHFSelect
|
|
253
|
+
name={`tickets.${event.id}.${index}.quantity`}
|
|
254
|
+
value={item.quantity}
|
|
255
|
+
label={t('form.labels.quantity')}
|
|
256
|
+
>
|
|
257
|
+
{[...Array(getAvailableTicketsForRelease(item))].map((_, index2) => (
|
|
258
|
+
<MenuItem
|
|
259
|
+
key={index2}
|
|
260
|
+
value={index2 + 1}
|
|
261
|
+
disabled={isQuantityDisabled(index2 + 1, item.releaseId)}
|
|
262
|
+
>
|
|
263
|
+
{index2 + 1}
|
|
264
|
+
</MenuItem>
|
|
265
|
+
))}
|
|
266
|
+
{!item.releaseId && (
|
|
267
|
+
<MenuItem disabled sx={{ textTransform: 'unset!important' }}>
|
|
268
|
+
{t('event.tickets.stepper.1.quantity_select')}
|
|
269
|
+
</MenuItem>
|
|
270
|
+
)}
|
|
271
|
+
</RHFSelect>
|
|
272
|
+
{item.releaseId && item.quantity && (
|
|
273
|
+
<Box>
|
|
274
|
+
<IconButton color="primary" onClick={() => removeTicket(index)}>
|
|
275
|
+
<Iconify icon="carbon:trash-can" />
|
|
276
|
+
</IconButton>
|
|
277
|
+
</Box>
|
|
278
|
+
)}
|
|
279
|
+
</Stack>
|
|
280
|
+
)}
|
|
281
|
+
</Grid>
|
|
282
|
+
</Grid>
|
|
283
|
+
{activeReleases && item.releaseId && (
|
|
284
|
+
<Typography
|
|
285
|
+
variant="caption"
|
|
286
|
+
content="div"
|
|
287
|
+
mt={2}
|
|
288
|
+
mb={getRelease(item.releaseId)?.extraFields?.length ? 2 : 0}
|
|
289
|
+
display="block"
|
|
290
|
+
>
|
|
291
|
+
{getRelease(item.releaseId)?.description ?? ''}
|
|
292
|
+
</Typography>
|
|
293
|
+
)}
|
|
294
|
+
{getExtraFields(item.releaseId, index)}
|
|
295
|
+
</Box>
|
|
296
|
+
))}
|
|
194
297
|
<Box>
|
|
195
298
|
<Typography variant="caption" component="div" fontStyle="italic" mb={2}>
|
|
196
299
|
*{t('event.tickets.stepper.1.max_ticket_quantity')}
|
|
197
300
|
</Typography>
|
|
301
|
+
{isMobile && <FeeBox event={event} align="right" />}
|
|
198
302
|
</Box>
|
|
199
303
|
</Stack>
|
|
200
304
|
);
|
|
@@ -5,7 +5,6 @@ import { Button } from '@mui/material';
|
|
|
5
5
|
import { iframe, TicketSelection } from '@seat-picker/seat-picker-sdk';
|
|
6
6
|
import { useFormContext } from 'react-hook-form';
|
|
7
7
|
import { ITicketForm, ITicketFormTicket, ITicketLocation } from '@utils/types/ticket.type.ts';
|
|
8
|
-
import Iconify from '@components/iconify/Iconify';
|
|
9
8
|
|
|
10
9
|
interface Props {
|
|
11
10
|
event: IEvent;
|
|
@@ -66,7 +65,7 @@ const TicketSelectionMap: React.FC<Props> = ({ event }) => {
|
|
|
66
65
|
|
|
67
66
|
return (
|
|
68
67
|
<Button
|
|
69
|
-
variant="
|
|
68
|
+
variant="contained"
|
|
70
69
|
onClick={() =>
|
|
71
70
|
iframe.openPicker({
|
|
72
71
|
eventId: String(event.id),
|
|
@@ -75,13 +74,6 @@ const TicketSelectionMap: React.FC<Props> = ({ event }) => {
|
|
|
75
74
|
clientId: uuid,
|
|
76
75
|
})
|
|
77
76
|
}
|
|
78
|
-
sx={{
|
|
79
|
-
width: { xs: '100%' },
|
|
80
|
-
color: 'text.primary',
|
|
81
|
-
borderColor: (theme) => theme.palette.grey['300'],
|
|
82
|
-
'& .MuiButton-endIcon': { ml: 0, fontSize: '1.5em' },
|
|
83
|
-
}}
|
|
84
|
-
endIcon={<Iconify icon="eva:chevron-right-outline" />}
|
|
85
77
|
>
|
|
86
78
|
{t('form.labels.open_map')}
|
|
87
79
|
</Button>
|