UNPKG

@pagamio/frontend-commons-lib

Version:

Pagamio library for Frontend reusable components like the form engine and table container

49 lines (48 loc) 1.77 kB
import { jsx as _jsx } from "react/jsx-runtime"; import { createContext, useContext, useMemo, useState } from 'react'; /** * Context for managing sidebar state across desktop and mobile views */ const AppSidebarContext = createContext(null); /** * Provider component for sidebar state management * @param {AppSidebarProviderProps} props - Component props */ const AppSidebarProvider = ({ initialCollapsed, children, pages, pathname, linkComponent, sidebarHeader, }) => { const [isOpenMobile, setIsOpenMobile] = useState(false); const [isCollapsed, setIsCollapsed] = useState(initialCollapsed); function handleSetCollapsed(value) { setIsCollapsed(value); } const value = useMemo(() => ({ desktop: { isCollapsed, setCollapsed: handleSetCollapsed, toggle: () => handleSetCollapsed(!isCollapsed), }, mobile: { isOpen: isOpenMobile, close: () => setIsOpenMobile(false), toggle: () => setIsOpenMobile((state) => !state), }, pages, pathname, linkComponent, sidebarHeader, }), [isCollapsed, isOpenMobile, pages, pathname, linkComponent, sidebarHeader]); return _jsx(AppSidebarContext.Provider, { value: value, children: children }); }; /** * Hook for accessing sidebar context * @throws {Error} When used outside AppSidebarProvider * @returns {AppSidebarContextProps} Sidebar context value */ const useAppSidebarContext = () => { const context = useContext(AppSidebarContext); if (!context) { throw new Error('useSidebarContext must be used within the SidebarContext provider!'); } return context; }; export default AppSidebarProvider; export { useAppSidebarContext };