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