frontend/containers/Travel/useActions.tsx (view raw)
1import {useTranslation} from 'react-i18next';
2import Link from 'next/link';
3import useEventStore from '../../stores/useEventStore';
4import useToastStore from '../../stores/useToastStore';
5import {
6 useUpdateTravelMutation,
7 useDeleteTravelMutation,
8 EventByUuidDocument,
9 Travel,
10 useUpdatePassengerMutation,
11 TravelInput,
12} from '../../generated/graphql';
13import Button from '@mui/material/Button';
14
15interface Props {
16 travel: Travel & {id: string};
17}
18
19const useActions = (props: Props) => {
20 const {travel} = props;
21 const {t} = useTranslation();
22 const event = useEventStore(s => s.event);
23 const addToast = useToastStore(s => s.addToast);
24 const clearToast = useToastStore(s => s.clearToast);
25 const [updateTravelMutation] = useUpdateTravelMutation();
26 const [deleteTravelMutation] = useDeleteTravelMutation();
27 const [updatePassenger] = useUpdatePassengerMutation();
28
29 const sendPassengerToWaitingList = async (passengerId: string) => {
30 try {
31 await updatePassenger({
32 variables: {
33 id: passengerId,
34 passengerUpdate: {
35 event: event.id,
36 travel: null,
37 },
38 },
39 refetchQueries: ['eventByUUID'],
40 });
41 addToast(
42 t('travel.moved_to_waiting_list'),
43 <Link href={`/e/${event.uuid}/waitingList`} passHref>
44 <Button
45 size="small"
46 color="primary"
47 variant="contained"
48 onClick={() => clearToast()}
49 >
50 {t('generic.access')}
51 </Button>
52 </Link>
53 );
54 } catch (error) {
55 console.error(error);
56 addToast(t('travel.errors.cant_remove_passenger'));
57 }
58 };
59
60 const updateTravel = async (travelUpdate: TravelInput) => {
61 try {
62 await updateTravelMutation({
63 variables: {
64 id: travel.id,
65 travelUpdate,
66 },
67 refetchQueries: ['eventByUUID'],
68 });
69 } catch (error) {
70 console.error(error);
71 addToast(t('travel.errors.cant_update'));
72 }
73 };
74
75 const removeTravel = async () => {
76 try {
77 await deleteTravelMutation({
78 variables: {
79 id: travel.id,
80 },
81 refetchQueries: [
82 {query: EventByUuidDocument, variables: {uuid: event.uuid}},
83 ],
84 });
85 addToast(t('travel.actions.removed'));
86 } catch (error) {
87 console.error(error);
88 addToast(t('travel.errors.cant_remove'));
89 }
90 };
91
92 return {sendPassengerToWaitingList, updateTravel, removeTravel};
93};
94
95export default useActions;