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;