all repos — caroster @ v8.0

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

frontend/containers/Alerts/index.tsx (view raw)

 1import {useEffect, useReducer} from 'react';
 2import {Box, Container, Paper, Typography, useMediaQuery} from '@mui/material';
 3import {useTranslation} from 'next-i18next';
 4import theme from '../../theme';
 5import usePermissions from '../../hooks/usePermissions';
 6import LoginToAttend from '../LoginToAttend/LoginToAttend';
 7import AlertsHeader from './AlertsHead';
 8import AlertsForm from './AlertsForm';
 9import {EventEntity, TripAlertEntity} from '../../generated/graphql';
10
11interface Props {
12  event: EventEntity;
13  tripAlertEntity: TripAlertEntity;
14}
15
16const Alerts = ({event, tripAlertEntity}: Props) => {
17  const {
18    userPermissions: {canSetAlert},
19  } = usePermissions();
20  const {t} = useTranslation();
21  const isMobile = useMediaQuery(theme.breakpoints.down('md'));
22  const [switchChecked, handleToggle] = useReducer(i => !i, false);
23
24  useEffect(() => {
25    if (tripAlertEntity?.attributes?.enabled && !switchChecked) handleToggle();
26    else if (!tripAlertEntity?.attributes?.enabled && switchChecked)
27      handleToggle();
28  }, [tripAlertEntity]);
29
30  return (
31    <Container
32      maxWidth="sm"
33      sx={{mt: isMobile ? 15 : 11, mx: 0, px: isMobile ? 2 : 4}}
34      key={tripAlertEntity?.attributes.address}
35    >
36      {!canSetAlert() && (
37        <Box sx={{width: '480px', maxWidth: '100%', position: 'relative'}}>
38          <LoginToAttend title={t('event.loginToSetAlert')} />
39        </Box>
40      )}
41      <Paper sx={{width: '480px', maxWidth: '100%', position: 'relative'}}>
42        <Box p={2}>
43          <AlertsHeader
44            event={event}
45            switchChecked={switchChecked}
46            handleToggle={handleToggle}
47            disabled={!canSetAlert()}
48          />
49          <Typography sx={{mt: 2}} variant="body2">
50            {t('alert.description')}
51          </Typography>
52          <AlertsForm
53            event={event}
54            disabled={!canSetAlert || !switchChecked}
55            tripAlertEntity={tripAlertEntity}
56          />
57        </Box>
58      </Paper>
59    </Container>
60  );
61};
62
63export default Alerts;