frontend/containers/Travel/useActions.ts (view raw)
1import {useTranslation} from 'react-i18next';
2import useEventStore from '../../stores/useEventStore';
3import useToastStore from '../../stores/useToastStore';
4import {
5 useUpdateTravelMutation,
6 useDeleteTravelMutation,
7 EventByUuidDocument,
8 Travel,
9 EditTravelInput,
10 useUpdatePassengerMutation,
11} from '../../generated/graphql';
12
13interface Props {
14 travel: Travel;
15}
16
17const useActions = (props: Props) => {
18 const {travel} = props;
19 const {t} = useTranslation();
20 const event = useEventStore(s => s.event);
21 const addToast = useToastStore(s => s.addToast);
22 const [updateTravelMutation] = useUpdateTravelMutation();
23 const [deleteTravelMutation] = useDeleteTravelMutation();
24 const [updatePassenger] = useUpdatePassengerMutation();
25
26 const sendPassengerToWaitingList = async (passengerId: string) => {
27 try {
28 await updatePassenger({
29 variables: {
30 id: passengerId,
31 passengerUpdate: {
32 event: event.id,
33 travel: null,
34 },
35 },
36 refetchQueries: ['eventByUUID'],
37 });
38 } catch (error) {
39 console.error(error);
40 addToast(t('travel.errors.cant_remove_passenger'));
41 }
42 };
43
44 const updateTravel = async (travelUpdate: EditTravelInput) => {
45 try {
46 await updateTravelMutation({
47 variables: {
48 id: travel.id,
49 travelUpdate,
50 },
51 refetchQueries: ['eventByUUID'],
52 });
53 } catch (error) {
54 console.error(error);
55 addToast(t('travel.errors.cant_update'));
56 }
57 };
58
59 const removeTravel = async () => {
60 try {
61 await deleteTravelMutation({
62 variables: {
63 id: travel.id,
64 },
65 refetchQueries: [
66 {query: EventByUuidDocument, variables: {uuid: event.uuid}},
67 ],
68 });
69 addToast(t('travel.actions.removed'));
70 } catch (error) {
71 console.error(error);
72 addToast(t('travel.errors.cant_remove'));
73 }
74 };
75
76 return {sendPassengerToWaitingList, updateTravel, removeTravel};
77};
78
79export default useActions;