@eventlook/sdk 1.4.46-beta.5 → 1.4.46-beta.6
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.
|
@@ -64,7 +64,7 @@ const ProductCard = ({ eventProduct, eventId, isOnlyMerchandise }) => {
|
|
|
64
64
|
? formatNumber.fCurrency(eventProduct.product.priceWithVat, lang, eventProduct.product.currency)
|
|
65
65
|
: t('free'))),
|
|
66
66
|
React.createElement(material.Button, { variant: eventNotEmpty ? 'contained' : 'outlined', onClick: () => setOpenVariantDialog(true), fullWidth: true, sx: {
|
|
67
|
-
color: 'inherit',
|
|
67
|
+
color: eventNotEmpty ? (theme) => theme.palette.common.white : 'inherit',
|
|
68
68
|
borderColor: (theme) => theme.palette.grey[300],
|
|
69
69
|
} }, eventNotEmpty
|
|
70
70
|
? t('event.tickets.merchandise.show_added')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProductCard.js","sources":["../../../../src/form/product/ProductCard.tsx"],"sourcesContent":["import { Box, Button, Card, Stack, Typography } from '@mui/material';\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';\nimport { fCurrency } from '@utils/formatNumber';\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, lang } = useGlobal();\n const [openVariantDialog, setOpenVariantDialog] = useState<boolean>(false);\n const { setValue, getValues } = useFormContext<ITicketForm>();\n const tickets: ITicketFormTicket[] = useWatch({ name: `tickets.${eventId}`, defaultValue: [] });\n const products: IEventProductForm[] = useWatch({ name: `products.${eventId}`, defaultValue: [] });\n\n const onSelectVariant = (selectedVariants: IEventProductForm[] | IEventProductForm) => {\n const normalized = Array.isArray(selectedVariants) ? selectedVariants : [selectedVariants];\n const currentProducts =\n (getValues(`products.${eventId}`) as IEventProductForm[] | undefined) ?? [];\n const nextProducts = [...currentProducts];\n\n normalized.forEach((selectedVariant) => {\n const index = nextProducts.findIndex(\n (product) => product.eventProductVariantId === selectedVariant.eventProductVariantId\n );\n\n if (index >= 0) {\n if (selectedVariant.quantity <= 0) {\n nextProducts.splice(index, 1);\n } else {\n nextProducts[index] = {\n ...nextProducts[index],\n quantity: selectedVariant.quantity,\n };\n }\n } else {\n if (selectedVariant.quantity > 0) {\n nextProducts.push(selectedVariant);\n }\n }\n });\n\n setValue(`products.${eventId}`, nextProducts, {\n shouldDirty: true,\n shouldValidate: true,\n });\n };\n\n const eventNotEmpty = useMemo(() => {\n const variantIds = new Set(eventProduct.eventProductVariants.map((variant) => variant.id));\n return products.some(\n (product) => product?.quantity && variantIds.has(product.eventProductVariantId)\n );\n }, [products, eventProduct.eventProductVariants]);\n\n return (\n <>\n <Card\n sx={{\n p: 0,\n borderRadius: 0,\n boxShadow: 'none',\n background: 'none',\n }}\n >\n <Stack spacing={0}>\n <Image\n src={eventProduct.product.previewImage.url}\n ratio=\"21/9\"\n sx={{ borderRadius: 1, maxHeight: 96 }}\n />\n <Typography variant=\"h5\">{eventProduct.product.name}</Typography>\n <Box>\n <Typography variant=\"body2\" color=\"text.primary\">\n {eventProduct.product.priceWithVat > 0\n ? fCurrency(eventProduct.product.priceWithVat, lang, eventProduct.product.currency)\n : t('free')}\n </Typography>\n </Box>\n <Button\n variant={eventNotEmpty ? 'contained' : 'outlined'}\n onClick={() => setOpenVariantDialog(true)}\n fullWidth\n sx={{\n color: 'inherit',\n borderColor: (theme) => theme.palette.grey[300],\n }}\n >\n {eventNotEmpty\n ? t('event.tickets.merchandise.show_added')\n : t('event.tickets.merchandise.show_sizes')}\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","Box","fCurrency","Button","ProductVariantsDialog","getSelectedQuantityByVariant"],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ProductCard.js","sources":["../../../../src/form/product/ProductCard.tsx"],"sourcesContent":["import { Box, Button, Card, Stack, Typography } from '@mui/material';\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';\nimport { fCurrency } from '@utils/formatNumber';\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, lang } = useGlobal();\n const [openVariantDialog, setOpenVariantDialog] = useState<boolean>(false);\n const { setValue, getValues } = useFormContext<ITicketForm>();\n const tickets: ITicketFormTicket[] = useWatch({ name: `tickets.${eventId}`, defaultValue: [] });\n const products: IEventProductForm[] = useWatch({ name: `products.${eventId}`, defaultValue: [] });\n\n const onSelectVariant = (selectedVariants: IEventProductForm[] | IEventProductForm) => {\n const normalized = Array.isArray(selectedVariants) ? selectedVariants : [selectedVariants];\n const currentProducts =\n (getValues(`products.${eventId}`) as IEventProductForm[] | undefined) ?? [];\n const nextProducts = [...currentProducts];\n\n normalized.forEach((selectedVariant) => {\n const index = nextProducts.findIndex(\n (product) => product.eventProductVariantId === selectedVariant.eventProductVariantId\n );\n\n if (index >= 0) {\n if (selectedVariant.quantity <= 0) {\n nextProducts.splice(index, 1);\n } else {\n nextProducts[index] = {\n ...nextProducts[index],\n quantity: selectedVariant.quantity,\n };\n }\n } else {\n if (selectedVariant.quantity > 0) {\n nextProducts.push(selectedVariant);\n }\n }\n });\n\n setValue(`products.${eventId}`, nextProducts, {\n shouldDirty: true,\n shouldValidate: true,\n });\n };\n\n const eventNotEmpty = useMemo(() => {\n const variantIds = new Set(eventProduct.eventProductVariants.map((variant) => variant.id));\n return products.some(\n (product) => product?.quantity && variantIds.has(product.eventProductVariantId)\n );\n }, [products, eventProduct.eventProductVariants]);\n\n return (\n <>\n <Card\n sx={{\n p: 0,\n borderRadius: 0,\n boxShadow: 'none',\n background: 'none',\n }}\n >\n <Stack spacing={0}>\n <Image\n src={eventProduct.product.previewImage.url}\n ratio=\"21/9\"\n sx={{ borderRadius: 1, maxHeight: 96 }}\n />\n <Typography variant=\"h5\">{eventProduct.product.name}</Typography>\n <Box>\n <Typography variant=\"body2\" color=\"text.primary\">\n {eventProduct.product.priceWithVat > 0\n ? fCurrency(eventProduct.product.priceWithVat, lang, eventProduct.product.currency)\n : t('free')}\n </Typography>\n </Box>\n <Button\n variant={eventNotEmpty ? 'contained' : 'outlined'}\n onClick={() => setOpenVariantDialog(true)}\n fullWidth\n sx={{\n color: eventNotEmpty ? (theme) => theme.palette.common.white : 'inherit',\n borderColor: (theme) => theme.palette.grey[300],\n }}\n >\n {eventNotEmpty\n ? t('event.tickets.merchandise.show_added')\n : t('event.tickets.merchandise.show_sizes')}\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","Box","fCurrency","Button","ProductVariantsDialog","getSelectedQuantityByVariant"],"mappings":"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"}
|
|
@@ -60,7 +60,7 @@ const ProductCard = ({ eventProduct, eventId, isOnlyMerchandise }) => {
|
|
|
60
60
|
? fCurrency(eventProduct.product.priceWithVat, lang, eventProduct.product.currency)
|
|
61
61
|
: t('free'))),
|
|
62
62
|
React.createElement(Button, { variant: eventNotEmpty ? 'contained' : 'outlined', onClick: () => setOpenVariantDialog(true), fullWidth: true, sx: {
|
|
63
|
-
color: 'inherit',
|
|
63
|
+
color: eventNotEmpty ? (theme) => theme.palette.common.white : 'inherit',
|
|
64
64
|
borderColor: (theme) => theme.palette.grey[300],
|
|
65
65
|
} }, eventNotEmpty
|
|
66
66
|
? t('event.tickets.merchandise.show_added')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProductCard.js","sources":["../../../../src/form/product/ProductCard.tsx"],"sourcesContent":["import { Box, Button, Card, Stack, Typography } from '@mui/material';\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';\nimport { fCurrency } from '@utils/formatNumber';\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, lang } = useGlobal();\n const [openVariantDialog, setOpenVariantDialog] = useState<boolean>(false);\n const { setValue, getValues } = useFormContext<ITicketForm>();\n const tickets: ITicketFormTicket[] = useWatch({ name: `tickets.${eventId}`, defaultValue: [] });\n const products: IEventProductForm[] = useWatch({ name: `products.${eventId}`, defaultValue: [] });\n\n const onSelectVariant = (selectedVariants: IEventProductForm[] | IEventProductForm) => {\n const normalized = Array.isArray(selectedVariants) ? selectedVariants : [selectedVariants];\n const currentProducts =\n (getValues(`products.${eventId}`) as IEventProductForm[] | undefined) ?? [];\n const nextProducts = [...currentProducts];\n\n normalized.forEach((selectedVariant) => {\n const index = nextProducts.findIndex(\n (product) => product.eventProductVariantId === selectedVariant.eventProductVariantId\n );\n\n if (index >= 0) {\n if (selectedVariant.quantity <= 0) {\n nextProducts.splice(index, 1);\n } else {\n nextProducts[index] = {\n ...nextProducts[index],\n quantity: selectedVariant.quantity,\n };\n }\n } else {\n if (selectedVariant.quantity > 0) {\n nextProducts.push(selectedVariant);\n }\n }\n });\n\n setValue(`products.${eventId}`, nextProducts, {\n shouldDirty: true,\n shouldValidate: true,\n });\n };\n\n const eventNotEmpty = useMemo(() => {\n const variantIds = new Set(eventProduct.eventProductVariants.map((variant) => variant.id));\n return products.some(\n (product) => product?.quantity && variantIds.has(product.eventProductVariantId)\n );\n }, [products, eventProduct.eventProductVariants]);\n\n return (\n <>\n <Card\n sx={{\n p: 0,\n borderRadius: 0,\n boxShadow: 'none',\n background: 'none',\n }}\n >\n <Stack spacing={0}>\n <Image\n src={eventProduct.product.previewImage.url}\n ratio=\"21/9\"\n sx={{ borderRadius: 1, maxHeight: 96 }}\n />\n <Typography variant=\"h5\">{eventProduct.product.name}</Typography>\n <Box>\n <Typography variant=\"body2\" color=\"text.primary\">\n {eventProduct.product.priceWithVat > 0\n ? fCurrency(eventProduct.product.priceWithVat, lang, eventProduct.product.currency)\n : t('free')}\n </Typography>\n </Box>\n <Button\n variant={eventNotEmpty ? 'contained' : 'outlined'}\n onClick={() => setOpenVariantDialog(true)}\n fullWidth\n sx={{\n color: 'inherit',\n borderColor: (theme) => theme.palette.grey[300],\n }}\n >\n {eventNotEmpty\n ? t('event.tickets.merchandise.show_added')\n : t('event.tickets.merchandise.show_sizes')}\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":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ProductCard.js","sources":["../../../../src/form/product/ProductCard.tsx"],"sourcesContent":["import { Box, Button, Card, Stack, Typography } from '@mui/material';\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';\nimport { fCurrency } from '@utils/formatNumber';\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, lang } = useGlobal();\n const [openVariantDialog, setOpenVariantDialog] = useState<boolean>(false);\n const { setValue, getValues } = useFormContext<ITicketForm>();\n const tickets: ITicketFormTicket[] = useWatch({ name: `tickets.${eventId}`, defaultValue: [] });\n const products: IEventProductForm[] = useWatch({ name: `products.${eventId}`, defaultValue: [] });\n\n const onSelectVariant = (selectedVariants: IEventProductForm[] | IEventProductForm) => {\n const normalized = Array.isArray(selectedVariants) ? selectedVariants : [selectedVariants];\n const currentProducts =\n (getValues(`products.${eventId}`) as IEventProductForm[] | undefined) ?? [];\n const nextProducts = [...currentProducts];\n\n normalized.forEach((selectedVariant) => {\n const index = nextProducts.findIndex(\n (product) => product.eventProductVariantId === selectedVariant.eventProductVariantId\n );\n\n if (index >= 0) {\n if (selectedVariant.quantity <= 0) {\n nextProducts.splice(index, 1);\n } else {\n nextProducts[index] = {\n ...nextProducts[index],\n quantity: selectedVariant.quantity,\n };\n }\n } else {\n if (selectedVariant.quantity > 0) {\n nextProducts.push(selectedVariant);\n }\n }\n });\n\n setValue(`products.${eventId}`, nextProducts, {\n shouldDirty: true,\n shouldValidate: true,\n });\n };\n\n const eventNotEmpty = useMemo(() => {\n const variantIds = new Set(eventProduct.eventProductVariants.map((variant) => variant.id));\n return products.some(\n (product) => product?.quantity && variantIds.has(product.eventProductVariantId)\n );\n }, [products, eventProduct.eventProductVariants]);\n\n return (\n <>\n <Card\n sx={{\n p: 0,\n borderRadius: 0,\n boxShadow: 'none',\n background: 'none',\n }}\n >\n <Stack spacing={0}>\n <Image\n src={eventProduct.product.previewImage.url}\n ratio=\"21/9\"\n sx={{ borderRadius: 1, maxHeight: 96 }}\n />\n <Typography variant=\"h5\">{eventProduct.product.name}</Typography>\n <Box>\n <Typography variant=\"body2\" color=\"text.primary\">\n {eventProduct.product.priceWithVat > 0\n ? fCurrency(eventProduct.product.priceWithVat, lang, eventProduct.product.currency)\n : t('free')}\n </Typography>\n </Box>\n <Button\n variant={eventNotEmpty ? 'contained' : 'outlined'}\n onClick={() => setOpenVariantDialog(true)}\n fullWidth\n sx={{\n color: eventNotEmpty ? (theme) => theme.palette.common.white : 'inherit',\n borderColor: (theme) => theme.palette.grey[300],\n }}\n >\n {eventNotEmpty\n ? t('event.tickets.merchandise.show_added')\n : t('event.tickets.merchandise.show_sizes')}\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":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -92,7 +92,7 @@ const ProductCard: React.FC<Props> = ({ eventProduct, eventId, isOnlyMerchandise
|
|
|
92
92
|
onClick={() => setOpenVariantDialog(true)}
|
|
93
93
|
fullWidth
|
|
94
94
|
sx={{
|
|
95
|
-
color: 'inherit',
|
|
95
|
+
color: eventNotEmpty ? (theme) => theme.palette.common.white : 'inherit',
|
|
96
96
|
borderColor: (theme) => theme.palette.grey[300],
|
|
97
97
|
}}
|
|
98
98
|
>
|