frontend/containers/AddTravelButton/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 {
6 EventByUuidDocument,
7 useCreateTravelMutation,
8 TravelInput,
9 Event,
10} from '../../generated/graphql';
11
12interface Props {
13 event: Event & {id: string};
14}
15
16const useActions = (props: Props) => {
17 const {event} = props;
18 const {t} = useTranslation();
19 const addToast = useToastsStore(s => s.addToast);
20 const {addToEvent} = useAddToEvents();
21 const [createTravelMutation] = useCreateTravelMutation();
22
23 const createTravel = async (travelInput: TravelInput) => {
24 const refetchQueries: Array<PureQueryOptions> = [
25 {
26 query: EventByUuidDocument,
27 variables: {
28 uuid: event.uuid,
29 },
30 },
31 ];
32
33 try {
34 await createTravelMutation({
35 variables: {
36 travel: travelInput,
37 },
38 refetchQueries,
39 });
40 addToEvent(event.id);
41 addToast(t('travel.creation.created'));
42 } catch (error) {
43 console.error(error);
44 addToast(t('travel.errors.cant_create'));
45 }
46 };
47
48 return {createTravel};
49};
50
51export default useActions;