60 lines
1.6 KiB
TypeScript
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",
|
|
}
|
|
)
|
|
)
|