frontend/hooks/usePassengersActions.ts (view raw)
1import {
2 Travel,
3 Event,
4 useUpdateTravelMutation,
5 useUpdateEventMutation,
6 ComponentPassengerPassenger,
7 ComponentPassengerPassengerInput,
8} from '../generated/graphql';
9
10interface AddPassengerToTravelArgs {
11 passenger: ComponentPassengerPassengerInput;
12 travel: Travel;
13}
14
15interface AddPassengerToWaitingList {
16 passenger: ComponentPassengerPassenger;
17 event: Event;
18}
19
20interface RemovePassengerArgs {
21 passenger: ComponentPassengerPassenger;
22 event: Event;
23}
24
25const usepassengersActions = () => {
26 const [updateEvent] = useUpdateEventMutation();
27 const [updateTravel] = useUpdateTravelMutation();
28
29 const addPassengerToTravel = async ({
30 passenger,
31 travel,
32 }: AddPassengerToTravelArgs) => {
33 const passengers =
34 [...travel.passengers, passenger].map(({__typename, user, ...item}) => {
35 return user && typeof user !== 'string'
36 ? {
37 ...item,
38 user: user.id,
39 }
40 : item;
41 }) || [];
42
43 return updateTravel({
44 variables: {
45 id: travel.id,
46 travelUpdate: {
47 passengers,
48 },
49 },
50 });
51 };
52
53 const addPassengerToWaitingList = async ({
54 passenger,
55 event,
56 }: AddPassengerToWaitingList) => {
57 const waitingList = [
58 ...event.waitingList,
59 passenger,
60 ].map(({__typename, user, ...item}) =>
61 user ? {...item, user: user.id} : item
62 );
63 return updateEvent({
64 variables: {uuid: event.uuid, eventUpdate: {waitingList}},
65 refetchQueries: ['eventByUUID'],
66 });
67 };
68
69 const removePassengerFromWaitingList = async ({
70 passenger,
71 event,
72 }: RemovePassengerArgs) => {
73 const waitingList = event.waitingList
74 .filter(waitingListPassenger => waitingListPassenger.id !== passenger?.id)
75 .map(({__typename, user, ...item}) => item);
76 return updateEvent({
77 variables: {uuid: event.uuid, eventUpdate: {waitingList}},
78 refetchQueries: ['eventByUUID'],
79 });
80 };
81
82 return {
83 addPassengerToTravel,
84 addPassengerToWaitingList,
85 removePassengerFromWaitingList,
86 };
87};
88
89export default usepassengersActions;