all repos — caroster @ 6d2659c5a5d3df7aeeaad568e6543fcbb943bf45

[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 {user} = 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 (user) {
39      refetchQueries.push({
40        query: FindUserVehiclesDocument,
41      });
42    }
43    try {
44      await createTravelMutation({
45        variables: {travel: travelInput, createVehicle},
46        refetchQueries,
47      });
48      addToEvent(event.id);
49      addToast(t('travel.creation.created'));
50    } catch (error) {
51      console.error(error);
52      addToast(t('travel.errors.cant_create'));
53    }
54  };
55
56  return {createTravel};
57};
58
59export default useActions;