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;