@eventlook/sdk 1.4.0 → 1.4.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 (44) hide show
  1. package/README.md +4 -4
  2. package/dist/cjs/context/GlobalContext.js +1 -1
  3. package/dist/cjs/context/GlobalContext.js.map +1 -1
  4. package/dist/cjs/form/ChildEventCard.js +1 -3
  5. package/dist/cjs/form/ChildEventCard.js.map +1 -1
  6. package/dist/cjs/form/ReleaseWithMerchandise.js +4 -2
  7. package/dist/cjs/form/ReleaseWithMerchandise.js.map +1 -1
  8. package/dist/cjs/form/TicketForm.js +17 -14
  9. package/dist/cjs/form/TicketForm.js.map +1 -1
  10. package/dist/cjs/form/TicketSelection.js +5 -3
  11. package/dist/cjs/form/TicketSelection.js.map +1 -1
  12. package/dist/cjs/form/TicketWithMerchandiseSelection.js +1 -1
  13. package/dist/cjs/form/TicketWithMerchandiseSelection.js.map +1 -1
  14. package/dist/cjs/form/extra-field/ReleaseExtraFields.js +40 -18
  15. package/dist/cjs/form/extra-field/ReleaseExtraFields.js.map +1 -1
  16. package/dist/cjs/form/product/ProductCard.js +1 -3
  17. package/dist/cjs/form/product/ProductCard.js.map +1 -1
  18. package/dist/esm/context/GlobalContext.js +1 -1
  19. package/dist/esm/context/GlobalContext.js.map +1 -1
  20. package/dist/esm/form/ChildEventCard.js +1 -3
  21. package/dist/esm/form/ChildEventCard.js.map +1 -1
  22. package/dist/esm/form/ReleaseWithMerchandise.js +5 -3
  23. package/dist/esm/form/ReleaseWithMerchandise.js.map +1 -1
  24. package/dist/esm/form/TicketForm.js +17 -14
  25. package/dist/esm/form/TicketForm.js.map +1 -1
  26. package/dist/esm/form/TicketSelection.js +6 -4
  27. package/dist/esm/form/TicketSelection.js.map +1 -1
  28. package/dist/esm/form/TicketWithMerchandiseSelection.js +1 -1
  29. package/dist/esm/form/TicketWithMerchandiseSelection.js.map +1 -1
  30. package/dist/esm/form/extra-field/ReleaseExtraFields.js +42 -20
  31. package/dist/esm/form/extra-field/ReleaseExtraFields.js.map +1 -1
  32. package/dist/esm/form/product/ProductCard.js +1 -3
  33. package/dist/esm/form/product/ProductCard.js.map +1 -1
  34. package/dist/types/form/ReleaseWithMerchandise.d.ts +1 -0
  35. package/dist/types/form/extra-field/ReleaseExtraFields.d.ts +4 -2
  36. package/package.json +1 -1
  37. package/src/context/GlobalContext.tsx +1 -1
  38. package/src/form/ChildEventCard.tsx +4 -3
  39. package/src/form/ReleaseWithMerchandise.tsx +10 -1
  40. package/src/form/TicketForm.tsx +19 -14
  41. package/src/form/TicketSelection.tsx +12 -3
  42. package/src/form/TicketWithMerchandiseSelection.tsx +2 -1
  43. package/src/form/extra-field/ReleaseExtraFields.tsx +57 -24
  44. package/src/form/product/ProductCard.tsx +1 -3
@@ -69,7 +69,7 @@ const TicketWithMerchandiseSelection = ({ event: event$1 }) => {
69
69
  !activeReleases && event$1.type !== event.EventType.RECURRING ? (React.createElement(material.Skeleton, { variant: "rounded", sx: {
70
70
  width: '100%',
71
71
  height: (theme) => theme.spacing(7.5),
72
- } })) : (activeReleases?.map((release) => (React.createElement(ReleaseWithMerchandise.default, { key: release.id, eventId: event$1.id, release: release, activeReleases: activeReleases, currency: event$1.currency })))),
72
+ } })) : (activeReleases?.map((release, index) => (React.createElement(ReleaseWithMerchandise.default, { key: release.id, eventId: event$1.id, release: release, activeReleases: activeReleases, currency: event$1.currency, index: index })))),
73
73
  !activeReleases && event$1.type === event.EventType.RECURRING && (React.createElement(material.Typography, { variant: "h5" }, t('event.tickets.stepper.1.select_timeslot'))),
74
74
  !!activeReleases && !activeReleases.length && (React.createElement(material.Typography, { variant: "h5" }, t('event.tickets.stepper.1.no_tickets'))),
