frontend/hooks/useAddToEvents.ts (view raw)
1import {useCallback} from 'react';
2import {useUpdateMeMutation} from '../generated/graphql';
3import useAuthStore from '../stores/useAuthStore';
4import create from 'zustand';
5
6type Store = {
7 eventsToBeAdded: string[];
8 addEvent: (eventId: string) => void;
9 clear: () => void;
10};
11
12const store = create<Store>((set, get) => ({
13 eventsToBeAdded: [],
14 addEvent: eventId =>
15 set({eventsToBeAdded: [...get().eventsToBeAdded, eventId]}),
16 clear: () => set({eventsToBeAdded: []}),
17}));
18
19const useAddToEvents = () => {
20 const [updateProfile] = useUpdateMeMutation();
21 const isAuth = useAuthStore(s => !!s.token);
22 const eventsToBeAdded = store(s => s.eventsToBeAdded);
23 const addEvent = store(s => s.addEvent);
24 const clearStore = store(s => s.clear);
25
26 const saveStoredEvents = useCallback(() => {
27 console.log('SAVE STORED EVENTS', {eventsToBeAdded});
28 if (eventsToBeAdded.length > 0) {
29 updateProfile({
30 variables: {
31 userUpdate: {
32 events: eventsToBeAdded,
33 },
34 },
35 });
36 clearStore();
37 }
38 }, [eventsToBeAdded]);
39
40 const addToEvent = (eventId: string) => {
41 if (isAuth) {
42 updateProfile({
43 variables: {
44 userUpdate: {
45 events: [eventId],
46 },
47 },
48 });
49 } else addEvent(eventId);
50 };
51
52 return {saveStoredEvents, addToEvent};
53};
54
55export default useAddToEvents;