waveform/lib/stores/useSidebarStore.ts

44 lines
1.7 KiB
TypeScript

/**
* @file lib/stores/useSidebarStore.ts
* @description State management store using Zustand for controlling the visibility of navigation and members sidebars.
*/
import { create } from "zustand";
/**
* Interface representing the state and actions of the sidebar store.
*
* @interface SidebarState
* @property {boolean} isNavOpen - Indicates whether the navigation sidebar is open.
* @property {boolean} isMembersOpen - Indicates whether the members list sidebar is open.
* @property {() => void} toggleNav - Toggles the visibility of the navigation sidebar.
* @property {() => void} toggleMembers - Toggles the visibility of the members list sidebar.
* @property {() => void} closeNav - Explicitly closes the navigation sidebar.
* @property {() => void} closeMembers - Explicitly closes the members list sidebar.
* @property {() => void} closeAll - Closes both the navigation and members sidebars simultaneously.
*/
interface SidebarState {
isNavOpen: boolean;
isMembersOpen: boolean;
toggleNav: () => void;
toggleMembers: () => void;
closeNav: () => void;
closeMembers: () => void;
closeAll: () => void;
}
/**
* Custom Zustand hook for managing global sidebar visibility states.
*
* @returns {SidebarState} The current sidebar state and action handlers.
*/
export const useSidebarStore = create<SidebarState>((set) => ({
isNavOpen: true,
isMembersOpen: false,
toggleNav: () => set((state) => ({ isNavOpen: !state.isNavOpen })),
toggleMembers: () =>
set((state) => ({ isMembersOpen: !state.isMembersOpen })),
closeNav: () => set({ isNavOpen: false }),
closeMembers: () => set({ isMembersOpen: false }),
closeAll: () => set({ isNavOpen: false, isMembersOpen: false }),
}));