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