Initial commit
This commit is contained in:
89
layout/AppSidebar.tsx
Normal file
89
layout/AppSidebar.tsx
Normal file
@@ -0,0 +1,89 @@
|
||||
'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;
|
||||
Reference in New Issue
Block a user