Files
labelmain/components/layout/store.ts
2026-02-03 18:05:47 +08:00

60 lines
1.6 KiB
TypeScript

import { create } from "zustand"
import { persist } from "zustand/middleware"
interface AppLayoutState {
isOpen: boolean
updateIsOpen: (newIsOpen: boolean) => void
menuDefaultRouter: {
[key: string]: string
}
updateMenuDefaultRouter: (headerMenu: string, defaultRouter: string) => void
linksOpenStatus: {
[key: string]: boolean
}
updateLinksOpenStatus: (key: string, opened: boolean) => void
resetAppLayoutStore: () => void
}
const initialAppLayoutState = {
isOpen: true,
headerMenu: "admin",
menuDefaultRouter: {},
linksOpenStatus: {},
}
export const useAppLayoutStore = create(
persist<AppLayoutState>(
(set) => ({
isOpen: initialAppLayoutState.isOpen,
updateIsOpen: (newIsOpen) =>
set((state) => {
return { ...state, isOpen: newIsOpen }
}),
menuDefaultRouter: initialAppLayoutState.menuDefaultRouter,
updateMenuDefaultRouter: (headerMenu, defaultRouter) =>
set((state) => {
return {
...state,
menuDefaultRouter: Object.assign({}, state.menuDefaultRouter, {
[headerMenu]: defaultRouter,
}),
}
}),
linksOpenStatus: initialAppLayoutState.linksOpenStatus,
updateLinksOpenStatus: (key, opened) =>
set((state) => {
return {
...state,
linksOpenStatus: Object.assign({}, state.linksOpenStatus, {
[key]: opened,
}),
}
}),
resetAppLayoutStore: () => set(initialAppLayoutState),
}),
{
name: "app-layout-store",
}
)
)