Files
prowler/ui/hooks/use-sidebar.ts

41 lines
1.0 KiB
TypeScript

import { create } from "zustand";
import { createJSONStorage, persist } from "zustand/middleware";
type SidebarSettings = { disabled: boolean; isHoverOpen: boolean };
type SidebarStore = {
isOpen: boolean;
isHover: boolean;
settings: SidebarSettings;
toggleOpen: () => void;
setIsOpen: (isOpen: boolean) => void;
setIsHover: (isHover: boolean) => void;
getOpenState: () => boolean;
};
export const useSidebar = create(
persist<SidebarStore>(
(set, get) => ({
isOpen: true,
isHover: false,
settings: { disabled: false, isHoverOpen: false },
toggleOpen: () => {
set({ isOpen: !get().isOpen });
},
setIsOpen: (isOpen: boolean) => {
set({ isOpen });
},
setIsHover: (isHover: boolean) => {
set({ isHover });
},
getOpenState: () => {
const state = get();
return state.isOpen || (state.settings.isHoverOpen && state.isHover);
},
}),
{
name: "sidebar",
storage: createJSONStorage(() => localStorage),
},
),
);