all repos — caroster @ 01900f894c783e01cfa3d75eedf28316abfa310f

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

frontend/stores/useEventCreationStore.ts (view raw)

 1import {create} from 'zustand';
 2import {persist, createJSONStorage} from 'zustand/middleware';
 3import {EventInput} from '../generated/graphql';
 4
 5interface State {
 6  ready: boolean;
 7  event: Partial<EventInput>;
 8  setField: (fieldName: keyof EventInput, value: unknown) => void;
 9}
10
11const useEventCreationStore = create<State>()(
12  persist(
13    (set, get) => ({
14      ready: false,
15      event: {
16        name: '',
17        email: '',
18      },
19      setField: (field, value) => {
20        const currentEvent = get().event;
21        set({event: {...currentEvent, [field]: value}});
22      },
23    }),
24    {
25      name: 'event-creation',
26      storage: createJSONStorage(() => localStorage),
27      onRehydrateStorage: () => state => {
28        if (state) state.ready = true;
29      },
30    }
31  )
32);
33
34export default useEventCreationStore;