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 useUpdatePassengerMutation,
10 TravelInput
11} from '../../generated/graphql';
12
13interface Props {
14 travel: Travel & {id: string};
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 addToast(t('travel.moved_to_waiting_list'));
39 } catch (error) {
40 console.error(error);
41 addToast(t('travel.errors.cant_remove_passenger'));
42 }
43 };
44
45 const updateTravel = async (travelUpdate: TravelInput) => {
46 try {
47 await updateTravelMutation({
48 variables: {
49 id: travel.id,
50 travelUpdate,
51 },
52 refetchQueries: ['eventByUUID'],
53 });
54 } catch (error) {
55 console.error(error);
56 addToast(t('travel.errors.cant_update'));
57 }
58 };
59
60 const removeTravel = async () => {
61 try {
62 await deleteTravelMutation({
63 variables: {
64 id: travel.id,
65 },
66 refetchQueries: [
67 {query: EventByUuidDocument, variables: {uuid: event.uuid}},
68 ],
69 });
70 addToast(t('travel.actions.removed'));
71 } catch (error) {
72 console.error(error);
73 addToast(t('travel.errors.cant_remove'));
74 }
75 };
76
77 return {sendPassengerToWaitingList, updateTravel, removeTravel};
78};
79
80export default useActions;