@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
JavaScript
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 };