import {PropsWithChildren, useEffect, useState} from 'react'; import useMediaQuery from '@mui/material/useMediaQuery'; import Box from '@mui/material/Box'; import {useTheme} from '@mui/material/styles'; import {useTranslation} from 'react-i18next'; import ErrorPage from '../pages/_error'; import useEventStore from '../stores/useEventStore'; import Layout from '../layouts/Default'; import EventBar from '../containers/EventBar'; import DrawerMenu from '../containers/DrawerMenu'; import AddToMyEventDialog from '../containers/AddToMyEventDialog'; import {Event as EventType, useEventByUuidQuery} from '../generated/graphql'; const POLL_INTERVAL = 10000; export type TabComponent = (props: { event: EventType & {id: string}; }) => JSX.Element; interface Props { eventUUID: string; Tab: TabComponent; } const EventLayout = (props: PropsWithChildren) => { const {eventUUID, Tab, ...pageProps} = props; const {t} = useTranslation(); const theme = useTheme(); const isMobile = useMediaQuery(theme.breakpoints.down('md')); const setEvent = useEventStore(s => s.setEvent); const [isAddToMyEvent, setIsAddToMyEvent] = useState(false); const {data: {eventByUUID: {data: {attributes, id} = {}} = {}} = {}} = useEventByUuidQuery({ pollInterval: POLL_INTERVAL, variables: {uuid: eventUUID}, }); const event = {id, ...attributes}; useEffect(() => { if (event) setEvent(event); }, [event]); if (!event) return ; return ( } {...pageProps} > setIsAddToMyEvent(false)} /> ); }; export default EventLayout;