all repos — caroster @ a781a5fafbf60b3c6587213cf3c9bfb735bdf933

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