frontend/containers/NewTravelDialog/useActions.ts (view raw)
1import moment from 'moment';
2import {useTranslation} from 'react-i18next';
3import useToastsStore from '../../stores/useToastStore';
4import useAddToEvents from '../../hooks/useAddToEvents';
5import {
6 Event,
7 EventByUuidDocument,
8 useCreateTravelMutation,
9 useCreateVehicleMutation,
10} from '../../generated/graphql';
11
12interface Props {
13 event: Event;
14}
15
16const useActions = (props: Props) => {
17 const {event} = props;
18 const {t} = useTranslation();
19 const addToast = useToastsStore(s => s.addToast);
20 const {addToEvent} = useAddToEvents();
21 const [createVehicleMutation] = useCreateVehicleMutation();
22 const [createTravelMutation] = useCreateTravelMutation();
23
24 // TODO Move these logics to backend
25 const createTravel = async ({vehicle, date, time, ...travel}) => {
26 try {
27 const departure = moment(
28 `${moment(date).format('YYYY-MM-DD')} ${moment(time).format('HH:mm')}`,
29 'YYYY-MM-DD HH:mm'
30 ).toISOString();
31 const {data: {createVehicle} = {}} = await createVehicleMutation({
32 variables: {
33 vehicle,
34 },
35 });
36
37 await createTravelMutation({
38 variables: {
39 travel: {
40 ...travel,
41 departure,
42 event: event.id,
43 vehicle: createVehicle?.vehicle?.id,
44 },
45 },
46 refetchQueries: [
47 {
48 query: EventByUuidDocument,
49 variables: {
50 uuid: event.uuid,
51 },
52 },
53 ],
54 });
55
56 addToEvent(event.id);
57 addToast(t('travel.creation.created'));
58 } catch (error) {
59 console.error(error);
60 addToast(t('travel.errors.cant_create'));
61 }
62 return false;
63 };
64
65 return {createTravel};
66};
67
68export default useActions;