Files
btpxpress-frontend/layout/AppSidebar.tsx

90 lines
3.0 KiB
TypeScript
Executable File

'use client';
import Link from 'next/link';
import { useContext, useEffect } from 'react';
import AppMenu from './AppMenu';
import { LayoutContext } from './context/layoutcontext';
import { MenuProvider } from './context/menucontext';
import { classNames } from 'primereact/utils';
const AppSidebar = (props: { sidebarRef: React.RefObject<HTMLDivElement> }) => {
const { setLayoutState, layoutConfig, layoutState } = useContext(LayoutContext);
const anchor = () => {
setLayoutState((prevLayoutState) => ({
...prevLayoutState,
anchored: !prevLayoutState.anchored
}));
};
useEffect(() => {
return () => {
resetOverlay();
};
}, []);
const resetOverlay = () => {
if (layoutState.overlayMenuActive) {
setLayoutState((prevLayoutState) => ({
...prevLayoutState,
overlayMenuActive: false
}));
}
};
let timeout = null;
const onMouseEnter = () => {
if (!layoutState.anchored) {
if (timeout) {
clearTimeout(timeout);
timeout = null;
}
setLayoutState((prevLayoutState) => ({
...prevLayoutState,
sidebarActive: true
}));
}
};
const onMouseLeave = () => {
if (!layoutState.anchored) {
if (!timeout) {
timeout = setTimeout(
() =>
setLayoutState((prevLayoutState) => ({
...prevLayoutState,
sidebarActive: false
})),
300
);
}
}
};
return (
<>
<div ref={props.sidebarRef} className="layout-sidebar" onMouseEnter={onMouseEnter} onMouseLeave={onMouseLeave}>
<div className="sidebar-header">
<Link href="/" className="app-logo">
<div className="app-logo-small h-2rem">
<img src={`/layout/images/logo/logo-${layoutConfig.colorScheme === 'light' ? 'dark' : 'light'}.png`} alt="BTPXpress Logo" />
</div>
<div className="app-logo-normal">
<img className="h-2rem" src={`/layout/images/logo/logo-${layoutConfig.colorScheme === 'light' ? 'dark' : 'light'}.png`} alt="BTPXpress Logo" />
<img className="h-2rem ml-3" src={`/layout/images/logo/appname-${layoutConfig.colorScheme === 'light' ? 'dark' : 'light'}.png`} alt="BTPXpress" />
</div>
</Link>
<button className="layout-sidebar-anchor p-link z-2" type="button" onClick={anchor}></button>
</div>
<div className="layout-menu-container">
<MenuProvider>
<AppMenu />
</MenuProvider>
</div>
</div>
</>
);
};
export default AppSidebar;