all repos — caroster @ a60257e204f1cc253e9d375f87bc6d7ea661c1d8

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

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;