all repos — caroster @ 3fcb7cb7b12d3469697dbfef17dec09548f23617

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

frontend/pages/new/details.tsx (view raw)

 1import pageUtils from '../../lib/pageUtils';
 2import Layout from '../../layouts/EventCreation';
 3import {DatePicker} from '@mui/x-date-pickers/DatePicker';
 4import {useTranslation} from 'next-i18next';
 5import useEventCreationStore from '../../stores/useEventCreationStore';
 6import {Button, Paper, Stack, TextField} from '@mui/material';
 7import PlaceInput from '../../containers/PlaceInput';
 8import NextLink from 'next/link';
 9import moment from 'moment';
10import Logo from '../../components/Logo';
11import {useEffect} from 'react';
12import {useRouter} from 'next/router';
13
14const NewEventDetails = () => {
15  const {t} = useTranslation();
16  const router = useRouter();
17  const event = useEventCreationStore(s => s.event);
18  const setField = useEventCreationStore(s => s.setField);
19
20  useEffect(() => {
21    if (!event.name) router.push('/new');
22  }, [event.name, router]);
23
24  return (
25    <Layout>
26      <Paper
27        sx={{
28          p: 2,
29          width: '480px',
30          maxWidth: '100%',
31          display: 'block',
32          margin: '0 auto',
33        }}
34      >
35        <Logo />
36        <Stack spacing={2}>
37          <DatePicker
38            slotProps={{textField: {fullWidth: true, variant: 'standard'}}}
39            format="DD/MM/YYYY"
40            label={t('event.creation.date')}
41            value={event.date ? moment(event.date, 'YYYY-MM-DD') : null}
42            onChange={value => setField('date', value?.format('YYYY-MM-DD'))}
43          />
44          <PlaceInput
45            label={t('event.fields.address')}
46            place={event.address}
47            latitude={event.latitude}
48            longitude={event.longitude}
49            onSelect={({place, latitude, longitude}) => {
50              setField('address', place);
51              setField('latitude', latitude);
52              setField('longitude', longitude);
53            }}
54          />
55          <TextField
56            fullWidth
57            multiline
58            maxRows={4}
59            variant="standard"
60            label={t('event.creation.description')}
61            slotProps={{htmlInput: {maxLength: 250}}}
62            helperText={
63              event.description?.length > 0
64                ? `${event.description.length}/250`
65                : t('event.creation.description_helper')
66            }
67            value={event.description}
68            onChange={e => setField('description', e.target.value)}
69            name="address"
70          />
71          <NextLink href="/new/type" passHref>
72            <Button
73              variant="contained"
74              color="primary"
75              fullWidth
76              type="submit"
77              id="NewEventSubmit"
78            >
79              {t('event.creation.toEventType')}
80            </Button>
81          </NextLink>
82        </Stack>
83      </Paper>
84    </Layout>
85  );
86};
87
88export const getServerSideProps = pageUtils.getServerSideProps();
89
90export default NewEventDetails;