diff --git a/src/renderer/store/app.store.ts b/src/renderer/store/app.store.ts index 0747e8b4c..9aff042b5 100644 --- a/src/renderer/store/app.store.ts +++ b/src/renderer/store/app.store.ts @@ -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) => void; + setSidebar: (options: Partial) => void; } -const persistedAppState = JSON.parse(localStorage.getItem('app') || '{}'); - export const useAppStore = create()( - 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' } + ) );