75
75
  React.createElement(material.Box, null,
@@ -1 +1 @@
1
- {"version":3,"file":"TicketWithMerchandiseSelection.js","sources":["../../../src/form/TicketWithMerchandiseSelection.tsx"],"sourcesContent":["import React, { useEffect, useMemo, useRef } from 'react';\nimport { useFormContext, useWatch } from 'react-hook-form';\nimport { Box, Divider, Skeleton, Stack, Typography } from '@mui/material';\nimport { ITicketForm, ITicketFormTicket } from '@utils/types/ticket.type';\nimport useEventActiveReleases from '@hooks/data/useEventActiveReleases';\nimport { groupBy } from '@utils/global';\nimport { IReleaseShort } from '@utils/types/release.type';\nimport FeeBox from '@form/payment/FeeBox';\nimport { IEvent } from '@utils/types/event.type';\nimport useResponsive from '@hooks/useResponsive';\nimport ReleaseWithMerchandise from '@form/ReleaseWithMerchandise';\nimport { EventType } from '@utils/data/event';\nimport useGlobal from '@hooks/useGlobal.ts';\n\ninterface Props {\n event: IEvent;\n}\n\nconst TicketWithMerchandiseSelection: React.FC<Props> = ({ event }) => {\n const { t } = useGlobal();\n const isMobile = useResponsive('down', 'md');\n const { setValue, watch } = useFormContext<ITicketForm>();\n const tickets: ITicketFormTicket[] = useWatch({ name: `tickets.${event.id}`, defaultValue: [] });\n const eventTimeslotId = watch('eventTimeslotId');\n const { data: activeReleases, mutate } = useEventActiveReleases(\n event.id,\n false,\n event.type === EventType.RECURRING ? eventTimeslotId : undefined\n );\n\n useEffect(() => {\n selectedTickets();\n }, [tickets]);\n\n const countReleaseCategories = (): number => {\n const grouped = groupBy(activeReleases || [], 'releaseCategoryName');\n return Object.keys(grouped).length;\n };\n\n const selectedReleaseIsSoldOut = (releases: IReleaseShort[] | undefined) => {\n const lockedSelectedReleases: boolean[] | undefined = releases?.map((item, index) => {\n const nextRelease = releases?.find(\n (item2) =>\n item2.releaseCategoryName === item.releaseCategoryName && item2.order === item.order++\n );\n const selected = tickets.find((ticket) => ticket.releaseId === item.id);\n return !!nextRelease && item.locked && !!selected && index + 1 == tickets.length;\n });\n return lockedSelectedReleases && lockedSelectedReleases.includes(true);\n };\n\n const countUnlockedReleases = () => activeReleases?.filter((item) => !item.locked).length || 0;\n\n const selectedTickets = async () => {\n const releases = await mutate();\n const allFilled = tickets.filter((item) => !item.releaseId || !item.quantity);\n\n const soldOutReleaseCategories = activeReleases?.filter((release) =>\n tickets.find(\n (ticket) =>\n release.id === ticket.releaseId &&\n ticket.quantity === release.availableTickets &&\n release.availableTickets !== 10\n )\n );\n\n if (\n (soldOutReleaseCategories &&\n selectedReleaseIsSoldOut(releases) &&\n tickets.length < soldOutReleaseCategories.length + countUnlockedReleases() &&\n !allFilled.length) ||\n (activeReleases &&\n soldOutReleaseCategories?.length &&\n activeReleases?.length > tickets.length &&\n tickets.length < soldOutReleaseCategories.length + countUnlockedReleases() &&\n !allFilled.length) ||\n (tickets.length < countReleaseCategories() && !allFilled.length)\n ) {\n setValue(`tickets.${event.id}`, [\n ...tickets,\n {\n releaseId: '',\n quantity: '',\n itemName: '',\n price: 0,\n products: [],\n extraFields: [],\n },\n ]);\n }\n };\n\n return (\n <Stack spacing={3} direction=\"column\" divider={<Divider sx={{ borderStyle: 'dashed' }} />}>\n {!activeReleases && event.type !== EventType.RECURRING ? (\n <Skeleton\n variant=\"rounded\"\n sx={{\n width: '100%',\n height: (theme) => theme.spacing(7.5),\n }}\n />\n ) : (\n activeReleases?.map((release) => (\n <ReleaseWithMerchandise\n key={release.id}\n eventId={event.id}\n release={release}\n activeReleases={activeReleases}\n currency={event.currency}\n />\n ))\n )}\n {!activeReleases && event.type === EventType.RECURRING && (\n <Typography variant=\"h5\">{t('event.tickets.stepper.1.select_timeslot')}</Typography>\n )}\n {!!activeReleases && !activeReleases.length && (\n <Typography variant=\"h5\">{t('event.tickets.stepper.1.no_tickets')}</Typography>\n )}\n <Box>\n <Typography variant=\"caption\" component=\"div\" fontStyle=\"italic\" mb={2}>\n *{t('event.tickets.stepper.1.max_ticket_quantity')}\n </Typography>\n {isMobile && <FeeBox event={event} align=\"right\" />}\n </Box>\n </Stack>\n );\n};\n\nexport default TicketWithMerchandiseSelection;\n"],"names":["event","useGlobal","useResponsive","useFormContext","useWatch","useEventActiveReleases","EventType","useEffect","groupBy","Stack","Divider","Skeleton","ReleaseWithMerchandise","Typography","Box","FeeBox"],"mappings":"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"}
1
+ {"version":3,"file":"TicketWithMerchandiseSelection.js","sources":["../../../src/form/TicketWithMerchandiseSelection.tsx"],"sourcesContent":["import React, { useEffect, useMemo, useRef } from 'react';\nimport { useFormContext, useWatch } from 'react-hook-form';\nimport { Box, Divider, Skeleton, Stack, Typography } from '@mui/material';\nimport { ITicketForm, ITicketFormTicket } from '@utils/types/ticket.type';\nimport useEventActiveReleases from '@hooks/data/useEventActiveReleases';\nimport { groupBy } from '@utils/global';\nimport { IReleaseShort } from '@utils/types/release.type';\nimport FeeBox from '@form/payment/FeeBox';\nimport { IEvent } from '@utils/types/event.type';\nimport useResponsive from '@hooks/useResponsive';\nimport ReleaseWithMerchandise from '@form/ReleaseWithMerchandise';\nimport { EventType } from '@utils/data/event';\nimport useGlobal from '@hooks/useGlobal.ts';\n\ninterface Props {\n event: IEvent;\n}\n\nconst TicketWithMerchandiseSelection: React.FC<Props> = ({ event }) => {\n const { t } = useGlobal();\n const isMobile = useResponsive('down', 'md');\n const { setValue, watch } = useFormContext<ITicketForm>();\n const tickets: ITicketFormTicket[] = useWatch({ name: `tickets.${event.id}`, defaultValue: [] });\n const eventTimeslotId = watch('eventTimeslotId');\n const { data: activeReleases, mutate } = useEventActiveReleases(\n event.id,\n false,\n event.type === EventType.RECURRING ? eventTimeslotId : undefined\n );\n\n useEffect(() => {\n selectedTickets();\n }, [tickets]);\n\n const countReleaseCategories = (): number => {\n const grouped = groupBy(activeReleases || [], 'releaseCategoryName');\n return Object.keys(grouped).length;\n };\n\n const selectedReleaseIsSoldOut = (releases: IReleaseShort[] | undefined) => {\n const lockedSelectedReleases: boolean[] | undefined = releases?.map((item, index) => {\n const nextRelease = releases?.find(\n (item2) =>\n item2.releaseCategoryName === item.releaseCategoryName && item2.order === item.order++\n );\n const selected = tickets.find((ticket) => ticket.releaseId === item.id);\n return !!nextRelease && item.locked && !!selected && index + 1 == tickets.length;\n });\n return lockedSelectedReleases && lockedSelectedReleases.includes(true);\n };\n\n const countUnlockedReleases = () => activeReleases?.filter((item) => !item.locked).length || 0;\n\n const selectedTickets = async () => {\n const releases = await mutate();\n const allFilled = tickets.filter((item) => !item.releaseId || !item.quantity);\n\n const soldOutReleaseCategories = activeReleases?.filter((release) =>\n tickets.find(\n (ticket) =>\n release.id === ticket.releaseId &&\n ticket.quantity === release.availableTickets &&\n release.availableTickets !== 10\n )\n );\n\n if (\n (soldOutReleaseCategories &&\n selectedReleaseIsSoldOut(releases) &&\n tickets.length < soldOutReleaseCategories.length + countUnlockedReleases() &&\n !allFilled.length) ||\n (activeReleases &&\n soldOutReleaseCategories?.length &&\n activeReleases?.length > tickets.length &&\n tickets.length < soldOutReleaseCategories.length + countUnlockedReleases() &&\n !allFilled.length) ||\n (tickets.length < countReleaseCategories() && !allFilled.length)\n ) {\n setValue(`tickets.${event.id}`, [\n ...tickets,\n {\n releaseId: '',\n quantity: '',\n itemName: '',\n price: 0,\n products: [],\n extraFields: [],\n },\n ]);\n }\n };\n\n return (\n <Stack spacing={3} direction=\"column\" divider={<Divider sx={{ borderStyle: 'dashed' }} />}>\n {!activeReleases && event.type !== EventType.RECURRING ? (\n <Skeleton\n variant=\"rounded\"\n sx={{\n width: '100%',\n height: (theme) => theme.spacing(7.5),\n }}\n />\n ) : (\n activeReleases?.map((release, index) => (\n <ReleaseWithMerchandise\n key={release.id}\n eventId={event.id}\n release={release}\n activeReleases={activeReleases}\n currency={event.currency}\n index={index}\n />\n ))\n )}\n {!activeReleases && event.type === EventType.RECURRING && (\n <Typography variant=\"h5\">{t('event.tickets.stepper.1.select_timeslot')}</Typography>\n )}\n {!!activeReleases && !activeReleases.length && (\n <Typography variant=\"h5\">{t('event.tickets.stepper.1.no_tickets')}</Typography>\n )}\n <Box>\n <Typography variant=\"caption\" component=\"div\" fontStyle=\"italic\" mb={2}>\n *{t('event.tickets.stepper.1.max_ticket_quantity')}\n </Typography>\n {isMobile && <FeeBox event={event} align=\"right\" />}\n </Box>\n </Stack>\n );\n};\n\nexport default TicketWithMerchandiseSelection;\n"],"names":["event","useGlobal","useResponsive","useFormContext","useWatch","useEventActiveReleases","EventType","useEffect","groupBy","Stack","Divider","Skeleton","ReleaseWithMerchandise","Typography","Box","FeeBox"],"mappings":"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"}
@@ -8,31 +8,53 @@ var ExtraField = require('./ExtraField.js');
8
8
  var reactHookForm = require('react-hook-form');
9
9
  var useGlobal = require('../../hooks/useGlobal.js');
10
10
 
11
- const ReleseExtraFields = ({ release, eventId }) => {
11
+ const ReleaseExtraFields = ({ release, eventId, releaseIndex, quantity }) => {
12
12
  const { t } = useGlobal.default();
13
- const { setValue } = reactHookForm.useFormContext();
14
- const tickets = reactHookForm.useWatch({ name: `tickets.${eventId}`, defaultValue: [] });
15
- const addedRelease = tickets.find((ticket) => ticket.releaseId === release.id);
16
- const countTickets = addedRelease?.quantity || 0;
17
- const releaseIndex = tickets.findIndex((ticket) => ticket.releaseId === release.id);
13
+ const { getValues, setValue } = reactHookForm.useFormContext();
18
14
  React.useEffect(() => {
19
- if (release.extraFields && release.extraFields.length !== addedRelease?.extraFields.length) {
20
- const newExtraFields = [];
21
- for (let i = 0; i < release.extraFields.length; i++) {
22
- newExtraFields.push(release.extraFields.map((field) => ({ eventExtraFieldId: field.id, value: '' })));
23
- }
24
- setValue(`tickets.${eventId}.${releaseIndex}.extraFields`, newExtraFields);
15
+ if (releaseIndex < 0 || quantity <= 0 || !release?.extraFields?.length)
16
+ return;
17
+ const path = `tickets.${eventId}.${releaseIndex}.extraFields`;
18
+ const current = getValues(path) || [];
19
+ const wantRows = quantity;
20
+ const wantCols = release.extraFields.length;
21
+ const curRows = current.length;
22
+ const curCols = current[0]?.length ?? 0;
23
+ const buildMatrix = () => {
24
+ const matrix = Array.from({ length: wantRows }, (_, r) => Array.from({ length: wantCols }, (_, c) => {
25
+ const prev = current[r]?.[c];
26
+ return {
27
+ eventExtraFieldId: release.extraFields ? Number(release.extraFields[c].id) : 0,
28
+ value: typeof prev?.value === 'string' ? prev.value : '',
29
+ };
30
+ }));
31
+ return matrix;
32
+ };
33
+ const needResize = curRows !== wantRows || curCols !== wantCols;
34
+ const needFixIds = !needResize &&
35
+ current.some((row, r) => row.some((cell, c) => release.extraFields &&
36
+ Number(cell?.eventExtraFieldId) !== Number(release.extraFields[c].id)));
37
+ if (needResize || needFixIds) {
38
+ const next = buildMatrix();
39
+ setValue(path, next, {
40
+ shouldDirty: true,
41
+ shouldValidate: false,
42
+ shouldTouch: false,
43
+ });
25
44
  }
26
- }, [tickets]);
27
- return (React.createElement(material.Stack, { spacing: 2 }, [...Array(countTickets)].map((_, index) => (React.createElement(material.Stack, { key: index, spacing: 1 },
45
+ }, [releaseIndex, quantity, release.extraFields, getValues, setValue]);
46
+ if (releaseIndex < 0 || quantity <= 0)
47
+ return null;
48
+ return (React.createElement(material.Stack, { spacing: 2 }, Array.from({ length: quantity }).map((_, rowIdx) => (React.createElement(material.Stack, { key: rowIdx, spacing: 1 },
28
49
  React.createElement(material.Typography, { variant: "body1", fontWeight: 700 },
29
- index + 1,
50
+ rowIdx + 1,
30
51
  ". ",
31
52
  t('form.labels.ticket')),
32
53
  React.createElement(material.Box, null,
33
- React.createElement(material.Grid, { container: true, spacing: 3 }, release?.extraFields?.map((field, index2) => (React.createElement(material.Grid, { key: field.id, item: true, xs: 12, md: 6 },
34
- React.createElement(ExtraField.default, { extraField: field, name: `tickets.${releaseIndex}.extraFields.${index}.${index2}.value`, size: "small" })))))))))));
54
+ React.createElement(material.Grid, { container: true, spacing: 3 }, release.extraFields?.map((field, colIdx) => (React.createElement(material.Grid, { key: field.id, item: true, xs: 12, md: 6 },
55
+ React.createElement(ExtraField.default, { extraField: field, name: `tickets.${releaseIndex}.extraFields.${rowIdx}.${colIdx}.value`, size: "small" })))))))))));
35
56
  };
57
+ var ReleaseExtraFields$1 = React.memo(ReleaseExtraFields);
36
58
 
37
- exports.default = ReleseExtraFields;
59
+ exports.default = ReleaseExtraFields$1;
38
60
  //# sourceMappingURL=ReleaseExtraFields.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ReleaseExtraFields.js","sources":["../../../../src/form/extra-field/ReleaseExtraFields.tsx"],"sourcesContent":["import React, { useEffect } from 'react';\nimport { Box, Grid, Stack, Typography } from '@mui/material';\nimport ExtraField from '@form/extra-field/ExtraField';\nimport { IReleaseShort } from '@utils/types/release.type';\nimport { ITicketForm, ITicketFormTicket } from '@utils/types/ticket.type';\nimport { useFormContext, useWatch } from 'react-hook-form';\nimport { IExtraFieldForm } from '@utils/types/extra-field.type';\nimport useGlobal from '@hooks/useGlobal.ts';\n\ninterface Props {\n release: IReleaseShort;\n eventId: number;\n}\n\nconst ReleseExtraFields: React.FC<Props> = ({ release, eventId }) => {\n const { t } = useGlobal();\n const { setValue } = useFormContext<ITicketForm>();\n const tickets: ITicketFormTicket[] = useWatch({ name: `tickets.${eventId}`, defaultValue: [] });\n const addedRelease = tickets.find((ticket) => ticket.releaseId === release.id);\n const countTickets = addedRelease?.quantity || 0;\n const releaseIndex = tickets.findIndex((ticket) => ticket.releaseId === release.id);\n\n useEffect(() => {\n if (release.extraFields && release.extraFields.length !== addedRelease?.extraFields.length) {\n const newExtraFields: IExtraFieldForm[][] = [];\n for (let i = 0; i < release.extraFields.length; i++) {\n newExtraFields.push(\n release.extraFields.map((field) => ({ eventExtraFieldId: field.id, value: '' }))\n );\n }\n setValue(`tickets.${eventId}.${releaseIndex}.extraFields`, newExtraFields);\n }\n }, [tickets]);\n\n return (\n <Stack spacing={2}>\n {[...Array(countTickets)].map((_, index) => (\n <Stack key={index} spacing={1}>\n <Typography variant=\"body1\" fontWeight={700}>\n {index + 1}. {t('form.labels.ticket')}\n </Typography>\n <Box>\n <Grid container spacing={3}>\n {release?.extraFields?.map((field, index2) => (\n <Grid key={field.id} item xs={12} md={6}>\n <ExtraField\n extraField={field}\n name={`tickets.${releaseIndex}.extraFields.${index}.${index2}.value`}\n size=\"small\"\n />\n </Grid>\n ))}\n </Grid>\n </Box>\n </Stack>\n ))}\n </Stack>\n );\n};\n\nexport default ReleseExtraFields;\n"],"names":["useGlobal","useFormContext","useWatch","useEffect","Stack","Typography","Box","Grid","ExtraField"],"mappings":";;;;;;;;;;AAcA,MAAM,iBAAiB,GAAoB,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,KAAI;AAClE,IAAA,MAAM,EAAE,CAAC,EAAE,GAAGA,iBAAS,EAAE;AACzB,IAAA,MAAM,EAAE,QAAQ,EAAE,GAAGC,4BAAc,EAAe;AAClD,IAAA,MAAM,OAAO,GAAwBC,sBAAQ,CAAC,EAAE,IAAI,EAAE,CAAA,QAAA,EAAW,OAAO,CAAA,CAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;AAC/F,IAAA,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,SAAS,KAAK,OAAO,CAAC,EAAE,CAAC;AAC9E,IAAA,MAAM,YAAY,GAAG,YAAY,EAAE,QAAQ,IAAI,CAAC;AAChD,IAAA,MAAM,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,SAAS,KAAK,OAAO,CAAC,EAAE,CAAC;IAEnFC,eAAS,CAAC,MAAK;AACb,QAAA,IAAI,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,KAAK,YAAY,EAAE,WAAW,CAAC,MAAM,EAAE;YAC1F,MAAM,cAAc,GAAwB,EAAE;AAC9C,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACnD,gBAAA,cAAc,CAAC,IAAI,CACjB,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,MAAM,EAAE,iBAAiB,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,CACjF;;YAEH,QAAQ,CAAC,WAAW,OAAO,CAAA,CAAA,EAAI,YAAY,CAAA,YAAA,CAAc,EAAE,cAAc,CAAC;;AAE9E,KAAC,EAAE,CAAC,OAAO,CAAC,CAAC;AAEb,IAAA,QACE,KAAA,CAAA,aAAA,CAACC,cAAK,EAAA,EAAC,OAAO,EAAE,CAAC,EAAA,EACd,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,MACrC,KAAA,CAAA,aAAA,CAACA,cAAK,EAAA,EAAC,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAA;QAC3B,KAAA,CAAA,aAAA,CAACC,mBAAU,IAAC,OAAO,EAAC,OAAO,EAAC,UAAU,EAAE,GAAG,EAAA;AACxC,YAAA,KAAK,GAAG,CAAC;;YAAI,CAAC,CAAC,oBAAoB,CAAC,CAC1B;AACb,QAAA,KAAA,CAAA,aAAA,CAACC,YAAG,EAAA,IAAA;AACF,YAAA,KAAA,CAAA,aAAA,CAACC,aAAI,EAAA,EAAC,SAAS,EAAA,IAAA,EAAC,OAAO,EAAE,CAAC,EAAA,EACvB,OAAO,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,MACvC,KAAA,CAAA,aAAA,CAACA,aAAI,IAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,QAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAA;AACrC,gBAAA,KAAA,CAAA,aAAA,CAACC,kBAAU,EAAA,EACT,UAAU,EAAE,KAAK,EACjB,IAAI,EAAE,CAAA,QAAA,EAAW,YAAY,CAAA,aAAA,EAAgB,KAAK,IAAI,MAAM,CAAA,MAAA,CAAQ,EACpE,IAAI,EAAC,OAAO,EAAA,CACZ,CACG,CACR,CAAC,CACG,CACH,CACA,CACT,CAAC,CACI;AAEZ;;;;"}
