all repos — caroster @ 512757d6ae90dfc3ddae08bb34ddb889ee3ec54f

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

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;