all repos — caroster @ 3e13ed81f9961ed582333d0e9296921db2ed91d9

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

frontend/containers/NewTravelDialog/useActions.ts (view raw)

 1import {useTranslation} from 'react-i18next';
 2import {PureQueryOptions} from '@apollo/client/core';
 3import useToastsStore from '../../stores/useToastStore';
 4import useAddToEvents from '../../hooks/useAddToEvents';
 5import useProfile from '../../hooks/useProfile';
 6import {
 7  EventByUuidDocument,
 8  useCreateTravelMutation,
 9  TravelInput,
10  FindUserVehiclesDocument,
11  Event,
12} from '../../generated/graphql';
13
14interface Props {
15  event: Event & {id: string};
16}
17
18const useActions = (props: Props) => {
19  const {event} = props;
20  const {t} = useTranslation();
21  const addToast = useToastsStore(s => s.addToast);
22  const {addToEvent} = useAddToEvents();
23  const [createTravelMutation] = useCreateTravelMutation();
24  const {connected} = useProfile();
25
26  const createTravel = async (
27    travelInput: TravelInput,
28    createVehicle: boolean
29  ) => {
30    const refetchQueries: Array<PureQueryOptions> = [
31      {
32        query: EventByUuidDocument,
33        variables: {
34          uuid: event.uuid,
35        },
36      },
37    ];
38    if (connected) {
39      refetchQueries.push({
40        query: FindUserVehiclesDocument,
41      });
42    }
43    try {
44
45      await createTravelMutation({
46        variables: {
47          travel: {
48            ...travelInput,
49          },
50          createVehicle,
51        },
52        refetchQueries,
53      });
54      addToEvent(event.id);
55      addToast(t('travel.creation.created'));
56    } catch (error) {
57      console.error(error);
58      addToast(t('travel.errors.cant_create'));
59    }
60  };
61
62  return {createTravel};
63};
64
65export default useActions;