@eventlook/sdk 1.7.6 → 1.7.8

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 (48) hide show
  1. package/.gitlab-ci.yml +51 -0
  2. package/README.md +7 -0
  3. package/dist/cjs/index.js +25692 -16
  4. package/dist/cjs/index.js.map +1 -1
  5. package/dist/esm/index.js +25674 -12
  6. package/dist/esm/index.js.map +1 -1
  7. package/dist/types/components/RichText.d.ts +7 -0
  8. package/dist/types/context/SeatPickerContext.d.ts +13 -0
  9. package/dist/types/embed.d.ts +49 -0
  10. package/dist/types/locales/cs.d.ts +1 -0
  11. package/dist/types/locales/en.d.ts +1 -0
  12. package/dist/types/locales/es.d.ts +1 -0
  13. package/dist/types/locales/pl.d.ts +1 -0
  14. package/dist/types/locales/sk.d.ts +1 -0
  15. package/dist/types/locales/uk.d.ts +1 -0
  16. package/dist/types/utils/render-rich-text.d.ts +2 -0
  17. package/dist/types/utils/types/event.type.d.ts +1 -0
  18. package/package.json +4 -2
  19. package/rollup.embed.config.mjs +74 -0
  20. package/src/components/RichText.tsx +33 -0
  21. package/src/context/SeatPickerContext.tsx +35 -0
  22. package/src/embed.tsx +243 -0
  23. package/src/form/Payment.tsx +6 -1
  24. package/src/form/PaymentOverviewBox.tsx +35 -19
  25. package/src/form/PaymentPending.tsx +7 -24
  26. package/src/form/ReleaseWithMerchandise.tsx +8 -1
  27. package/src/form/TicketForm.tsx +204 -164
  28. package/src/form/services/index.tsx +1 -0
  29. package/src/form/tickets/TicketSelectionMap.tsx +240 -73
  30. package/src/index.ts +4 -0
  31. package/src/locales/cs.tsx +1 -0
  32. package/src/locales/en.tsx +1 -0
  33. package/src/locales/es.tsx +1 -0
  34. package/src/locales/pl.tsx +1 -0
  35. package/src/locales/sk.tsx +1 -0
  36. package/src/locales/uk.tsx +1 -0
  37. package/src/react-dom-client.d.ts +11 -0
  38. package/src/utils/axios.ts +3 -0
  39. package/src/utils/render-rich-text.ts +100 -0
  40. package/src/utils/types/event.type.ts +1 -0
  41. package/dist/cjs/index-Dh-sV_wk.js +0 -41946
  42. package/dist/cjs/index-Dh-sV_wk.js.map +0 -1
  43. package/dist/cjs/index.umd-CJ-ZDtw8.js +0 -13397
  44. package/dist/cjs/index.umd-CJ-ZDtw8.js.map +0 -1
  45. package/dist/esm/index-DPHu9Sfs.js +0 -41925
  46. package/dist/esm/index-DPHu9Sfs.js.map +0 -1
  47. package/dist/esm/index.umd-DPIwz_aJ.js +0 -13395
  48. package/dist/esm/index.umd-DPIwz_aJ.js.map +0 -1
@@ -1,6 +1,6 @@
1
1
  import React, { useCallback, useEffect, useMemo, useState } from 'react';
2
2
  import { Iconify, Image, TextIconLabel } from '@components';
3
- import { Box, Button, Divider, Grid, Stack, Typography } from '@mui/material';
3
+ import { Box, Button, Divider, Grid, IconButton, Stack, Typography } from '@mui/material';
4
4
  import PaymentOverviewCheckbox from '@form/payment/PaymentOverviewCheckbox';
5
5
  import locationIcon from '@iconify/icons-carbon/location';
6
6
  import { getPlaceAsString } from '@utils/place';
@@ -27,6 +27,7 @@ import useActiveEventProducts from '@hooks/data/useActiveEventProducts';
27
27
  import useDebounce from '@hooks/useDebounce';
28
28
  import { EVENTLOOK_ORDER_FORM_ID } from '@utils/data/global';
29
29
  import { isInsuranceAvailable } from '@utils/insurance';
30
+ import { useSeatPicker } from '@context/SeatPickerContext';
30
31
 
