feat(project): init
This commit is contained in:
59
components/layout/store.ts
Normal file
59
components/layout/store.ts
Normal file
@@ -0,0 +1,59 @@
|
||||
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",
|
||||
}
|
||||
)
|
||||
)
|
||||
Reference in New Issue
Block a user