all repos — caroster @ 88d8a2b5aa242ff2964f361e868e820c23153d86

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

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;