31
32
  interface Props {
32
33
  event: IEvent;
@@ -34,8 +35,9 @@ interface Props {
34
35
  hideBuyButton?: boolean;
35
36
  }
36
37
 
37
- const PaymentOverviewBox: React.FC<Props> = ({ event, withoutPadding, hideBuyButton }) => {
38
+ const PaymentOverviewBox: React.FC<Props> = ({ event, hideBuyButton }) => {
38
39
  const { t, lang, options } = useGlobal();
40
+ const { deselect } = useSeatPicker();
39
41
  const xs = useResponsive('only', 'xs');
40
42
  const md = useResponsive('only', 'md');
41
43
  const isMobile = useResponsive('down', 'md');
@@ -95,6 +97,7 @@ const PaymentOverviewBox: React.FC<Props> = ({ event, withoutPadding, hideBuyBut
95
97
  price: release?.price || 0,
96
98
  quantity: ticket.quantity,
97
99
  releaseId: ticket.releaseId,
100
+ location: ticket.location,
98
101
  products: ticket.products.map((product) => {
99
102
  const variant = release?.product?.eventProductVariants.find(
100
103
  (variant) => variant.id === product.eventProductVariantId
@@ -423,7 +426,7 @@ const PaymentOverviewBox: React.FC<Props> = ({ event, withoutPadding, hideBuyBut
423
426
  return (
424
427
  <OverviewCard id="overview-card" stickyHeaderTop={options?.stickyHeaderTop || 0}>
425
428
  {!isMobile && (
426
- <Stack className="overview-card__event-info" p={2} spacing={2}>
429
+ <Stack className="overview-card__event-info" spacing={2} sx={{ pt: 2, px: 2, pb: 1 }}>
427
430
  <Typography variant="h6">{event.name}</Typography>
428
431
  <Box>
429
432
  <Grid container spacing={1}>
@@ -487,18 +490,19 @@ const PaymentOverviewBox: React.FC<Props> = ({ event, withoutPadding, hideBuyBut
487
490
  )}
488
491
  <Stack
489
492
  className="overview-card__order-info"
490
- // Keep horizontal padding on mobile even when `withoutPadding` — that
491
- // flag is only meant to drop the vertical gap under the header, not let
492
- // the rows run into the card edge.
493
493
  sx={{
494
494
  px: 2,
495
- pt: { xs: 1.5, sm: 2 },
496
- pb: { xs: withoutPadding ? 0 : 2, md: 2 },
495
+ // Desktop gets its top spacing from the event-info block above; on
496
+ // mobile that block isn't rendered, so pad the card edge directly.
497
+ pt: { xs: 2, md: 0 },
498
+ pb: 2,
497
499
  }}
498
500
  spacing={1.25}
499
501
  useFlexGap
500
502
  >
501
- {!!selectedTickets.length && !isMobile && <Divider sx={{ borderStyle: 'dashed', my: 1 }} />}
503
+ {!!selectedTickets.length && !isMobile && (
504
+ <Divider sx={{ borderStyle: 'dashed', mt: 0, mb: 1 }} />
505
+ )}
502
506
 
503
507
  {!!selectedTickets.length && (
504
508
  <Stack spacing={1}>
@@ -537,17 +541,29 @@ const PaymentOverviewBox: React.FC<Props> = ({ event, withoutPadding, hideBuyBut
537
541
  <Typography variant="body2">
538
542
  {ticket.quantity}x {ticket.itemName}
539
543
  </Typography>
540
- <Typography variant="body2">
541
- {fCurrency(
542
- calculatePriceWithDiscount(
543
- ticket.price,
544
- promoCodesValues.percent,
545
- promoCodesValues.fixedDevidedTickets
546
- ) * Number(ticket.quantity),
547
- lang,
548
- event.currency
544
+ <Stack direction="row" alignItems="center" spacing={0.5}>
545
+ <Typography variant="body2">
546
+ {fCurrency(
547
+ calculatePriceWithDiscount(
548
+ ticket.price,
549
+ promoCodesValues.percent,
550
+ promoCodesValues.fixedDevidedTickets
551
+ ) * Number(ticket.quantity),
552
+ lang,
553
+ event.currency
554
+ )}
555
+ </Typography>
556
+ {ticket.location?.id && (
557
+ <IconButton
558
+ size="small"
559
+ aria-label={t('remove')}
560
+ onClick={() => deselect(ticket.location!.id)}
561
+ sx={{ p: 0.25, color: 'text.secondary' }}
562
+ >
563
+ <Iconify icon="eva:close-outline" width={16} height={16} />
564
+ </IconButton>
549
565
  )}
550
- </Typography>
566
+ </Stack>
551
567
  </Stack>
552
568
  {ticket.products.map((product, index2) => (
553
569
  <Stack
@@ -1,41 +1,24 @@
1
- import React, { lazy, useEffect, useState } from 'react';
2
- import { Box, Typography } from '@mui/material';
3
- import bankTransferAnimation from '../utils/data/lottie/bank-transfer.json';
1
+ import React from 'react';
2
+ import { Box, CircularProgress, Typography } from '@mui/material';
4
3
  import { varBounce } from '@components/animate';
5
4
  import { m } from 'motion/react';
6
5
  import useGlobal from '@hooks/useGlobal';
7
6
 
8
- const Lottie = lazy(() => import('lottie-react'));
9
-
7
+ // Payment-pending is a brief transitional screen (waiting on a bank transfer).
8
+ // A spinner conveys "waiting" and avoids bundling lottie-web (~300 KB) just for a
9
+ // looping animation here.
10
10
  const PaymentPending: React.FC = () => {
11
11
  const { t } = useGlobal();
12
- const [LottieComponent, setLottieComponent] = useState<React.ComponentType<any> | null>(null);
13
-
14
- useEffect(() => {
15
- if (typeof window === 'undefined') return;
16
-
17
- let isMounted = true;
18
-
19
- import('lottie-react').then((module) => {
20
- if (isMounted) {
21
- setLottieComponent(() => module.default);
22
- }
23
- });
24
-
25
- return () => {
26
- isMounted = false;
27
- };
28
- }, []);
29
12
 
30
13
  return (
31
14
  <Box textAlign="center">
32
15
  <m.div variants={varBounce().in}>
33
- <Typography variant="h4" sx={{ mb: 2, maxWidth: 600, mx: 'auto' }}>
16
+ <Typography variant="h4" sx={{ mb: 3, maxWidth: 600, mx: 'auto' }}>
34
17
  {t('event.tickets.payment_pending')}
35
18
  </Typography>
36
19
  </m.div>
37
20
  <Box maxWidth={600} mx="auto">
38
- {LottieComponent ? <LottieComponent animationData={bankTransferAnimation} /> : null}
21
+ <CircularProgress size={64} thickness={4} />
39
22
  </Box>
40
23
  </Box>
41
24
  );
@@ -139,7 +139,14 @@ const ReleaseWithMerchandise: React.FC<Props> = ({
139
139
  spacing={1}
140
140
  justifyContent="space-between"
141
141
  alignItems="center"
142
- sx={{ width: '100%', backgroundColor: 'grey.200', p: 1, pl: 1.5, borderRadius: 1 }}
142
+ sx={{
143
+ width: '100%',
144
+ backgroundColor: (theme) =>
145
+ theme.palette.mode === 'light' ? theme.palette.grey[200] : theme.palette.grey[800],
146
+ p: 1,
147
+ pl: 1.5,
148
+ borderRadius: 1,
149
+ }}
143
150
  >
144
151
  <Stack direction="row" spacing={2} alignItems="center">
145
152
  <Stack direction="row" spacing={0.5} alignItems="center">
@@ -19,6 +19,7 @@ import TicketSelection from '@form/tickets/TicketSelection';
19
19
  import ContactPerson from '@form/ContactPerson';
20
20
  import Payment from '@form/Payment';
21
21
  import EmailConfirmation from '@form/EmailConfirmation';
22
+ import { SeatPickerProvider } from '@context/SeatPickerContext';
22
23
  import React, { useEffect, useMemo, useRef, useState } from 'react';
23
24
  import { PropsWithChildren } from '@utils/types/global.type';
24
25
  import { getSearchParamsInObject } from '@utils/url';
@@ -29,6 +30,8 @@ import { yupResolver } from '@hookform/resolvers/yup';
29
30
  import { postOrder } from '@modules/order';
30
31
  import { IEvent } from '@utils/types/event.type';
31
32
  import PaymentOverviewBox from '@form/PaymentOverviewBox';
33
+ import RichText from '@components/RichText';
34
+ import { isEmptyRichText } from '@utils/render-rich-text';
32
35
  import { IEcommerce, IPixels } from '@utils/types/gtm.type';
33
36
  import {
34
37
  getGtmAddPaymentInfo,
@@ -669,206 +672,243 @@ const TicketForm: React.FC<Props> = ({
669
672
  locale={lang}
670
673
  apiRef={stripeCheckoutRef}
671
674
  >
672
- <FormProvider
673
- methods={methods}
674
- // @ts-ignore -- handleSubmit type mismatch with FormProvider onSubmit prop
675
- onSubmit={methods.handleSubmit(onSubmit, onInvalid)}
676
- formId={EVENTLOOK_ORDER_FORM_ID}
677
- >
678
- <Stack
679
- className="overview-card__event-info"
680
- display={{ md: 'none' }}
681
- sx={{
682
- mb: 2,
683
- }}
675
+ <SeatPickerProvider>
676
+ <FormProvider
677
+ methods={methods}
678
+ // @ts-ignore -- handleSubmit type mismatch with FormProvider onSubmit prop
679
+ onSubmit={methods.handleSubmit(onSubmit, onInvalid)}
680
+ formId={EVENTLOOK_ORDER_FORM_ID}
684
681
  >
685
- <Typography variant="h3" component="h1">
686
- {event.name}
687
- </Typography>
688
- <Typography variant="h5" component="h2">
689
- {dayjs(event.startDate).format('DD.MM.YYYY HH:mm')}
690
- </Typography>
691
- <Typography variant="body2" mt={1}>
692
- {getPlaceAsString(event.place)}
693
- </Typography>
694
- {headerSlot ? <>{headerSlot}</> : null}
695
- </Stack>
696
- <Grid
697
- container
698
- spacing={2}
699
- sx={{
700
- pb: {
701
- xs: isPaymentOverviewDrawerOpen ? cartItemCount * 4 + 18 : 0,
702
- md: 0,
703
- },
704
- }}
705
- >
706
- <Grid size={{ xs: 12, md: 8 }}>
707
- <Stepper
708
- orientation="vertical"
709
- sx={(theme) => ({
710
- [theme.breakpoints.down('sm')]: {
711
- '& .MuiStepContent-root': {
712
- borderLeftWidth: 0,
713
- paddingLeft: 0,
714
- marginLeft: 0,
682
+ <Stack
683
+ className="overview-card__event-info"
684
+ display={{ md: 'none' }}
685
+ sx={{
686
+ mb: 2,
687
+ }}
688
+ >
689
+ <Typography variant="h3" component="h1">
690
+ {event.name}
691
+ </Typography>
692
+ <Typography variant="h5" component="h2">
693
+ {dayjs(event.startDate).format('DD.MM.YYYY HH:mm')}
694
+ </Typography>
695
+ <Typography variant="body2" mt={1}>
696
+ {getPlaceAsString(event.place)}
697
+ </Typography>
698
+ {headerSlot ? <>{headerSlot}</> : null}
699
+ </Stack>
700
+ <Grid
701
+ container
702
+ spacing={2}
703
+ sx={{
704
+ pb: {
705
+ xs: isPaymentOverviewDrawerOpen ? cartItemCount * 4 + 18 : 0,
706
+ md: 0,
707
+ },
708
+ }}
709
+ >
710
+ <Grid size={{ xs: 12, md: 8 }}>
711
+ {!isEmptyRichText(event.purchaseInstructions) && (
712
+ <Box
713
+ sx={(theme) => ({
714
+ display: 'flex',
715
+ gap: 1.25,
716
+ mb: 3,
717
+ p: 2,
718
+ borderRadius: 1,
719
+ backgroundColor: theme.palette.action.hover,
720
+ color: theme.palette.text.secondary,
721
+ fontSize: '0.875rem',
722
+ lineHeight: 1.5,
723
+ })}
724
+ >
725
+ <Box
726
+ component="svg"
727
+ viewBox="0 0 24 24"
728
+ aria-hidden
729
+ sx={{
730
+ flexShrink: 0,
731
+ width: 18,
732
+ height: 18,
733
+ mt: '1px',
734
+ fill: 'currentColor',
735
+ }}
736
+ >
737
+ <path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z" />
738
+ </Box>
739
+ <RichText content={event.purchaseInstructions} />
740
+ </Box>
741
+ )}
742
+ <Stepper
743
+ orientation="vertical"
744
+ sx={(theme) => ({
745
+ [theme.breakpoints.down('sm')]: {
746
+ '& .MuiStepContent-root': {
747
+ borderLeftWidth: 0,
748
+ paddingLeft: 0,
749
+ marginLeft: 0,
750
+ },
751
+ '& .MuiStepConnector-line': { borderLeftWidth: 0 },
715
752
  },
716
- '& .MuiStepConnector-line': { borderLeftWidth: 0 },
717
- },
718
- })}
719
- >
720
- {event.type === EventType.RECURRING && (
753
+ })}
754
+ >
755
+ {event.type === EventType.RECURRING && (
756
+ <Step active>
757
+ <StepLabel>{t('event.tickets.stepper.6.title')}</StepLabel>
758
+ <StepContent sx={{ pr: { xs: 0 } }}>
759
+ <TimeslotSelection event={event} />
760
+ </StepContent>
761
+ </Step>
762
+ )}
721
763
  <Step active>
722
- <StepLabel>{t('event.tickets.stepper.6.title')}</StepLabel>
764
+ <StepLabel>{t('event.tickets.stepper.1.title')}</StepLabel>
723
765
  <StepContent sx={{ pr: { xs: 0 } }}>
724
- <TimeslotSelection event={event} />
766
+ {event.mapId && seatingIframeUrl ? (
767
+ <TicketSelectionMap event={event} />
768
+ ) : event.hasMerchandise ? (
769
+ <TicketWithMerchandiseSelection event={event} />
770
+ ) : (
771
+ <TicketSelection event={event} />
772
+ )}
725
773
  </StepContent>
726
774
  </Step>
727
- )}
728
- <Step active>
729
- <StepLabel>{t('event.tickets.stepper.1.title')}</StepLabel>
730
- <StepContent sx={{ pr: { xs: 0 } }}>
731
- {event.mapId && seatingIframeUrl ? (
732
- <TicketSelectionMap event={event} />
733
- ) : event.hasMerchandise ? (
734
- <TicketWithMerchandiseSelection event={event} />
735
- ) : (
736
- <TicketSelection event={event} />
737
- )}
738
- </StepContent>
739
- </Step>
740
- {event.hasMerchandise && eventProducts.length && (
775
+ {event.hasMerchandise && eventProducts.length && (
776
+ <Step active>
777
+ <StepLabel>{t('event.tickets.stepper.4.title')}</StepLabel>
778
+ <StepContent sx={{ pr: { xs: 0 } }}>
779
+ <MerchandiseSelection
780
+ eventProducts={eventProducts}
781
+ eventId={event.id}
782
+ isLoading={isLoading}
783
+ />
784
+ </StepContent>
785
+ </Step>
786
+ )}
741
787
  <Step active>
742
- <StepLabel>{t('event.tickets.stepper.4.title')}</StepLabel>
788
+ <StepLabel>{t('event.tickets.stepper.8.title')}</StepLabel>
743
789
  <StepContent sx={{ pr: { xs: 0 } }}>
744
- <MerchandiseSelection
745
- eventProducts={eventProducts}
746
- eventId={event.id}
747
- isLoading={isLoading}
748
- />
790
+ <Services event={event} />
749
791
  </StepContent>
750
792
  </Step>
751
- )}
752
- <Step active>
753
- <StepLabel>{t('event.tickets.stepper.8.title')}</StepLabel>
754
- <StepContent sx={{ pr: { xs: 0 } }}>
755
- <Services event={event} />
756
- </StepContent>
757
- </Step>
758
- {event.children.length && (
793
+ {event.children.length && (
794
+ <Step active>
795
+ <StepLabel>{t('event.tickets.stepper.7.title')}</StepLabel>
796
+ <StepContent sx={{ pr: { xs: 0 } }}>
797
+ <ChildEventSection events={event.children} />
798
+ </StepContent>
799
+ </Step>
800
+ )}
759
801
  <Step active>
760
- <StepLabel>{t('event.tickets.stepper.7.title')}</StepLabel>
802
+ <StepLabel>{t('event.tickets.stepper.2.title')}</StepLabel>
761
803
  <StepContent sx={{ pr: { xs: 0 } }}>
762
- <ChildEventSection events={event.children} />
804
+ <ContactPerson event={event} />
763
805
  </StepContent>
764
806
  </Step>
765
- )}
766
- <Step active>
767
- <StepLabel>{t('event.tickets.stepper.2.title')}</StepLabel>
768
- <StepContent sx={{ pr: { xs: 0 } }}>
769
- <ContactPerson event={event} />
770
- </StepContent>
771
- </Step>
772
- {event.hasMerchandise && showShippingMethods() && (
807
+ {event.hasMerchandise && showShippingMethods() && (
808
+ <Step active>
809
+ <StepLabel>{t('event.tickets.stepper.5.title')}</StepLabel>
810
+ <StepContent sx={{ pr: { xs: 0 } }}>
811
+ <Shipping event={event} />
812
+ </StepContent>
813
+ </Step>
814
+ )}
773
815
  <Step active>
774
- <StepLabel>{t('event.tickets.stepper.5.title')}</StepLabel>
816
+ <StepLabel>
817
+ {t(
818
+ `event.tickets.stepper.3.${values.isPaymentVerify ? 'title_verify' : 'title'}`
819
+ )}
820
+ </StepLabel>
775
821
  <StepContent sx={{ pr: { xs: 0 } }}>
776
- <Shipping event={event} />
822
+ <Payment event={event} stripeReady={stripeReady} />
777
823
  </StepContent>
778
824
  </Step>
779
- )}
780
- <Step active>
781
- <StepLabel>
782
- {t(
783
- `event.tickets.stepper.3.${values.isPaymentVerify ? 'title_verify' : 'title'}`
784
- )}
785
- </StepLabel>
786
- <StepContent sx={{ pr: { xs: 0 } }}>
787
- <Payment event={event} stripeReady={stripeReady} />
788
- </StepContent>
789
- </Step>
790
- </Stepper>
791
- <Stack
792
- ref={termsAndConditionsRef}
793
- mt={2}
794
- ml={{ xs: 1, md: 4 }}
795
- sx={{ scrollMarginBottom: { xs: 220, md: 0 } }}
796
- >
797
- <RHFCheckbox
798
- name="termsAndConditions"
799
- label={
800
- <>
801
- <Trans
802
- text="event.tickets.terms_and_conditions"
803
- values={{
804
- termsAndConditionsCompanies: options?.termsAndConditionsCompanies
805
- ? options.termsAndConditionsCompanies.join(t('and'))
806
- : ['Eventlook', 'GoPay'].join(` ${t('and')} `),
807
- }}
808
- components={{
809
- 0: (
810
- <CustomLink key={2} href={links.termsAndConditions} target="_blank" />
811
- ),
812
- 1: <CustomLink key={1} href={links.gdpr} target="_blank" />,
813
- }}
814
- />
815
- </>
816
- }
817
- />
818
- {values.ticketInsurance && (
825
+ </Stepper>
826
+ <Stack
827
+ ref={termsAndConditionsRef}
828
+ mt={2}
829
+ ml={{ xs: 1, md: 4 }}
830
+ sx={{ scrollMarginBottom: { xs: 220, md: 0 } }}
831
+ >
819
832
  <RHFCheckbox
820
- name="insuranceTermsAndConditions"
833
+ name="termsAndConditions"
821
834
  label={
822
835
  <>
823
836
  <Trans
824
- text="event.tickets.insurance.checkbox"
837
+ text="event.tickets.terms_and_conditions"
838
+ values={{
839
+ termsAndConditionsCompanies: options?.termsAndConditionsCompanies
840
+ ? options.termsAndConditionsCompanies.join(t('and'))
841
+ : ['Eventlook', 'GoPay'].join(` ${t('and')} `),
842
+ }}
825
843
  components={{
826
844
  0: (
827
845
  <CustomLink
828
846
  key={2}
829
- href="https://eventigo.s3-central.vshosting.cloud/production/colonnade/pp-storno-cz-eventlook-012026.pdf"
830
- target="_blank"
831
- />
832
- ),
833
- 1: (
834
- <CustomLink
835
- key={1}
836
- href="https://eventigo.s3-central.vshosting.cloud/production/colonnade/ipid-storno-cz-112025.pdf"
847
+ href={links.termsAndConditions}
837
848
  target="_blank"
838
849
  />
839
850
  ),
851
+ 1: <CustomLink key={1} href={links.gdpr} target="_blank" />,
840
852
  }}
841
853
  />
842
854
  </>
843
855
  }
844
856
  />
845
- )}
846
- </Stack>
847
- </Grid>
848
- <Grid size={12} sx={{ display: { xs: 'block', md: 'none' } }}>
849
- <Divider sx={{ borderStyle: 'dashed' }} />
857
+ {values.ticketInsurance && (
858
+ <RHFCheckbox
859
+ name="insuranceTermsAndConditions"
860
+ label={
861
+ <>
862
+ <Trans
863
+ text="event.tickets.insurance.checkbox"
864
+ components={{
865
+ 0: (
866
+ <CustomLink
867
+ key={2}
868
+ href="https://eventigo.s3-central.vshosting.cloud/production/colonnade/pp-storno-cz-eventlook-012026.pdf"
869
+ target="_blank"
870
+ />
871
+ ),
872
+ 1: (
873
+ <CustomLink
874
+ key={1}
875
+ href="https://eventigo.s3-central.vshosting.cloud/production/colonnade/ipid-storno-cz-112025.pdf"
876
+ target="_blank"
877
+ />
878
+ ),
879
+ }}
880
+ />
881
+ </>
882
+ }
883
+ />
884
+ )}
885
+ </Stack>
886
+ </Grid>
887
+ <Grid size={12} sx={{ display: { xs: 'block', md: 'none' } }}>
888
+ <Divider sx={{ borderStyle: 'dashed' }} />
889
+ </Grid>
890
+ <Grid size={{ xs: 12, md: 4 }} sx={{ mt: { xs: 0, md: 0 } }}>
891
+ <PaymentOverviewBox event={event} withoutPadding />
892
+ </Grid>
850
893
  </Grid>
851
- <Grid size={{ xs: 12, md: 4 }} sx={{ mt: { xs: 0, md: 0 } }}>
852
- <PaymentOverviewBox event={event} withoutPadding />
853
- </Grid>
854
- </Grid>
855
-
856
- {!isIframe && (
857
- <PaymentOverviewDrawer
858
- event={event}
859
- totalPrice={values.total}
860
- termsAndConditionsRef={termsAndConditionsRef}
861
- onOpenChange={setIsPaymentOverviewDrawerOpen}
894
+
895
+ {!isIframe && (
896
+ <PaymentOverviewDrawer
897
+ event={event}
898
+ totalPrice={values.total}
899
+ termsAndConditionsRef={termsAndConditionsRef}
900
+ onOpenChange={setIsPaymentOverviewDrawerOpen}
901
+ />
902
+ )}
903
+
904
+ <EmailConfirmation
905
+ open={formStep === 2 && !isIframe}
906
+ onClose={() => setFormStep(1)}
907
+ // @ts-ignore -- handleSubmit type mismatch with onConfirm prop
908
+ onConfirm={methods.handleSubmit(onSubmit, onInvalid)}
862
909
  />
863
- )}
864
-
865
- <EmailConfirmation
866
- open={formStep === 2 && !isIframe}
867
- onClose={() => setFormStep(1)}
868
- // @ts-ignore -- handleSubmit type mismatch with onConfirm prop
869
- onConfirm={methods.handleSubmit(onSubmit, onInvalid)}
870
- />
871
- </FormProvider>
910
+ </FormProvider>
911
+ </SeatPickerProvider>
872
912
  </StripeCheckoutProvider>
873
913
  )}
874
914
  </Box>
@@ -49,6 +49,7 @@ const BorderedCheckbox: React.FC<BorderedCheckboxProps> = ({
49
49
  control={control}
50
50
  render={({ field }) => (
51
51
  <FormControlLabel
52
+ className="eventlook-service-row"
52
53
  control={
53
54
  <Checkbox
54
55
  {...field}