import {useState, forwardRef, useMemo, useEffect} from 'react'; import {makeStyles} from '@material-ui/core/styles'; import Dialog from '@material-ui/core/Dialog'; import DialogActions from '@material-ui/core/DialogActions'; import DialogContent from '@material-ui/core/DialogContent'; import DialogTitle from '@material-ui/core/DialogTitle'; import Button from '@material-ui/core/Button'; import Slide from '@material-ui/core/Slide'; import TextField from '@material-ui/core/TextField'; import Slider from '@material-ui/core/Slider'; import Typography from '@material-ui/core/Typography'; import {DatePicker, TimePicker} from '@material-ui/pickers'; import moment from 'moment'; import {useTranslation} from 'react-i18next'; import useEventStore from '../../stores/useEventStore'; import useActions from './useActions'; import useProfile from '../../hooks/useProfile'; const NewTravelDialog = ({context, toggle}) => { const {t} = useTranslation(); const classes = useStyles(); const {user} = useProfile(); const event = useEventStore(s => s.event); const actions = useActions({event}); const dateMoment = useMemo(() => { if (!event?.date) return moment(); else return moment(event.date); }, [event?.date]); // States const [name, setName] = useState(''); const [seats, setSeats] = useState(4); const [meeting, setMeeting] = useState(''); const [date, setDate] = useState(dateMoment); const [time, setTime] = useState(dateMoment); const [phone, setPhone] = useState(''); const [details, setDetails] = useState(''); const canCreate = !!name && !!seats; useEffect(() => { if (context.vehicle) { setName(context.vehicle.name); setSeats(context.vehicle.seats); setPhone(context.vehicle.phone_number); } }, [context.vehicle]); const onCreate = async e => { if (e.preventDefault) e.preventDefault(); const travel = { meeting, date, time, details, vehicle: { name, seats, phone_number: phone, }, }; if (context.vehicle && user) { // The authenticated user choose an existing vehicle and assign it to the travel await actions.createTravel({ ...travel, vehicle: context.vehicle, }); } else if (user) { // The autenticated user create a vehicle and assign it to the travel await actions.createTravel({ ...travel, vehicle: {...travel.vehicle, user: user.id, created_by: user.id}, }); } else { // The anonymous user create a vehicle and assign it to the travel await actions.createTravel(travel); } toggle({opened: false}); // Clear states setName(''); setSeats(4); setMeeting(''); setDate(moment()); setPhone(''); setDetails(''); }; return ( toggle({opened: false})} TransitionComponent={Transition} >
{t('travel.creation.title')} setName(e.target.value)} name="name" id="NewTravelName" /> setPhone(e.target.value)} name="phone" id="NewTravelPhone" /> setMeeting(e.target.value)} name="meeting" id="NewTravelMeeting" /> setDetails(e.target.value)} name="details" id="NewTravelDetails" />
{t('travel.creation.seats')} setSeats(value)} step={1} marks={MARKS} min={1} max={MARKS.length} valueLabelDisplay="auto" id="NewTravelSeats" />
); }; const Transition = forwardRef(function Transition(props, ref) { return ; }); const MARKS = [1, 2, 3, 4, 5, 6, 7, 8].map(value => ({ value, label: value, })); const useStyles = makeStyles(theme => ({ slider: { marginTop: theme.spacing(2), }, })); export default NewTravelDialog;