persist the currently-selected project
This commit is contained in:
13
app/src/state/persist.ts
Normal file
13
app/src/state/persist.ts
Normal 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,
|
||||||
|
}),
|
||||||
|
};
|
||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user