import {useState, useReducer, useCallback, useEffect} from 'react'; import Typography from '@mui/material/Typography'; import Button from '@mui/material/Button'; import TextField from '@mui/material/TextField'; import Slider from '@mui/material/Slider'; import Box from '@mui/material/Box'; import moment from 'moment'; import {useTheme} from '@mui/material/styles'; import {DatePicker} from '@mui/x-date-pickers/DatePicker'; import {TimePicker} from '@mui/x-date-pickers/TimePicker'; import {CountryIso2} from 'react-international-phone'; import {useTranslation} from 'react-i18next'; import RemoveDialog from '../RemoveDialog'; import useActions from './useActions'; import PlaceInput from '../PlaceInput'; import PhoneInput from '../../components/PhoneInput'; import useEventStore from '../../stores/useEventStore'; import {TravelEntity} from '../../generated/graphql'; interface Props { travel: TravelEntity; toggleEditing: () => void; } const HeaderEditing = ({travel, toggleEditing}: Props) => { const {t} = useTranslation(); const theme = useTheme(); const actions = useActions({travel}); const isCarosterPlus = useEventStore(s => s.event.enabled_modules?.includes('caroster-plus') ); const [removing, toggleRemoving] = useReducer(i => !i, false); // States const [name, setName] = useState(travel?.attributes.vehicleName ?? ''); const [seats, setSeats] = useState(travel?.attributes.seats ?? 4); const [meeting, setMeeting] = useState(travel?.attributes.meeting ?? ''); const [meeting_latitude, setMeetingLatitude] = useState( travel?.attributes.meeting_latitude ); const [meeting_longitude, setMeetingLongitude] = useState( travel?.attributes.meeting_longitude ); const [date, setDate] = useState( travel?.attributes.departureDate ? moment(travel.attributes.departureDate) : null ); const [time, setTime] = useState( travel?.attributes.departureTime ? moment(travel.attributes.departureTime, 'HH:mm') : null ); const [phone, setPhone] = useState(travel?.attributes.phone_number ?? ''); const [phoneCountry, setPhoneCountry] = useState( travel?.attributes.phoneCountry ?? '' ); const [phoneError, setPhoneError] = useState(false); const [details, setDetails] = useState(travel?.attributes.details ?? ''); // Click on ESQ closes the form const escFunction = useCallback( evt => { if (evt.keyCode === 27) toggleEditing(); }, [toggleEditing] ); useEffect(() => { document.addEventListener('keydown', escFunction, false); return () => { document.removeEventListener('keydown', escFunction, false); }; }, [escFunction]); const onSave = async event => { if (event.preventDefault) event.preventDefault(); const travelUpdate = { meeting, meeting_latitude, meeting_longitude, details, seats, phone_number: phone, phoneCountry, vehicleName: name, departureDate: date ? moment(date).format('YYYY-MM-DD') : '', departureTime: time ? moment(time).format('HH:mm') : '', }; await actions.updateTravel(travelUpdate); toggleEditing(); }; const onRemove = async () => { await actions.removeTravel( isCarosterPlus ? t`travel.actions.removed.caroster_plus` : t`travel.actions.removed` ); toggleEditing(); }; return (
setName(e.target.value)} name="name" id="EditTravelName" /> { setPhone(phone); setPhoneCountry(country); setPhoneError(error); }} label={t('travel.creation.phone')} sx={{pb: 2}} name="phone" id="EditTravelPhone" /> { setMeeting(place); setMeetingLatitude(latitude); setMeetingLongitude(longitude); }} /> setDetails(e.target.value)} name="details" id="EditTravelDetails" /> {t('travel.creation.seats')} setSeats(value)} step={1} marks={[1, 2, 3, 4, 5, 6, 7, 8].map(value => ({ value, label: value, }))} min={1} max={8} valueLabelDisplay="auto" id="EditTravelSeats" /> *:first-child': { marginBottom: theme.spacing(2), }, }} >
); }; export default HeaderEditing;