import {useState} from 'react'; import {useTranslation} from 'react-i18next'; import {useTheme} from '@mui/material/styles'; import Container from '@mui/material/Container'; import Masonry from '@mui/lab/Masonry'; import Box from '@mui/material/Box'; import useEventStore from '../../stores/useEventStore'; import useToastStore from '../../stores/useToastStore'; import useProfile from '../../hooks/useProfile'; import useAddToEvents from '../../hooks/useAddToEvents'; import usePassengersActions from '../../hooks/usePassengersActions'; import Travel from '../Travel'; import NoCar from './NoCar'; import {Travel as TravelData, TravelEntity} from '../../generated/graphql'; import {AddPassengerToTravel} from '../NewPassengerDialog'; type TravelType = TravelData & {id: string}; interface Props { toggle: () => void; } const TravelColumns = (props: Props) => { const theme = useTheme(); const event = useEventStore(s => s.event); const travels = event?.travels?.data || []; const {t} = useTranslation(); const addToast = useToastStore(s => s.addToast); const {addToEvent} = useAddToEvents(); const {profile, userId} = useProfile(); const [newPassengerTravelContext, toggleNewPassengerToTravel] = useState<{ travel: TravelType; } | null>(null); const {addPassenger} = usePassengersActions(); const sortedTravels = travels?.slice().sort(sortTravels); const addSelfToTravel = async (travel: TravelType) => { try { await addPassenger({ user: userId, email: profile.email, name: profile.username, travel: travel.id, event: event.id, }); addToEvent(event.id); addToast(t('passenger.success.added_self_to_car')); } catch (error) { console.error(error); } }; return ( {(travels?.length === 0 && ( )) || ( {sortedTravels?.map(({id, attributes}) => { const travel = {id, ...attributes}; return ( *': { cursor: 'default', }, [theme.breakpoints.down('md')]: { marginBottom: `calc(${theme.spacing(10)} + 56px)`, }, }} > () => addSelf ? addSelfToTravel(travel) : toggleNewPassengerToTravel({travel})} /> ); })} *': { cursor: 'default', }, [theme.breakpoints.down('md')]: { marginBottom: `calc(${theme.spacing(10)} + 56px)`, }, }} > )} {!!newPassengerTravelContext && ( toggleNewPassengerToTravel(null)} travel={newPassengerTravelContext.travel} /> )} ); }; const sortTravels = ( {attributes: a}: TravelEntity, {attributes: b}: TravelEntity ) => { if (!b) return 1; const dateA = new Date(a.departure).getTime(); const dateB = new Date(b.departure).getTime(); if (dateA === dateB) return new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime(); else return dateA - dateB; }; export default TravelColumns;