all repos — caroster @ 2514e64e14324d01eada51f08410194d01a169c4

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

frontend/hooks/usePermissions.ts (view raw)

 1import useEventStore from '../stores/useEventStore';
 2import useProfile from './useProfile';
 3
 4interface UserPermissions {
 5  canEditEventOptions: boolean;
 6  canEditEventDetails: boolean;
 7  canEditWaitingList: boolean;
 8  canAddTravel: boolean;
 9  editableTravels: Array<string>;
10  canJoinTravels: boolean;
11  canAddToTravel: boolean;
12}
13
14const noPermissions = {
15  canEditEventOptions: false,
16  canEditEventDetails: false,
17  canEditWaitingList: false,
18  canAddTravel: false,
19  editableTravels: [],
20  canJoinTravels: false,
21  canAddToTravel: false,
22};
23
24const usePermissions = (): {userPermissions: UserPermissions} => {
25  const {event} = useEventStore();
26  const {profile, connected, userId} = useProfile();
27
28  const carosterPlus = event?.enabled_modules?.includes('caroster-plus');
29  const userIsAnonymous = !connected;
30  const userIsEventCreator = event && profile?.email === event.email;
31  const userIsEventAdmin = event?.administrators?.includes(profile?.email);
32  const travels = event?.travels?.data || [];
33
34  const allPermissions: UserPermissions = {
35    canEditEventOptions: true,
36    canEditEventDetails: true,
37    canEditWaitingList: true,
38    canAddTravel: true,
39    editableTravels: travels.map(({id}) => id),
40    canJoinTravels: true,
41    canAddToTravel: true,
42  };
43
44  if (carosterPlus) {
45    if (userIsAnonymous) return {userPermissions: noPermissions};
46    else if (userIsEventCreator || userIsEventAdmin)
47      return {userPermissions: {...allPermissions, canAddToTravel: false}};
48    else {
49      const editableTravelsCollection = travels.filter(
50        travel => travel.attributes.user?.data?.id !== userId
51      );
52      const carosterPlusPermissions: UserPermissions = {
53        ...noPermissions,
54        editableTravels: editableTravelsCollection.map(({id}) => id),
55        canJoinTravels: true,
56        canAddTravel: true,
57      };
58      return {userPermissions: carosterPlusPermissions};
59    }
60  }
61  // Caroster Vanilla permissions
62  else
63    return {
64      userPermissions: {
65        ...allPermissions,
66        canEditEventOptions: userIsEventCreator,
67        canJoinTravels: connected,
68      },
69    };
70};
71
72export default usePermissions;