Merge pull request #129 from OpenPipe/persist-proj

persist the currently-selected project
This commit is contained in:
Kyle Corbitt
2023-08-09 17:05:17 -07:00
committed by GitHub
2 changed files with 44 additions and 23 deletions

13
app/src/state/persist.ts Normal file
View File

@@ -0,0 +1,13 @@
import { PersistOptions } from "zustand/middleware/persist";
import { State } from "./store";
export const stateToPersist = {
selectedProjectId: null as string | null,
};
export const persistOptions: PersistOptions<State, typeof stateToPersist> = {
name: "persisted-app-store",
partialize: (state) => ({
selectedProjectId: state.selectedProjectId,
}),
};

View File

@@ -1,11 +1,13 @@
import { type StateCreator, create } from "zustand"; import { type StateCreator, create } from "zustand";
import { immer } from "zustand/middleware/immer"; import { immer } from "zustand/middleware/immer";
import { persist } from "zustand/middleware";
import { createSelectors } from "./createSelectors"; import { createSelectors } from "./createSelectors";
import { import {
type SharedVariantEditorSlice, type SharedVariantEditorSlice,
createVariantEditorSlice, createVariantEditorSlice,
} from "./sharedVariantEditor.slice"; } from "./sharedVariantEditor.slice";
import { type APIClient } from "~/utils/api"; import { type APIClient } from "~/utils/api";
import { persistOptions, stateToPersist } from "./persist";
export type State = { export type State = {
drawerOpen: boolean; drawerOpen: boolean;
@@ -23,30 +25,36 @@ export type SliceCreator<T> = StateCreator<State, [["zustand/immer", never]], []
export type SetFn = Parameters<SliceCreator<unknown>>[0]; export type SetFn = Parameters<SliceCreator<unknown>>[0];
export type GetFn = Parameters<SliceCreator<unknown>>[1]; export type GetFn = Parameters<SliceCreator<unknown>>[1];
const useBaseStore = create<State, [["zustand/immer", never]]>( const useBaseStore = create<
immer((set, get, ...rest) => ({ State,
api: null, [["zustand/persist", typeof stateToPersist], ["zustand/immer", never]]
setApi: (api) => >(
set((state) => { persist(
state.api = api; immer((set, get, ...rest) => ({
}), api: null,
setApi: (api) =>
set((state) => {
state.api = api;
}),
drawerOpen: false, drawerOpen: false,
openDrawer: () => openDrawer: () =>
set((state) => { set((state) => {
state.drawerOpen = true; state.drawerOpen = true;
}), }),
closeDrawer: () => closeDrawer: () =>
set((state) => { set((state) => {
state.drawerOpen = false; state.drawerOpen = false;
}), }),
sharedVariantEditor: createVariantEditorSlice(set, get, ...rest), sharedVariantEditor: createVariantEditorSlice(set, get, ...rest),
selectedProjectId: null, selectedProjectId: null,
setselectedProjectId: (id: string) => setselectedProjectId: (id: string) =>
set((state) => { set((state) => {
state.selectedProjectId = id; state.selectedProjectId = id;
}), }),
})), })),
persistOptions,
),
); );
export const useAppStore = createSelectors(useBaseStore); export const useAppStore = createSelectors(useBaseStore);