1
+ {"version":3,"file":"ReleaseExtraFields.js","sources":["../../../../src/form/extra-field/ReleaseExtraFields.tsx"],"sourcesContent":["import React, { useEffect, memo } from 'react';\nimport { Box, Grid, Stack, Typography } from '@mui/material';\nimport ExtraField from '@form/extra-field/ExtraField';\nimport { IReleaseShort } from '@utils/types/release.type';\nimport { ITicketForm } from '@utils/types/ticket.type';\nimport { useFormContext } from 'react-hook-form';\nimport { IExtraFieldForm } from '@utils/types/extra-field.type';\nimport useGlobal from '@hooks/useGlobal.ts';\n\ninterface Props {\n release: IReleaseShort;\n eventId: number;\n releaseIndex: number;\n quantity: number;\n}\n\nconst ReleaseExtraFields: React.FC<Props> = ({ release, eventId, releaseIndex, quantity }) => {\n const { t } = useGlobal();\n const { getValues, setValue } = useFormContext<ITicketForm>();\n\n useEffect(() => {\n if (releaseIndex < 0 || quantity <= 0 || !release?.extraFields?.length) return;\n\n const path = `tickets.${eventId}.${releaseIndex}.extraFields` as const;\n const current = (getValues(path) as IExtraFieldForm[][] | undefined) || [];\n const wantRows = quantity;\n const wantCols = release.extraFields.length;\n\n const curRows = current.length;\n const curCols = current[0]?.length ?? 0;\n\n const buildMatrix = (): IExtraFieldForm[][] => {\n const matrix: IExtraFieldForm[][] = Array.from({ length: wantRows }, (_, r) =>\n Array.from({ length: wantCols }, (_, c) => {\n const prev = current[r]?.[c];\n return {\n eventExtraFieldId: release.extraFields ? Number(release.extraFields[c].id) : 0,\n value: typeof prev?.value === 'string' ? prev!.value : '',\n };\n })\n );\n return matrix;\n };\n\n const needResize = curRows !== wantRows || curCols !== wantCols;\n const needFixIds =\n !needResize &&\n current.some((row, r) =>\n row.some(\n (cell, c) =>\n release.extraFields &&\n Number(cell?.eventExtraFieldId) !== Number(release.extraFields[c].id)\n )\n );\n\n if (needResize || needFixIds) {\n const next = buildMatrix();\n setValue(path, next, {\n shouldDirty: true,\n shouldValidate: false,\n shouldTouch: false,\n });\n }\n }, [releaseIndex, quantity, release.extraFields, getValues, setValue]);\n\n if (releaseIndex < 0 || quantity <= 0) return null;\n\n return (\n <Stack spacing={2}>\n {Array.from({ length: quantity }).map((_, rowIdx) => (\n <Stack key={rowIdx} spacing={1}>\n <Typography variant=\"body1\" fontWeight={700}>\n {rowIdx + 1}. {t('form.labels.ticket')}\n </Typography>\n <Box>\n <Grid container spacing={3}>\n {release.extraFields?.map((field, colIdx) => (\n <Grid key={field.id} item xs={12} md={6}>\n <ExtraField\n extraField={field}\n name={`tickets.${releaseIndex}.extraFields.${rowIdx}.${colIdx}.value`}\n size=\"small\"\n />\n </Grid>\n ))}\n </Grid>\n </Box>\n </Stack>\n ))}\n </Stack>\n );\n};\n\nexport default memo(ReleaseExtraFields);\n"],"names":["useGlobal","useFormContext","useEffect","Stack","Typography","Box","Grid","ExtraField","memo"],"mappings":";;;;;;;;;;AAgBA,MAAM,kBAAkB,GAAoB,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAI;AAC3F,IAAA,MAAM,EAAE,CAAC,EAAE,GAAGA,iBAAS,EAAE;IACzB,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAGC,4BAAc,EAAe;IAE7DC,eAAS,CAAC,MAAK;AACb,QAAA,IAAI,YAAY,GAAG,CAAC,IAAI,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM;YAAE;AAExE,QAAA,MAAM,IAAI,GAAG,CAAA,QAAA,EAAW,OAAO,CAAA,CAAA,EAAI,YAAY,cAAuB;QACtE,MAAM,OAAO,GAAI,SAAS,CAAC,IAAI,CAAqC,IAAI,EAAE;QAC1E,MAAM,QAAQ,GAAG,QAAQ;AACzB,QAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,MAAM;AAE3C,QAAA,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM;QAC9B,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC;QAEvC,MAAM,WAAW,GAAG,MAA0B;AAC5C,YAAA,MAAM,MAAM,GAAwB,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KACxE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAI;gBACxC,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC5B,OAAO;oBACL,iBAAiB,EAAE,OAAO,CAAC,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC;AAC9E,oBAAA,KAAK,EAAE,OAAO,IAAI,EAAE,KAAK,KAAK,QAAQ,GAAG,IAAK,CAAC,KAAK,GAAG,EAAE;iBAC1D;aACF,CAAC,CACH;AACD,YAAA,OAAO,MAAM;AACf,SAAC;QAED,MAAM,UAAU,GAAG,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,QAAQ;QAC/D,MAAM,UAAU,GACd,CAAC,UAAU;YACX,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,KAClB,GAAG,CAAC,IAAI,CACN,CAAC,IAAI,EAAE,CAAC,KACN,OAAO,CAAC,WAAW;AACnB,gBAAA,MAAM,CAAC,IAAI,EAAE,iBAAiB,CAAC,KAAK,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CACxE,CACF;AAEH,QAAA,IAAI,UAAU,IAAI,UAAU,EAAE;AAC5B,YAAA,MAAM,IAAI,GAAG,WAAW,EAAE;AAC1B,YAAA,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE;AACnB,gBAAA,WAAW,EAAE,IAAI;AACjB,gBAAA,cAAc,EAAE,KAAK;AACrB,gBAAA,WAAW,EAAE,KAAK;AACnB,aAAA,CAAC;;AAEN,KAAC,EAAE,CAAC,YAAY,EAAE,QAAQ,EAAE,OAAO,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AAEtE,IAAA,IAAI,YAAY,GAAG,CAAC,IAAI,QAAQ,IAAI,CAAC;AAAE,QAAA,OAAO,IAAI;AAElD,IAAA,QACE,KAAA,CAAA,aAAA,CAACC,cAAK,EAAA,EAAC,OAAO,EAAE,CAAC,EAAA,EACd,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,MAC9C,KAAA,CAAA,aAAA,CAACA,cAAK,IAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAA;QAC5B,KAAA,CAAA,aAAA,CAACC,mBAAU,IAAC,OAAO,EAAC,OAAO,EAAC,UAAU,EAAE,GAAG,EAAA;AACxC,YAAA,MAAM,GAAG,CAAC;;YAAI,CAAC,CAAC,oBAAoB,CAAC,CAC3B;AACb,QAAA,KAAA,CAAA,aAAA,CAACC,YAAG,EAAA,IAAA;AACF,YAAA,KAAA,CAAA,aAAA,CAACC,aAAI,EAAA,EAAC,SAAS,EAAA,IAAA,EAAC,OAAO,EAAE,CAAC,EAAA,EACvB,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,MACtC,KAAA,CAAA,aAAA,CAACA,aAAI,IAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,QAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAA;AACrC,gBAAA,KAAA,CAAA,aAAA,CAACC,kBAAU,EAAA,EACT,UAAU,EAAE,KAAK,EACjB,IAAI,EAAE,CAAA,QAAA,EAAW,YAAY,CAAA,aAAA,EAAgB,MAAM,IAAI,MAAM,CAAA,MAAA,CAAQ,EACrE,IAAI,EAAC,OAAO,EAAA,CACZ,CACG,CACR,CAAC,CACG,CACH,CACA,CACT,CAAC,CACI;AAEZ,CAAC;AAED,2BAAeC,UAAI,CAAC,kBAAkB,CAAC;;;;"}
@@ -39,9 +39,7 @@ const ProductCard = ({ eventProduct, eventId, isOnlyMerchandise }) => {
39
39
  setValue(`products.${eventId}`, [...products, selectedVariant]);
40
40
  }
41
41
  };
