all repos — caroster @ be8f93ea0966f0bc0587c2c127ee1ba15594a049

[Octree] Group carpool to your event https://caroster.io

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 '@material-ui/core/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;