import {useMemo, useReducer} from 'react'; import Divider from '@mui/material/Divider'; import Paper from '@mui/material/Paper'; import Button from '@mui/material/Button'; import ListItemSecondaryAction from '@mui/material/ListItemSecondaryAction'; import {useTheme} from '@mui/styles'; import {useTranslation} from 'react-i18next'; import HeaderEditing from './HeaderEditing'; import Header from './Header'; import useActions from './useActions'; import PassengersList from '../PassengersList'; import AddPassengerButtons from '../AddPassengerButtons'; import useProfile from '../../hooks/useProfile'; import usePermissions from '../../hooks/usePermissions'; import useMapStore from '../../stores/useMapStore'; import {TravelEntity} from '../../generated/graphql'; interface Props { travel: TravelEntity; onAddSelf: () => void; onAddOther: () => void; } const Travel = (props: Props) => { const {travel} = props; const { userPermissions: {canDeletePassenger, canJoinTravels, canAddToTravel}, } = usePermissions(); const {t} = useTranslation(); const theme = useTheme(); const [isEditing, toggleEditing] = useReducer(i => !i, false); const actions = useActions({travel}); const {userId, connected} = useProfile(); const {focusedTravel} = useMapStore(); const focused = focusedTravel === travel.id; const disableNewPassengers = travel.attributes.passengers?.data?.length >= travel.attributes.seats; const registered = useMemo(() => { if (!connected) return false; const isInTravel = travel.attributes.passengers?.data.some( passenger => passenger.attributes.user?.data?.id === `${userId}` ); return isInTravel; }, [travel, userId]); if (!travel) return null; return ( {isEditing && ( )} {!isEditing && ( <>
{(canJoinTravels() || canAddToTravel()) && ( <> )} {travel.attributes.passengers.data.length > 0 && } canDeletePassenger({id: passenger.id, attributes: {...passenger.attributes, travel: {data: travel}}}) && ( ) } /> )} ); }; export default Travel;