42
- const eventNotEmpty = React.useMemo(() => {
43
- return products.some((product) => product?.quantity);
44
- }, [products]);
42
+ const eventNotEmpty = React.useMemo(() => products.some((product) => product?.quantity), [products]);
45
43
  return (React.createElement(React.Fragment, null,
46
44
  React.createElement(material.Card, { sx: { p: 2 } },
47
45
  React.createElement(material.Stack, { spacing: 1 },
@@ -1 +1 @@
1
- {"version":3,"file":"ProductCard.js","sources":["../../../../src/form/product/ProductCard.tsx"],"sourcesContent":["import { Button, Card, Stack, Typography } from '@mui/material';\nimport { Iconify } from '@components/iconify';\nimport Image from '@components/Image';\nimport { IEventProduct } from '@utils/types/event-product.type';\nimport React, { useMemo, useState } from 'react';\nimport ProductVariantsDialog from '@form/product/ProductVariantsDialog';\nimport { IEventProductForm } from '@utils/types/product.type';\nimport { useFormContext, useWatch } from 'react-hook-form';\nimport { ITicketForm, ITicketFormTicket } from '@utils/types/ticket.type';\nimport { getSelectedQuantityByVariant } from '@utils/product';\nimport useGlobal from '@hooks/useGlobal.ts';\n\ninterface Props {\n eventProduct: IEventProduct;\n eventId: number;\n isOnlyMerchandise?: boolean;\n}\n\nconst ProductCard: React.FC<Props> = ({ eventProduct, eventId, isOnlyMerchandise }) => {\n const { t } = useGlobal();\n const [openVariantDialog, setOpenVariantDialog] = useState<boolean>(false);\n const { setValue } = useFormContext<ITicketForm>();\n const tickets: ITicketFormTicket[] = useWatch({ name: `tickets.${eventId}`, defaultValue: [] });\n const products: IEventProductForm[] = useWatch({ name: `products.${eventId}`, defaultValue: [] });\n\n const onSelectVariant = (selectedVariant: IEventProductForm) => {\n const variant = products.find(\n (product) => product.eventProductVariantId === selectedVariant.eventProductVariantId\n );\n\n if (variant) {\n if (selectedVariant.quantity === 0) {\n setValue(\n `products.${eventId}`,\n products.filter(\n (product) => product.eventProductVariantId !== variant.eventProductVariantId\n )\n );\n } else {\n setValue(\n `products.${eventId}`,\n products.map((product) => {\n if (product.eventProductVariantId === selectedVariant.eventProductVariantId) {\n return {\n ...product,\n quantity: selectedVariant.quantity,\n };\n }\n return product;\n })\n );\n }\n } else if (selectedVariant.quantity !== 0) {\n setValue(`products.${eventId}`, [...products, selectedVariant]);\n }\n };\n\n const eventNotEmpty = useMemo(() => {\n return products.some((product) => product?.quantity);\n }, [products]);\n\n return (\n <>\n <Card sx={{ p: 2 }}>\n <Stack spacing={1}>\n <Image src={eventProduct.product.previewImage.url} ratio=\"1/1\" sx={{ borderRadius: 2 }} />\n <Typography variant=\"h5\">{eventProduct.product.name}</Typography>\n <Typography\n variant=\"caption\"\n dangerouslySetInnerHTML={{ __html: eventProduct.product.description }}\n sx={{\n height: 44,\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n display: '-webkit-box',\n WebkitLineClamp: 2,\n WebkitBoxOrient: 'vertical',\n }}\n />\n <Button\n variant=\"contained\"\n onClick={() => setOpenVariantDialog(true)}\n fullWidth\n startIcon={\n eventNotEmpty ? <Iconify icon=\"eva:edit-fill\" /> : <Iconify icon=\"eva:plus-fill\" />\n }\n >\n {eventNotEmpty ? t('change') : t('add')}\n </Button>\n </Stack>\n </Card>\n <ProductVariantsDialog\n eventProduct={eventProduct}\n eventId={eventId}\n openDialog={openVariantDialog}\n onClose={() => setOpenVariantDialog(false)}\n callback={onSelectVariant}\n selectedQuantityByVariant={getSelectedQuantityByVariant(products, tickets)}\n isOnlyMerchandise={isOnlyMerchandise}\n />\n </>\n );\n};\n\nexport default ProductCard;\n"],"names":["useGlobal","useState","useFormContext","useWatch","useMemo","Card","Stack","Image","Typography","Button","Iconify","ProductVariantsDialog","getSelectedQuantityByVariant"],"mappings":"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"}
1
+ {"version":3,"file":"ProductCard.js","sources":["../../../../src/form/product/ProductCard.tsx"],"sourcesContent":["import { Button, Card, Stack, Typography } from '@mui/material';\nimport { Iconify } from '@components/iconify';\nimport Image from '@components/Image';\nimport { IEventProduct } from '@utils/types/event-product.type';\nimport React, { useMemo, useState } from 'react';\nimport ProductVariantsDialog from '@form/product/ProductVariantsDialog';\nimport { IEventProductForm } from '@utils/types/product.type';\nimport { useFormContext, useWatch } from 'react-hook-form';\nimport { ITicketForm, ITicketFormTicket } from '@utils/types/ticket.type';\nimport { getSelectedQuantityByVariant } from '@utils/product';\nimport useGlobal from '@hooks/useGlobal.ts';\n\ninterface Props {\n eventProduct: IEventProduct;\n eventId: number;\n isOnlyMerchandise?: boolean;\n}\n\nconst ProductCard: React.FC<Props> = ({ eventProduct, eventId, isOnlyMerchandise }) => {\n const { t } = useGlobal();\n const [openVariantDialog, setOpenVariantDialog] = useState<boolean>(false);\n const { setValue } = useFormContext<ITicketForm>();\n const tickets: ITicketFormTicket[] = useWatch({ name: `tickets.${eventId}`, defaultValue: [] });\n const products: IEventProductForm[] = useWatch({ name: `products.${eventId}`, defaultValue: [] });\n\n const onSelectVariant = (selectedVariant: IEventProductForm) => {\n const variant = products.find(\n (product) => product.eventProductVariantId === selectedVariant.eventProductVariantId\n );\n\n if (variant) {\n if (selectedVariant.quantity === 0) {\n setValue(\n `products.${eventId}`,\n products.filter(\n (product) => product.eventProductVariantId !== variant.eventProductVariantId\n )\n );\n } else {\n setValue(\n `products.${eventId}`,\n products.map((product) => {\n if (product.eventProductVariantId === selectedVariant.eventProductVariantId) {\n return {\n ...product,\n quantity: selectedVariant.quantity,\n };\n }\n return product;\n })\n );\n }\n } else if (selectedVariant.quantity !== 0) {\n setValue(`products.${eventId}`, [...products, selectedVariant]);\n }\n };\n\n const eventNotEmpty = useMemo(() => products.some((product) => product?.quantity), [products]);\n\n return (\n <>\n <Card sx={{ p: 2 }}>\n <Stack spacing={1}>\n <Image src={eventProduct.product.previewImage.url} ratio=\"1/1\" sx={{ borderRadius: 2 }} />\n <Typography variant=\"h5\">{eventProduct.product.name}</Typography>\n <Typography\n variant=\"caption\"\n dangerouslySetInnerHTML={{ __html: eventProduct.product.description }}\n sx={{\n height: 44,\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n display: '-webkit-box',\n WebkitLineClamp: 2,\n WebkitBoxOrient: 'vertical',\n }}\n />\n <Button\n variant=\"contained\"\n onClick={() => setOpenVariantDialog(true)}\n fullWidth\n startIcon={\n eventNotEmpty ? <Iconify icon=\"eva:edit-fill\" /> : <Iconify icon=\"eva:plus-fill\" />\n }\n >\n {eventNotEmpty ? t('change') : t('add')}\n </Button>\n </Stack>\n </Card>\n <ProductVariantsDialog\n eventProduct={eventProduct}\n eventId={eventId}\n openDialog={openVariantDialog}\n onClose={() => setOpenVariantDialog(false)}\n callback={onSelectVariant}\n selectedQuantityByVariant={getSelectedQuantityByVariant(products, tickets)}\n isOnlyMerchandise={isOnlyMerchandise}\n />\n </>\n );\n};\n\nexport default ProductCard;\n"],"names":["useGlobal","useState","useFormContext","useWatch","useMemo","Card","Stack","Image","Typography","Button","Iconify","ProductVariantsDialog","getSelectedQuantityByVariant"],"mappings":";;;;;;;;;;;;;AAkBA,MAAM,WAAW,GAAoB,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,iBAAiB,EAAE,KAAI;AACpF,IAAA,MAAM,EAAE,CAAC,EAAE,GAAGA,iBAAS,EAAE;IACzB,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAGC,cAAQ,CAAU,KAAK,CAAC;AAC1E,IAAA,MAAM,EAAE,QAAQ,EAAE,GAAGC,4BAAc,EAAe;AAClD,IAAA,MAAM,OAAO,GAAwBC,sBAAQ,CAAC,EAAE,IAAI,EAAE,CAAA,QAAA,EAAW,OAAO,CAAA,CAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;AAC/F,IAAA,MAAM,QAAQ,GAAwBA,sBAAQ,CAAC,EAAE,IAAI,EAAE,CAAA,SAAA,EAAY,OAAO,CAAA,CAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;AAEjG,IAAA,MAAM,eAAe,GAAG,CAAC,eAAkC,KAAI;AAC7D,QAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAC3B,CAAC,OAAO,KAAK,OAAO,CAAC,qBAAqB,KAAK,eAAe,CAAC,qBAAqB,CACrF;QAED,IAAI,OAAO,EAAE;AACX,YAAA,IAAI,eAAe,CAAC,QAAQ,KAAK,CAAC,EAAE;gBAClC,QAAQ,CACN,YAAY,OAAO,CAAA,CAAE,EACrB,QAAQ,CAAC,MAAM,CACb,CAAC,OAAO,KAAK,OAAO,CAAC,qBAAqB,KAAK,OAAO,CAAC,qBAAqB,CAC7E,CACF;;iBACI;AACL,gBAAA,QAAQ,CACN,CAAA,SAAA,EAAY,OAAO,CAAA,CAAE,EACrB,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,KAAI;oBACvB,IAAI,OAAO,CAAC,qBAAqB,KAAK,eAAe,CAAC,qBAAqB,EAAE;wBAC3E,OAAO;AACL,4BAAA,GAAG,OAAO;4BACV,QAAQ,EAAE,eAAe,CAAC,QAAQ;yBACnC;;AAEH,oBAAA,OAAO,OAAO;iBACf,CAAC,CACH;;;AAEE,aAAA,IAAI,eAAe,CAAC,QAAQ,KAAK,CAAC,EAAE;AACzC,YAAA,QAAQ,CAAC,CAAA,SAAA,EAAY,OAAO,CAAA,CAAE,EAAE,CAAC,GAAG,QAAQ,EAAE,eAAe,CAAC,CAAC;;AAEnE,KAAC;IAED,MAAM,aAAa,GAAGC,aAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,KAAK,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;AAE9F,IAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA;QACE,KAAA,CAAA,aAAA,CAACC,aAAI,IAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAA;AAChB,YAAA,KAAA,CAAA,aAAA,CAACC,cAAK,EAAA,EAAC,OAAO,EAAE,CAAC,EAAA;gBACf,KAAA,CAAA,aAAA,CAACC,aAAK,IAAC,GAAG,EAAE,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,EAAC,KAAK,EAAC,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,EAAA,CAAI;gBAC1F,KAAA,CAAA,aAAA,CAACC,mBAAU,EAAA,EAAC,OAAO,EAAC,IAAI,EAAA,EAAE,YAAY,CAAC,OAAO,CAAC,IAAI,CAAc;AACjE,gBAAA,KAAA,CAAA,aAAA,CAACA,mBAAU,EAAA,EACT,OAAO,EAAC,SAAS,EACjB,uBAAuB,EAAE,EAAE,MAAM,EAAE,YAAY,CAAC,OAAO,CAAC,WAAW,EAAE,EACrE,EAAE,EAAE;AACF,wBAAA,MAAM,EAAE,EAAE;AACV,wBAAA,YAAY,EAAE,UAAU;AACxB,wBAAA,QAAQ,EAAE,QAAQ;AAClB,wBAAA,OAAO,EAAE,aAAa;AACtB,wBAAA,eAAe,EAAE,CAAC;AAClB,wBAAA,eAAe,EAAE,UAAU;qBAC5B,EAAA,CACD;gBACF,KAAA,CAAA,aAAA,CAACC,eAAM,EAAA,EACL,OAAO,EAAC,WAAW,EACnB,OAAO,EAAE,MAAM,oBAAoB,CAAC,IAAI,CAAC,EACzC,SAAS,EAAA,IAAA,EACT,SAAS,EACP,aAAa,GAAG,KAAA,CAAA,aAAA,CAACC,eAAO,EAAA,EAAC,IAAI,EAAC,eAAe,EAAA,CAAG,GAAG,KAAA,CAAA,aAAA,CAACA,eAAO,EAAA,EAAC,IAAI,EAAC,eAAe,EAAA,CAAG,EAAA,EAGpF,aAAa,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAChC,CACH,CACH;AACP,QAAA,KAAA,CAAA,aAAA,CAACC,6BAAqB,EAAA,EACpB,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,iBAAiB,EAC7B,OAAO,EAAE,MAAM,oBAAoB,CAAC,KAAK,CAAC,EAC1C,QAAQ,EAAE,eAAe,EACzB,yBAAyB,EAAEC,oCAA4B,CAAC,QAAQ,EAAE,OAAO,CAAC,EAC1E,iBAAiB,EAAE,iBAAiB,EAAA,CACpC,CACD;AAEP;;;;"}
@@ -6,7 +6,7 @@ import { getNestedValue } from '../utils/global.js';
6
6
  const initialState = {
7
7
  lang: Languages.CS,
8
8
  setGlobal: (value) => { },
9
- showSnackbar: (text, options) => { },
9
+ showSnackbar: (text, options) => alert(text),
10
10
  t: (key) => key,
11
11
  callbacks: {
12
12
  homepage: () => { },
@@ -1 +1 @@
1
- {"version":3,"file":"GlobalContext.js","sources":["../../../src/context/GlobalContext.tsx"],"sourcesContent":["import React, { createContext, ReactNode, useMemo, useState } from 'react';\nimport { IGlobalContext } from '@utils/types/global.type';\nimport { Languages } from '@utils/data/language';\nimport * as locales from '@locales';\nimport { getNestedValue } from '@utils/global.ts';\n\nconst initialState: IGlobalContext = {\n lang: Languages.CS,\n setGlobal: (value: Partial<IGlobalContext>) => {},\n showSnackbar: (text: string, options?: { variant: 'success' | 'error' }) => {},\n t: (key) => key,\n callbacks: {\n homepage: () => {},\n tickets: () => {},\n detail: () => {},\n },\n links: {\n termsAndConditions: '',\n gdpr: '',\n },\n};\n\nconst GlobalContext = createContext(initialState);\n\ntype Props = {\n children: ReactNode;\n lang: Languages;\n callbacks: IGlobalContext['callbacks'];\n links: IGlobalContext['links'];\n showSnackbar?: IGlobalContext['showSnackbar'];\n options?: IGlobalContext['options'];\n content?: IGlobalContext['content'];\n};\n\nfunction GlobalProvider({\n children,\n lang,\n showSnackbar,\n callbacks,\n links,\n options,\n content,\n}: Props) {\n const [global, setGlobal] = useState<IGlobalContext>({\n ...initialState,\n showSnackbar: showSnackbar || initialState.showSnackbar,\n lang,\n callbacks,\n links,\n options,\n content,\n });\n\n const handleSetGlobal = (value: Partial<IGlobalContext>) => {\n setGlobal({\n ...global,\n ...value,\n options: {\n ...global.options,\n ...value.options,\n },\n });\n };\n\n const t = (key: string, params?: Record<string, string | number>) => {\n const translation = (locales as Record<Languages, any>)[lang];\n let template = getNestedValue(translation, key) || key;\n\n if (params) {\n for (const [paramKey, paramValue] of Object.entries(params)) {\n template = template.replaceAll(`{{${paramKey}}}`, String(paramValue));\n }\n }\n\n return template;\n };\n\n const memoizedValue = useMemo(\n () => ({\n ...global,\n setGlobal: handleSetGlobal,\n t,\n }),\n [global]\n );\n\n return <GlobalContext.Provider value={memoizedValue}>{children}</GlobalContext.Provider>;\n}\n\nexport { GlobalProvider, GlobalContext };\n"],"names":["locales"],"mappings":";;;;;AAMA,MAAM,YAAY,GAAmB;IACnC,IAAI,EAAE,SAAS,CAAC,EAAE;AAClB,IAAA,SAAS,EAAE,CAAC,KAA8B,QAAO;IACjD,YAAY,EAAE,CAAC,IAAY,EAAE,OAA0C,QAAO;AAC9E,IAAA,CAAC,EAAE,CAAC,GAAG,KAAK,GAAG;AACf,IAAA,SAAS,EAAE;AACT,QAAA,QAAQ,EAAE,MAAK,GAAG;AAClB,QAAA,OAAO,EAAE,MAAK,GAAG;AACjB,QAAA,MAAM,EAAE,MAAK,GAAG;AACjB,KAAA;AACD,IAAA,KAAK,EAAE;AACL,QAAA,kBAAkB,EAAE,EAAE;AACtB,QAAA,IAAI,EAAE,EAAE;AACT,KAAA;CACF;AAED,MAAM,aAAa,GAAG,aAAa,CAAC,YAAY;AAYhD,SAAS,cAAc,CAAC,EACtB,QAAQ,EACR,IAAI,EACJ,YAAY,EACZ,SAAS,EACT,KAAK,EACL,OAAO,EACP,OAAO,GACD,EAAA;AACN,IAAA,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAiB;AACnD,QAAA,GAAG,YAAY;AACf,QAAA,YAAY,EAAE,YAAY,IAAI,YAAY,CAAC,YAAY;QACvD,IAAI;QACJ,SAAS;QACT,KAAK;QACL,OAAO;QACP,OAAO;AACR,KAAA,CAAC;AAEF,IAAA,MAAM,eAAe,GAAG,CAAC,KAA8B,KAAI;AACzD,QAAA,SAAS,CAAC;AACR,YAAA,GAAG,MAAM;AACT,YAAA,GAAG,KAAK;AACR,YAAA,OAAO,EAAE;gBACP,GAAG,MAAM,CAAC,OAAO;gBACjB,GAAG,KAAK,CAAC,OAAO;AACjB,aAAA;AACF,SAAA,CAAC;AACJ,KAAC;AAED,IAAA,MAAM,CAAC,GAAG,CAAC,GAAW,EAAE,MAAwC,KAAI;AAClE,QAAA,MAAM,WAAW,GAAIA,KAAkC,CAAC,IAAI,CAAC;QAC7D,IAAI,QAAQ,GAAG,cAAc,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI,GAAG;QAEtD,IAAI,MAAM,EAAE;AACV,YAAA,KAAK,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AAC3D,gBAAA,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAA,EAAA,EAAK,QAAQ,CAAA,EAAA,CAAI,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;;;AAIzE,QAAA,OAAO,QAAQ;AACjB,KAAC;AAED,IAAA,MAAM,aAAa,GAAG,OAAO,CAC3B,OAAO;AACL,QAAA,GAAG,MAAM;AACT,QAAA,SAAS,EAAE,eAAe;QAC1B,CAAC;AACF,KAAA,CAAC,EACF,CAAC,MAAM,CAAC,CACT;IAED,OAAO,KAAA,CAAA,aAAA,CAAC,aAAa,CAAC,QAAQ,EAAA,EAAC,KAAK,EAAE,aAAa,EAAA,EAAG,QAAQ,CAA0B;AAC1F;;;;"}
1
+ {"version":3,"file":"GlobalContext.js","sources":["../../../src/context/GlobalContext.tsx"],"sourcesContent":["import React, { createContext, ReactNode, useMemo, useState } from 'react';\nimport { IGlobalContext } from '@utils/types/global.type';\nimport { Languages } from '@utils/data/language';\nimport * as locales from '@locales';\nimport { getNestedValue } from '@utils/global.ts';\n\nconst initialState: IGlobalContext = {\n lang: Languages.CS,\n setGlobal: (value: Partial<IGlobalContext>) => {},\n showSnackbar: (text: string, options?: { variant: 'success' | 'error' }) => alert(text),\n t: (key) => key,\n callbacks: {\n homepage: () => {},\n tickets: () => {},\n detail: () => {},\n },\n links: {\n termsAndConditions: '',\n gdpr: '',\n },\n};\n\nconst GlobalContext = createContext(initialState);\n\ntype Props = {\n children: ReactNode;\n lang: Languages;\n callbacks: IGlobalContext['callbacks'];\n links: IGlobalContext['links'];\n showSnackbar?: IGlobalContext['showSnackbar'];\n options?: IGlobalContext['options'];\n content?: IGlobalContext['content'];\n};\n\nfunction GlobalProvider({\n children,\n lang,\n showSnackbar,\n callbacks,\n links,\n options,\n content,\n}: Props) {\n const [global, setGlobal] = useState<IGlobalContext>({\n ...initialState,\n showSnackbar: showSnackbar || initialState.showSnackbar,\n lang,\n callbacks,\n links,\n options,\n content,\n });\n\n const handleSetGlobal = (value: Partial<IGlobalContext>) => {\n setGlobal({\n ...global,\n ...value,\n options: {\n ...global.options,\n ...value.options,\n },\n });\n };\n\n const t = (key: string, params?: Record<string, string | number>) => {\n const translation = (locales as Record<Languages, any>)[lang];\n let template = getNestedValue(translation, key) || key;\n\n if (params) {\n for (const [paramKey, paramValue] of Object.entries(params)) {\n template = template.replaceAll(`{{${paramKey}}}`, String(paramValue));\n }\n }\n\n return template;\n };\n\n const memoizedValue = useMemo(\n () => ({\n ...global,\n setGlobal: handleSetGlobal,\n t,\n }),\n [global]\n );\n\n return <GlobalContext.Provider value={memoizedValue}>{children}</GlobalContext.Provider>;\n}\n\nexport { GlobalProvider, GlobalContext };\n"],"names":["locales"],"mappings":";;;;;AAMA,MAAM,YAAY,GAAmB;IACnC,IAAI,EAAE,SAAS,CAAC,EAAE;AAClB,IAAA,SAAS,EAAE,CAAC,KAA8B,QAAO;IACjD,YAAY,EAAE,CAAC,IAAY,EAAE,OAA0C,KAAK,KAAK,CAAC,IAAI,CAAC;AACvF,IAAA,CAAC,EAAE,CAAC,GAAG,KAAK,GAAG;AACf,IAAA,SAAS,EAAE;AACT,QAAA,QAAQ,EAAE,MAAK,GAAG;AAClB,QAAA,OAAO,EAAE,MAAK,GAAG;AACjB,QAAA,MAAM,EAAE,MAAK,GAAG;AACjB,KAAA;AACD,IAAA,KAAK,EAAE;AACL,QAAA,kBAAkB,EAAE,EAAE;AACtB,QAAA,IAAI,EAAE,EAAE;AACT,KAAA;CACF;AAED,MAAM,aAAa,GAAG,aAAa,CAAC,YAAY;AAYhD,SAAS,cAAc,CAAC,EACtB,QAAQ,EACR,IAAI,EACJ,YAAY,EACZ,SAAS,EACT,KAAK,EACL,OAAO,EACP,OAAO,GACD,EAAA;AACN,IAAA,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAiB;AACnD,QAAA,GAAG,YAAY;AACf,QAAA,YAAY,EAAE,YAAY,IAAI,YAAY,CAAC,YAAY;QACvD,IAAI;QACJ,SAAS;QACT,KAAK;QACL,OAAO;QACP,OAAO;AACR,KAAA,CAAC;AAEF,IAAA,MAAM,eAAe,GAAG,CAAC,KAA8B,KAAI;AACzD,QAAA,SAAS,CAAC;AACR,YAAA,GAAG,MAAM;AACT,YAAA,GAAG,KAAK;AACR,YAAA,OAAO,EAAE;gBACP,GAAG,MAAM,CAAC,OAAO;gBACjB,GAAG,KAAK,CAAC,OAAO;AACjB,aAAA;AACF,SAAA,CAAC;AACJ,KAAC;AAED,IAAA,MAAM,CAAC,GAAG,CAAC,GAAW,EAAE,MAAwC,KAAI;AAClE,QAAA,MAAM,WAAW,GAAIA,KAAkC,CAAC,IAAI,CAAC;QAC7D,IAAI,QAAQ,GAAG,cAAc,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI,GAAG;QAEtD,IAAI,MAAM,EAAE;AACV,YAAA,KAAK,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AAC3D,gBAAA,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAA,EAAA,EAAK,QAAQ,CAAA,EAAA,CAAI,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;;;AAIzE,QAAA,OAAO,QAAQ;AACjB,KAAC;AAED,IAAA,MAAM,aAAa,GAAG,OAAO,CAC3B,OAAO;AACL,QAAA,GAAG,MAAM;AACT,QAAA,SAAS,EAAE,eAAe;QAC1B,CAAC;AACF,KAAA,CAAC,EACF,CAAC,MAAM,CAAC,CACT;IAED,OAAO,KAAA,CAAA,aAAA,CAAC,aAAa,CAAC,QAAQ,EAAA,EAAC,KAAK,EAAE,aAAa,EAAA,EAAG,QAAQ,CAA0B;AAC1F;;;;"}
@@ -28,9 +28,7 @@ const ChildEventCard = ({ event }) => {
28
28
  name: `products.${event.id}`,
29
29
  defaultValue: [],
30
30
  });
31
- const eventNotEmpty = useMemo(() => {
32
- return [...tickets, ...products].some((item) => item?.quantity);
33
- }, [tickets, products]);
31
+ const eventNotEmpty = useMemo(() => [...tickets, ...products].some((item) => item?.quantity), [tickets, products]);
34
32
  return (React.createElement(React.Fragment, null,
35
33
  React.createElement(Card, { sx: { p: 2 } },
36
34
  React.createElement(Grid, { container: true, spacing: 6, alignItems: "stretch" },
@@ -1 +1 @@
1
- {"version":3,"file":"ChildEventCard.js","sources":["../../../src/form/ChildEventCard.tsx"],"sourcesContent":["import useResponsive from '@hooks/useResponsive';\nimport { Box, Button, Card, Divider, Grid, Stack, Typography } from '@mui/material';\nimport { getPlaceAsString } from '@utils/place';\nimport { IEvent } from '@utils/types/event.type';\nimport React, { useMemo, useState } from 'react';\nimport ChildEventDialog from './ChildEventDialog';\nimport useGlobal from '@hooks/useGlobal';\nimport { Iconify, Image, TextIconLabel } from '@components';\nimport locationIcon from '@iconify/icons-carbon/location';\nimport calendarIcon from '@iconify/icons-carbon/calendar';\nimport userIcon from '@iconify/icons-carbon/user';\nimport dayjs from 'dayjs';\nimport { useWatch } from 'react-hook-form';\nimport { ITicketFormTicket } from '@utils/types/ticket.type';\nimport { IEventProductForm } from '@utils/types/product.type';\n\ninterface Props {\n event: IEvent;\n}\n\nconst ChildEventCard: React.FC<Props> = ({ event }) => {\n const { t } = useGlobal();\n const xs = useResponsive('only', 'xs');\n const md = useResponsive('only', 'md');\n const [openVariantDialog, setOpenVariantDialog] = useState<boolean>(false);\n const tickets = useWatch({\n name: `tickets.${event.id}`,\n defaultValue: [],\n }) as ITicketFormTicket[];\n const products = useWatch({\n name: `products.${event.id}`,\n defaultValue: [],\n }) as IEventProductForm[];\n\n const eventNotEmpty = useMemo(() => {\n return [...tickets, ...products].some((item) => item?.quantity);\n }, [tickets, products]);\n\n return (\n <>\n <Card sx={{ p: 2 }}>\n <Grid container spacing={6} alignItems=\"stretch\">\n {/* LEFT SIDE: Image + Button */}\n <Grid item xs={12} md={6} sx={{ display: 'flex', flexDirection: 'column' }}>\n <Image src={event.image.url} alt={event.name} ratio=\"16/9\" borderRadius={2} />\n <Button\n variant=\"contained\"\n onClick={() => setOpenVariantDialog(true)}\n fullWidth\n startIcon={\n eventNotEmpty ? <Iconify icon=\"eva:edit-fill\" /> : <Iconify icon=\"eva:plus-fill\" />\n }\n sx={{ mt: 2 }}\n >\n {eventNotEmpty ? t('change') : t('add')}\n </Button>\n </Grid>\n\n {/* RIGHT SIDE: Info block with bottom aligned date + organizer */}\n <Grid\n item\n xs={12}\n md={6}\n sx={{ display: 'flex', flexDirection: 'column', justifyContent: 'space-between' }}\n >\n <Stack spacing={2}>\n <Typography variant=\"h6\">{event.name}</Typography>\n\n <TextIconLabel\n icon={\n <Iconify\n icon={locationIcon}\n sx={{ mr: 0.5, mt: 0.5, width: 18, height: 18, minWidth: 18 }}\n />\n }\n value={<Box>{getPlaceAsString(event.place)}</Box>}\n sx={{ typography: 'body3', color: 'text.secondary', alignItems: 'flex-start' }}\n />\n </Stack>\n\n {/* Bottom: Date & Organizer */}\n <Stack\n direction={{ xs: 'column', sm: 'row', md: 'column', lg: 'row' }}\n spacing={2}\n p={2}\n divider={\n <Divider\n orientation={xs || md ? 'horizontal' : 'vertical'}\n flexItem\n sx={{ borderStyle: 'dashed' }}\n />\n }\n sx={{\n backgroundColor: (theme) => theme.palette.grey.A100,\n borderRadius: 1,\n }}\n >\n <Box width={{ sm: '50%', md: '100%', lg: '50%' }}>\n <TextIconLabel\n icon={<Iconify icon={calendarIcon} sx={{ minWidth: 20, height: 20, mr: 1 }} />}\n value={t('form.labels.start_date')}\n sx={{ color: 'text.secondary' }}\n />\n <Typography variant=\"body2\" fontWeight={700}>\n {dayjs(event.startDate).format('DD.MM.YYYY HH:mm')}\n </Typography>\n </Box>\n <Box width={{ sm: '50%', md: '100%', lg: '50%' }}>\n <TextIconLabel\n icon={<Iconify icon={userIcon} sx={{ minWidth: 20, height: 20, mr: 1 }} />}\n value={t('form.labels.organizer')}\n sx={{ color: 'text.secondary' }}\n />\n <Typography variant=\"body2\" fontWeight={700}>\n {event.company.displayName}\n </Typography>\n </Box>\n </Stack>\n </Grid>\n </Grid>\n </Card>\n\n <ChildEventDialog\n event={event}\n openDialog={openVariantDialog}\n onClose={() => setOpenVariantDialog(false)}\n />\n </>\n );\n};\n\nexport default ChildEventCard;\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ChildEventCard.js","sources":["../../../src/form/ChildEventCard.tsx"],"sourcesContent":["import useResponsive from '@hooks/useResponsive';\nimport { Box, Button, Card, Divider, Grid, Stack, Typography } from '@mui/material';\nimport { getPlaceAsString } from '@utils/place';\nimport { IEvent } from '@utils/types/event.type';\nimport React, { useMemo, useState } from 'react';\nimport ChildEventDialog from './ChildEventDialog';\nimport useGlobal from '@hooks/useGlobal';\nimport { Iconify, Image, TextIconLabel } from '@components';\nimport locationIcon from '@iconify/icons-carbon/location';\nimport calendarIcon from '@iconify/icons-carbon/calendar';\nimport userIcon from '@iconify/icons-carbon/user';\nimport dayjs from 'dayjs';\nimport { useWatch } from 'react-hook-form';\nimport { ITicketFormTicket } from '@utils/types/ticket.type';\nimport { IEventProductForm } from '@utils/types/product.type';\n\ninterface Props {\n event: IEvent;\n}\n\nconst ChildEventCard: React.FC<Props> = ({ event }) => {\n const { t } = useGlobal();\n const xs = useResponsive('only', 'xs');\n const md = useResponsive('only', 'md');\n const [openVariantDialog, setOpenVariantDialog] = useState<boolean>(false);\n const tickets = useWatch({\n name: `tickets.${event.id}`,\n defaultValue: [],\n }) as ITicketFormTicket[];\n const products = useWatch({\n name: `products.${event.id}`,\n defaultValue: [],\n }) as IEventProductForm[];\n\n const eventNotEmpty = useMemo(\n () => [...tickets, ...products].some((item) => item?.quantity),\n [tickets, products]\n );\n\n return (\n <>\n <Card sx={{ p: 2 }}>\n <Grid container spacing={6} alignItems=\"stretch\">\n {/* LEFT SIDE: Image + Button */}\n <Grid item xs={12} md={6} sx={{ display: 'flex', flexDirection: 'column' }}>\n <Image src={event.image.url} alt={event.name} ratio=\"16/9\" borderRadius={2} />\n <Button\n variant=\"contained\"\n onClick={() => setOpenVariantDialog(true)}\n fullWidth\n startIcon={\n eventNotEmpty ? <Iconify icon=\"eva:edit-fill\" /> : <Iconify icon=\"eva:plus-fill\" />\n }\n sx={{ mt: 2 }}\n >\n {eventNotEmpty ? t('change') : t('add')}\n </Button>\n </Grid>\n\n {/* RIGHT SIDE: Info block with bottom aligned date + organizer */}\n <Grid\n item\n xs={12}\n md={6}\n sx={{ display: 'flex', flexDirection: 'column', justifyContent: 'space-between' }}\n >\n <Stack spacing={2}>\n <Typography variant=\"h6\">{event.name}</Typography>\n\n <TextIconLabel\n icon={\n <Iconify\n icon={locationIcon}\n sx={{ mr: 0.5, mt: 0.5, width: 18, height: 18, minWidth: 18 }}\n />\n }\n value={<Box>{getPlaceAsString(event.place)}</Box>}\n sx={{ typography: 'body3', color: 'text.secondary', alignItems: 'flex-start' }}\n />\n </Stack>\n\n {/* Bottom: Date & Organizer */}\n <Stack\n direction={{ xs: 'column', sm: 'row', md: 'column', lg: 'row' }}\n spacing={2}\n p={2}\n divider={\n <Divider\n orientation={xs || md ? 'horizontal' : 'vertical'}\n flexItem\n sx={{ borderStyle: 'dashed' }}\n />\n }\n sx={{\n backgroundColor: (theme) => theme.palette.grey.A100,\n borderRadius: 1,\n }}\n >\n <Box width={{ sm: '50%', md: '100%', lg: '50%' }}>\n <TextIconLabel\n icon={<Iconify icon={calendarIcon} sx={{ minWidth: 20, height: 20, mr: 1 }} />}\n value={t('form.labels.start_date')}\n sx={{ color: 'text.secondary' }}\n />\n <Typography variant=\"body2\" fontWeight={700}>\n {dayjs(event.startDate).format('DD.MM.YYYY HH:mm')}\n </Typography>\n </Box>\n <Box width={{ sm: '50%', md: '100%', lg: '50%' }}>\n <TextIconLabel\n icon={<Iconify icon={userIcon} sx={{ minWidth: 20, height: 20, mr: 1 }} />}\n value={t('form.labels.organizer')}\n sx={{ color: 'text.secondary' }}\n />\n <Typography variant=\"body2\" fontWeight={700}>\n {event.company.displayName}\n </Typography>\n </Box>\n </Stack>\n </Grid>\n </Grid>\n </Card>\n\n <ChildEventDialog\n event={event}\n openDialog={openVariantDialog}\n onClose={() => setOpenVariantDialog(false)}\n />\n </>\n );\n};\n\nexport default ChildEventCard;\n"],"names":[],"mappings":"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"}
@@ -5,15 +5,17 @@ import ProductVariantsDialog from './product/ProductVariantsDialog.js';
5
5
  import { useFormContext, useWatch } from 'react-hook-form';
6
6
  import { fCurrency } from '../utils/formatNumber.js';
7
7
  import { getSelectedQuantityByVariant } from '../utils/product.js';
8
- import ReleseExtraFields from './extra-field/ReleaseExtraFields.js';
8
+ import ReleaseExtraFields from './extra-field/ReleaseExtraFields.js';
9
9
  import useGlobal from '../hooks/useGlobal.js';
10
10
 
11
- const ReleaseWithMerchandise = ({ eventId, release, activeReleases, currency, }) => {
11
+ const ReleaseWithMerchandise = ({ eventId, release, activeReleases, currency, index, }) => {
12
12
  const { t, lang } = useGlobal();
13
13
  const [openVariantDialog, setOpenVariantDialog] = useState(null);
14
14
  const { setValue } = useFormContext();
15
15
  const tickets = useWatch({ name: `tickets.${eventId}`, defaultValue: [] });
16
16
  const products = useWatch({ name: `products.${eventId}`, defaultValue: [] });
17
+ const addedRelease = tickets.find((ticket) => ticket.releaseId === release.id);
18
+ const countTickets = addedRelease?.quantity || 0;
17
19
  const isReleaseSelected = (id) => !!tickets.find((ticket) => ticket.releaseId === id);
18
20
  const getSelectedQuantity = (id) => tickets.find((ticket) => ticket.releaseId === id)?.quantity || 0;
19
21
  const getAvailableTicketsForRelease = (release) => {
@@ -116,7 +118,7 @@ const ReleaseWithMerchandise = ({ eventId, release, activeReleases, currency, })
116
118
  React.createElement(IconButton, { onClick: () => release.product ? setOpenVariantDialog('increase') : increaseQuantity(), size: "small", color: "primary", disabled: isMaxQuantity(release.id) },
117
119
  React.createElement(Iconify, { icon: "eva:plus-fill" })))) : (React.createElement(Button, { onClick: () => !release.locked && (release.product ? setOpenVariantDialog('add') : addRelease()), variant: "contained", disabled: release.locked }, t('add'))))),
118
120
  React.createElement(Typography, { variant: "caption", content: "div", mt: 2, mb: release.extraFields?.length ? 2 : 0, display: "block" }, release.description),
119
- release.extraFields && release.extraFields.length > 0 && (React.createElement(ReleseExtraFields, { release: release, eventId: eventId })),
121
+ release.extraFields && release.extraFields.length > 0 && (React.createElement(ReleaseExtraFields, { release: release, eventId: eventId, releaseIndex: index, quantity: countTickets })),
120
122
  release.product && (React.createElement(ProductVariantsDialog, { eventProduct: release.product, openDialog: !!openVariantDialog, callback: openVariantDialog === 'increase' ? increaseQuantity : addRelease, onClose: () => setOpenVariantDialog(null), selectedQuantityByVariant: getSelectedQuantityByVariant(products, tickets), eventId: eventId }))));
121
123
  };
122
124
 
@@ -1 +1 @@
1
- {"version":3,"file":"ReleaseWithMerchandise.js","sources":["../../../src/form/ReleaseWithMerchandise.tsx"],"sourcesContent":["import React, { useCallback, useState } from 'react';\nimport { Box, Button, IconButton, Stack, Typography } from '@mui/material';\nimport { Iconify } from '@components/iconify';\nimport ProductVariantsDialog from '@form/product/ProductVariantsDialog';\nimport { IReleaseShort } from '@utils/types/release.type';\nimport { ITicketForm, ITicketFormTicket } from '@utils/types/ticket.type';\nimport { useFormContext, useWatch } from 'react-hook-form';\nimport { IEventProductForm } from '@utils/types/product.type';\nimport { fCurrency } from '@utils/formatNumber';\nimport { Currencies } from '@utils/data/currency';\nimport { getSelectedQuantityByVariant } from '@utils/product';\nimport ReleaseExtraFields from '@form/extra-field/ReleaseExtraFields';\nimport useGlobal from '@hooks/useGlobal.ts';\n\ninterface Props {\n eventId: number;\n release: IReleaseShort;\n activeReleases: IReleaseShort[];\n currency: Currencies;\n}\n\nconst ReleaseWithMerchandise: React.FC<Props> = ({\n eventId,\n release,\n activeReleases,\n currency,\n}) => {\n const { t, lang } = useGlobal();\n const [openVariantDialog, setOpenVariantDialog] = useState<'add' | 'increase' | null>(null);\n const { setValue } = useFormContext<ITicketForm>();\n const tickets: ITicketFormTicket[] = useWatch({ name: `tickets.${eventId}`, defaultValue: [] });\n const products: IEventProductForm[] = useWatch({ name: `products.${eventId}`, defaultValue: [] });\n\n const isReleaseSelected = (id: number) => !!tickets.find((ticket) => ticket.releaseId === id);\n\n const getSelectedQuantity = (id: number) =>\n tickets.find((ticket) => ticket.releaseId === id)?.quantity || 0;\n\n const getAvailableTicketsForRelease = (release: ITicketFormTicket): number => {\n const selectedRelease = activeReleases?.find((item) => item.id === release.releaseId);\n const availableQuantity = selectedRelease ? selectedRelease.availableTickets : 0;\n return availableQuantity > 10 ? 10 : availableQuantity;\n };\n\n const isMaxQuantity = (releaseId: number) => {\n const release = tickets.find((ticket) => ticket.releaseId === releaseId);\n if (!release) return false;\n return getSelectedQuantity(releaseId) >= getAvailableTicketsForRelease(release);\n };\n\n const addRelease = (product?: IEventProductForm) => {\n setValue(`tickets.${eventId}`, [\n ...tickets,\n {\n releaseId: release.id,\n quantity: 1,\n itemName: '',\n price: 0,\n products: product ? [product] : [],\n extraFields: release.extraFields?.length\n ? [\n release.extraFields.map((field) => ({\n eventExtraFieldId: field.id,\n value: '',\n })),\n ]\n : [],\n },\n ]);\n setOpenVariantDialog(null);\n };\n\n const increaseQuantity = (product?: IEventProductForm) => {\n const addedRelease = tickets.find((ticket) => ticket.releaseId === release.id);\n if (addedRelease) {\n const newQuantity = Number(addedRelease.quantity) + 1;\n const maxQuantity = getAvailableTicketsForRelease(addedRelease);\n setValue(\n `tickets.${eventId}`,\n tickets.map((ticket) =>\n ticket.releaseId === release.id\n ? {\n ...ticket,\n quantity: newQuantity > maxQuantity ? maxQuantity : newQuantity,\n products: product ? [...ticket.products, product] : ticket.products,\n extraFields: release.extraFields?.length\n ? [\n ...ticket.extraFields,\n release.extraFields.map((field) => ({\n eventExtraFieldId: field.id,\n value: '',\n })),\n ]\n : [],\n }\n : ticket\n )\n );\n setOpenVariantDialog(null);\n }\n };\n\n const decreaseQuantity = useCallback(() => {\n const addedRelease = tickets.find((ticket) => ticket.releaseId === release.id);\n if (addedRelease) {\n const newQuantity = Number(addedRelease.quantity) - 1;\n if (newQuantity < 1) {\n setValue(\n `tickets.${eventId}`,\n tickets.filter((ticket) => ticket.releaseId !== release.id)\n );\n } else {\n setValue(\n `tickets.${eventId}`,\n tickets.map((ticket) => {\n if (ticket.releaseId !== release.id) return ticket;\n\n return {\n ...ticket,\n quantity: newQuantity,\n products: ticket?.products?.slice(0, -1), // non-mutating \"pop\"\n extraFields: ticket?.extraFields?.slice(0, -1),\n };\n })\n );\n }\n }\n }, [tickets, release.id, setValue]);\n\n return (\n <Box>\n <Stack direction=\"row\" spacing={1}>\n <Stack\n direction=\"row\"\n spacing={1}\n justifyContent=\"space-between\"\n alignItems=\"center\"\n sx={{ width: '100%', backgroundColor: 'grey.200', p: 1, pl: 1.5, borderRadius: 1 }}\n >\n <Stack direction=\"row\" spacing={2} alignItems=\"center\">\n <Stack direction=\"row\" spacing={0.5} alignItems=\"center\">\n <Iconify\n icon=\"ion:ticket-outline\"\n color=\"primary.main\"\n sx={{ width: 24, height: 24 }}\n />\n {release.product && (\n <>\n <Typography fontSize={20} lineHeight={1}>\n +\n </Typography>\n <Iconify\n icon=\"lucide-lab:shirt-t\"\n color=\"primary.main\"\n sx={{ width: 24, height: 24 }}\n />\n </>\n )}\n </Stack>\n <Typography color=\"grey.500\">\n {release.releaseCategoryName} - {release.name} -{' '}\n {fCurrency(release.price, lang, currency)}\n </Typography>\n </Stack>\n {isReleaseSelected(release.id) ? (\n <Stack direction=\"row\" spacing={1} py={0.5}>\n <IconButton onClick={() => decreaseQuantity()} size=\"small\" color=\"primary\">\n <Iconify icon=\"eva:minus-fill\" />\n </IconButton>\n <Typography color=\"grey.500\">{getSelectedQuantity(release.id)}</Typography>\n <IconButton\n onClick={() =>\n release.product ? setOpenVariantDialog('increase') : increaseQuantity()\n }\n size=\"small\"\n color=\"primary\"\n disabled={isMaxQuantity(release.id)}\n >\n <Iconify icon=\"eva:plus-fill\" />\n </IconButton>\n </Stack>\n ) : (\n <Button\n onClick={() =>\n !release.locked && (release.product ? setOpenVariantDialog('add') : addRelease())\n }\n variant=\"contained\"\n disabled={release.locked}\n >\n {t('add')}\n </Button>\n )}\n </Stack>\n </Stack>\n <Typography\n variant=\"caption\"\n content=\"div\"\n mt={2}\n mb={release.extraFields?.length ? 2 : 0}\n display=\"block\"\n >\n {release.description}\n </Typography>\n {release.extraFields && release.extraFields.length > 0 && (\n <ReleaseExtraFields release={release} eventId={eventId} />\n )}\n {release.product && (\n <ProductVariantsDialog\n eventProduct={release.product}\n openDialog={!!openVariantDialog}\n callback={openVariantDialog === 'increase' ? increaseQuantity : addRelease}\n onClose={() => setOpenVariantDialog(null)}\n selectedQuantityByVariant={getSelectedQuantityByVariant(products, tickets)}\n eventId={eventId}\n />\n )}\n </Box>\n );\n};\n\nexport default ReleaseWithMerchandise;\n"],"names":["ReleaseExtraFields"],"mappings":"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"}
1
+ {"version":3,"file":"ReleaseWithMerchandise.js","sources":["../../../src/form/ReleaseWithMerchandise.tsx"],"sourcesContent":["import React, { useCallback, useState } from 'react';\nimport { Box, Button, IconButton, Stack, Typography } from '@mui/material';\nimport { Iconify } from '@components/iconify';\nimport ProductVariantsDialog from '@form/product/ProductVariantsDialog';\nimport { IReleaseShort } from '@utils/types/release.type';\nimport { ITicketForm, ITicketFormTicket } from '@utils/types/ticket.type';\nimport { useFormContext, useWatch } from 'react-hook-form';\nimport { IEventProductForm } from '@utils/types/product.type';\nimport { fCurrency } from '@utils/formatNumber';\nimport { Currencies } from '@utils/data/currency';\nimport { getSelectedQuantityByVariant } from '@utils/product';\nimport ReleaseExtraFields from '@form/extra-field/ReleaseExtraFields';\nimport useGlobal from '@hooks/useGlobal.ts';\n\ninterface Props {\n eventId: number;\n release: IReleaseShort;\n activeReleases: IReleaseShort[];\n currency: Currencies;\n index: number;\n}\n\nconst ReleaseWithMerchandise: React.FC<Props> = ({\n eventId,\n release,\n activeReleases,\n currency,\n index,\n}) => {\n const { t, lang } = useGlobal();\n const [openVariantDialog, setOpenVariantDialog] = useState<'add' | 'increase' | null>(null);\n const { setValue } = useFormContext<ITicketForm>();\n const tickets: ITicketFormTicket[] = useWatch({ name: `tickets.${eventId}`, defaultValue: [] });\n const products: IEventProductForm[] = useWatch({ name: `products.${eventId}`, defaultValue: [] });\n const addedRelease = tickets.find((ticket) => ticket.releaseId === release.id);\n const countTickets = addedRelease?.quantity || 0;\n\n const isReleaseSelected = (id: number) => !!tickets.find((ticket) => ticket.releaseId === id);\n\n const getSelectedQuantity = (id: number) =>\n tickets.find((ticket) => ticket.releaseId === id)?.quantity || 0;\n\n const getAvailableTicketsForRelease = (release: ITicketFormTicket): number => {\n const selectedRelease = activeReleases?.find((item) => item.id === release.releaseId);\n const availableQuantity = selectedRelease ? selectedRelease.availableTickets : 0;\n return availableQuantity > 10 ? 10 : availableQuantity;\n };\n\n const isMaxQuantity = (releaseId: number) => {\n const release = tickets.find((ticket) => ticket.releaseId === releaseId);\n if (!release) return false;\n return getSelectedQuantity(releaseId) >= getAvailableTicketsForRelease(release);\n };\n\n const addRelease = (product?: IEventProductForm) => {\n setValue(`tickets.${eventId}`, [\n ...tickets,\n {\n releaseId: release.id,\n quantity: 1,\n itemName: '',\n price: 0,\n products: product ? [product] : [],\n extraFields: release.extraFields?.length\n ? [\n release.extraFields.map((field) => ({\n eventExtraFieldId: field.id,\n value: '',\n })),\n ]\n : [],\n },\n ]);\n setOpenVariantDialog(null);\n };\n\n const increaseQuantity = (product?: IEventProductForm) => {\n const addedRelease = tickets.find((ticket) => ticket.releaseId === release.id);\n if (addedRelease) {\n const newQuantity = Number(addedRelease.quantity) + 1;\n const maxQuantity = getAvailableTicketsForRelease(addedRelease);\n setValue(\n `tickets.${eventId}`,\n tickets.map((ticket) =>\n ticket.releaseId === release.id\n ? {\n ...ticket,\n quantity: newQuantity > maxQuantity ? maxQuantity : newQuantity,\n products: product ? [...ticket.products, product] : ticket.products,\n extraFields: release.extraFields?.length\n ? [\n ...ticket.extraFields,\n release.extraFields.map((field) => ({\n eventExtraFieldId: field.id,\n value: '',\n })),\n ]\n : [],\n }\n : ticket\n )\n );\n setOpenVariantDialog(null);\n }\n };\n\n const decreaseQuantity = useCallback(() => {\n const addedRelease = tickets.find((ticket) => ticket.releaseId === release.id);\n if (addedRelease) {\n const newQuantity = Number(addedRelease.quantity) - 1;\n if (newQuantity < 1) {\n setValue(\n `tickets.${eventId}`,\n tickets.filter((ticket) => ticket.releaseId !== release.id)\n );\n } else {\n setValue(\n `tickets.${eventId}`,\n tickets.map((ticket) => {\n if (ticket.releaseId !== release.id) return ticket;\n\n return {\n ...ticket,\n quantity: newQuantity,\n products: ticket?.products?.slice(0, -1), // non-mutating \"pop\"\n extraFields: ticket?.extraFields?.slice(0, -1),\n };\n })\n );\n }\n }\n }, [tickets, release.id, setValue]);\n\n return (\n <Box>\n <Stack direction=\"row\" spacing={1}>\n <Stack\n direction=\"row\"\n spacing={1}\n justifyContent=\"space-between\"\n alignItems=\"center\"\n sx={{ width: '100%', backgroundColor: 'grey.200', p: 1, pl: 1.5, borderRadius: 1 }}\n >\n <Stack direction=\"row\" spacing={2} alignItems=\"center\">\n <Stack direction=\"row\" spacing={0.5} alignItems=\"center\">\n <Iconify\n icon=\"ion:ticket-outline\"\n color=\"primary.main\"\n sx={{ width: 24, height: 24 }}\n />\n {release.product && (\n <>\n <Typography fontSize={20} lineHeight={1}>\n +\n </Typography>\n <Iconify\n icon=\"lucide-lab:shirt-t\"\n color=\"primary.main\"\n sx={{ width: 24, height: 24 }}\n />\n </>\n )}\n </Stack>\n <Typography color=\"grey.500\">\n {release.releaseCategoryName} - {release.name} -{' '}\n {fCurrency(release.price, lang, currency)}\n </Typography>\n </Stack>\n {isReleaseSelected(release.id) ? (\n <Stack direction=\"row\" spacing={1} py={0.5}>\n <IconButton onClick={() => decreaseQuantity()} size=\"small\" color=\"primary\">\n <Iconify icon=\"eva:minus-fill\" />\n </IconButton>\n <Typography color=\"grey.500\">{getSelectedQuantity(release.id)}</Typography>\n <IconButton\n onClick={() =>\n release.product ? setOpenVariantDialog('increase') : increaseQuantity()\n }\n size=\"small\"\n color=\"primary\"\n disabled={isMaxQuantity(release.id)}\n >\n <Iconify icon=\"eva:plus-fill\" />\n </IconButton>\n </Stack>\n ) : (\n <Button\n onClick={() =>\n !release.locked && (release.product ? setOpenVariantDialog('add') : addRelease())\n }\n variant=\"contained\"\n disabled={release.locked}\n >\n {t('add')}\n </Button>\n )}\n </Stack>\n </Stack>\n <Typography\n variant=\"caption\"\n content=\"div\"\n mt={2}\n mb={release.extraFields?.length ? 2 : 0}\n display=\"block\"\n >\n {release.description}\n </Typography>\n {release.extraFields && release.extraFields.length > 0 && (\n <ReleaseExtraFields\n release={release}\n eventId={eventId}\n releaseIndex={index}\n quantity={countTickets}\n />\n )}\n {release.product && (\n <ProductVariantsDialog\n eventProduct={release.product}\n openDialog={!!openVariantDialog}\n callback={openVariantDialog === 'increase' ? increaseQuantity : addRelease}\n onClose={() => setOpenVariantDialog(null)}\n selectedQuantityByVariant={getSelectedQuantityByVariant(products, tickets)}\n eventId={eventId}\n />\n )}\n </Box>\n );\n};\n\nexport default ReleaseWithMerchandise;\n"],"names":[],"mappings":"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"}
@@ -266,6 +266,22 @@ const TicketForm = ({ event, hasGopayIdSsr, selectedReleaseId, isIframe, isInlin
266
266
  return acc;
267
267
  }, {});
268
268
  const { data: orderData } = await postOrder(data);
269
+ const items = [
270
+ ...orderData.tickets.map((ticket) => ({
271
+ item_id: ticket.number,
272
+ item_name: `${orderData.orderEntity.event.name} - ${ticket.releaseCategoryName} - ${ticket.releaseName}`,
273
+ price: ticket.price,
274
+ quantity: 1,
275
+ })),
276
+ ];
277
+ if (orderData.orderEntity.extraFee) {
278
+ items.push({
279
+ item_id: 'service_fee',
280
+ item_name: `Service fee`,
281
+ price: orderData.orderEntity.extraFee,
282
+ quantity: 1,
283
+ });
284
+ }
269
285
  const item = {
270
286
  uuid: values.uuid,
271
287
  currency: orderData.orderEntity.currency,
@@ -274,20 +290,7 @@ const TicketForm = ({ event, hasGopayIdSsr, selectedReleaseId, isIframe, isInlin
274
290
  payment_type: orderData.orderEntity.paymentType,
275
291
  transaction_id: String(orderData.orderEntity.number),
276
292
  coupon: orderData?.orderEntity?.promoCodes?.map((p) => p.code) || [],
277
- items: [
278
- ...orderData.tickets.map((ticket) => ({
279
- item_id: ticket.number,
280
- item_name: `${orderData.orderEntity.event.name} - ${ticket.releaseCategoryName} - ${ticket.releaseName}`,
281
- price: ticket.price,
282
- quantity: 1,
283
- })),
284
- {
285
- item_id: 'service_fee',
286
- item_name: `Service fee`,
287
- price: orderData.orderEntity.extraFee,
288
- quantity: 1,
289
- },
290
- ],
293
+ items,
291
294
  };
292
295
  const userData = {
293
296
  fn: orderData.customer.firstName,