Add sidebar state to app store

This commit is contained in:
jeffvli
2022-10-26 16:24:28 -07:00
parent 46eb5e4e5d
commit 82a47c42b8
+36 -15
View File
@@ -1,27 +1,48 @@
import create from 'zustand';
import { devtools } from 'zustand/middleware';
import { Platform } from '@/types';
import { devtools, persist } from 'zustand/middleware';
import { immer } from 'zustand/middleware/immer';
import { Platform } from '@/renderer/types';
type SidebarProps = {
expanded: string[];
leftWidth: string;
rightWidth: string;
};
export interface AppState {
currentPage: {
scrollY: number;
title: string;
};
platform: Platform;
sidebar: {
expanded: string[];
leftWidth: string;
rightWidth: string;
};
}
export interface AppSlice extends AppState {
setAppStore: (data: Partial<AppSlice>) => void;
setSidebar: (options: Partial<SidebarProps>) => void;
}
const persistedAppState = JSON.parse(localStorage.getItem('app') || '{}');
export const useAppStore = create<AppSlice>()(
devtools((set, get) => ({
currentPage: persistedAppState.currentPage,
platform: persistedAppState.platform,
setAppStore: (data) => {
set({ ...get(), ...data });
},
}))
persist(
devtools(
immer((set, get) => ({
platform: Platform.WINDOWS,
setAppStore: (data) => {
set({ ...get(), ...data });
},
setSidebar: (options) => {
set((state) => {
state.sidebar = { ...state.sidebar, ...options };
});
},
sidebar: {
expanded: [],
leftWidth: '230px',
rightWidth: '230px',
},
})),
{ name: 'app' }
),
{ name: 'store_app' }
)
);