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;