all repos — caroster @ 0106eb023ccf03f53408d4a3a523b5430f51d898

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

frontend/containers/CreateEvent/Step2.js (view raw)

 1import {useState} from 'react';
 2import {useRouter} from 'next/router';
 3import {makeStyles} from '@material-ui/core/styles';
 4import TextField from '@material-ui/core/TextField';
 5import Button from '@material-ui/core/Button';
 6import {CircularProgress} from '@material-ui/core';
 7import {DatePicker} from '@material-ui/pickers';
 8import moment from 'moment';
 9import {useTranslation} from 'react-i18next';
10import useToastStore from '../../stores/useToastStore';
11
12const Step2 = ({event, addToEvent, createEvent}) => {
13  const classes = useStyles();
14  const {t} = useTranslation();
15  const router = useRouter();
16  const addToast = useToastStore(s => s.addToast);
17
18  // States
19  const [date, setDate] = useState(null);
20  const [address, setAddress] = useState(event.address ?? '');
21  const [loading, setLoading] = useState(false);
22
23  const onCreate = async evt => {
24    if (evt.preventDefault) evt.preventDefault();
25    if (loading) return false;
26    setLoading(true);
27    const eventData = {
28      date: !date ? null : moment(date).format('YYYY-MM-DD'),
29      address,
30    };
31    addToEvent(eventData);
32    const result = await createEvent(eventData);
33    if (!result) addToast(t('event.errors.cant_create'));
34    else router.push(`/e/${result.uuid}`);
35    setLoading(false);
36    return false;
37  };
38
39  return (
40    <form onSubmit={onCreate}>
41      <DatePicker
42        id="NewEventDate"
43        fullWidth
44        label={t('event.creation.date')}
45        format="DD/MM/YYYY"
46        value={date}
47        onChange={setDate}
48        clearable
49        clearLabel={t('generic.clear')}
50        cancelLabel={t('generic.cancel')}
51      />
52      <TextField
53        label={t('event.creation.address')}
54        fullWidth
55        margin="dense"
56        multiline
57        rows={4}
58        value={address}
59        onChange={e => setAddress(e.target.value)}
60        id="NewEventAddress"
61        name="address"
62      />
63      <Button
64        disabled={loading}
65        className={classes.button}
66        variant="contained"
67        color="secondary"
68        fullWidth
69        type="submit"
70        id="NewEventSubmit"
71      >
72        {loading ? (
73          <CircularProgress
74            className={classes.loader}
75            size={20}
76            color="primary"
77          />
78        ) : (
79          t('generic.create')
80        )}
81      </Button>
82    </form>
83  );
84};
85
86const useStyles = makeStyles(theme => ({
87  button: {
88    marginTop: theme.spacing(2),
89  },
90}));
91
92export default Step2;