all repos — caroster @ e70935af9e0fac5a21e2c8dd999608ce06538783

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

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

 1import {useTranslation} from 'next-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      await createTravelMutation({
45        variables: {
46          travel: {
47            ...travelInput,
48          },
49          createVehicle,
50        },
51        refetchQueries,
52      });
53      addToEvent(event.id);
54      addToast(t('travel.creation.created'));
55    } catch (error) {
56      console.error(error);
57      addToast(t('travel.errors.cant_create'));
58    }
59  };
60
61  return {createTravel};
62};
63
64export default useActions;