all repos — caroster @ 2e4e192becc64475ea9245eb5fec57f72cb7088e

[Octree] Group carpool to your event https://caroster.io

frontend/containers/Markers/TravelMarker/TravelPopup.tsx (view raw)

 1import moment from 'moment';
 2import Card from '@mui/material/Card';
 3import Typography from '@mui/material/Typography';
 4import Link from '@mui/material/Link';
 5import Box from '@mui/material/Box';
 6import {TravelEntity} from '../../../generated/graphql';
 7import {Popup} from 'react-leaflet';
 8import {useTranslation} from 'next-i18next';
 9import getMapsLink from '../../../lib/getMapsLink';
10import {getFormatedPhoneNumber} from '../../../lib/phoneNumbers';
11import usePermissions from '../../../hooks/usePermissions';
12import useEventStore from '../../../stores/useEventStore';
13import {getTravelName} from '../../../lib/travels';
14
15interface Props {
16  travel: TravelEntity;
17}
18
19const TravelPopup = ({travel}: Props) => {
20  const {t} = useTranslation();
21  const {
22    userPermissions: {canSeeTravelDetails, canSeeFullName},
23  } = usePermissions();
24  const isReturnEvent = useEventStore(s => s.event?.isReturnEvent);
25  return (
26    <Popup>
27      <Card sx={{p: 2, width: '350px', maxWidth: '100%', cursor: 'pointer'}}>
28        {!!travel.attributes.departureDate && (
29          <Typography variant="overline" color="Graytext" id="TravelDeparture">
30            {moment(travel.attributes.departureDate).format('dddd LL')}{' '}
31            {travel.attributes.departureTime || ''}
32          </Typography>
33        )}
34        <Box>
35          <Typography variant="h5">
36            {getTravelName(travel, canSeeFullName())}
37          </Typography>
38        </Box>
39        {!!travel.attributes.phone_number && canSeeTravelDetails(travel) && (
40          <Box sx={{marginTop: 2}}>
41            <Typography variant="overline" color="GrayText">
42              {t('travel.fields.phone')}
43            </Typography>
44            <Typography variant="body1">
45              {getFormatedPhoneNumber({
46                phone: travel.attributes.phone_number,
47                phoneCountry: travel.attributes.phoneCountry,
48              })}
49            </Typography>
50          </Box>
51        )}
52        {!!travel.attributes.meeting && (
53          <Box sx={{marginTop: 2}}>
54            <Typography variant="overline" color="GrayText">
55              {t(isReturnEvent ? 'travel.destination' : 'travel.meeting')}
56            </Typography>
57            <Typography variant="body1" color="primary">
58              <Link
59                component="a"
60                target="_blank"
61                rel="noopener noreferrer"
62                href={getMapsLink(travel.attributes.meeting)}
63                onClick={e => e.stopPropagation()}
64                sx={{color: 'primary.main'}}
65              >
66                {travel.attributes.meeting}
67              </Link>
68            </Typography>
69          </Box>
70        )}
71      </Card>
72    </Popup>
73  );
74};
75export default TravelPopup;