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 resetMenuDefaultRouter: () => 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( (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, }), } }), resetMenuDefaultRouter: () => set((state) => { return { ...state, menuDefaultRouter: initialAppLayoutState.menuDefaultRouter, } }), linksOpenStatus: initialAppLayoutState.linksOpenStatus, updateLinksOpenStatus: (key, opened) => set((state) => { return { ...state, linksOpenStatus: Object.assign({}, state.linksOpenStatus, { [key]: opened, }), } }), resetAppLayoutStore: () => set(initialAppLayoutState), }), { name: "app-layout-store", } ) )