all repos — caroster @ 95876236a197ac3c43205c69fd4e70f3a300105c

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

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

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