import type { FC } from "react"; import { useEffect, useRef } from "react"; import { observer } from "mobx-react"; // plane helpers import { useOutsideClickDetector } from "@plane/hooks"; import { ScrollArea } from "@plane/propel/scrollarea"; // components import { AppSidebarToggleButton } from "@/components/sidebar/sidebar-toggle-button"; import { SidebarDropdown } from "@/components/workspace/sidebar/dropdown"; import { HelpMenu } from "@/components/workspace/sidebar/help-menu"; // hooks import { useAppTheme } from "@/hooks/store/use-app-theme"; import { useAppRail } from "@/hooks/use-app-rail"; import useSize from "@/hooks/use-window-size"; // plane web components import { WorkspaceEditionBadge } from "@/plane-web/components/workspace/edition-badge"; type TSidebarWrapperProps = { title: string; children: React.ReactNode; quickActions?: React.ReactNode; }; export const SidebarWrapper: FC = observer((props) => { const { children, title, quickActions } = props; // store hooks const { toggleSidebar, sidebarCollapsed } = useAppTheme(); const { shouldRenderAppRail, isEnabled: isAppRailEnabled } = useAppRail(); const windowSize = useSize(); // refs const ref = useRef(null); useOutsideClickDetector(ref, () => { if (sidebarCollapsed === false && window.innerWidth < 768) { toggleSidebar(); } }); useEffect(() => { if (windowSize[0] < 768 && !sidebarCollapsed) toggleSidebar(); // eslint-disable-next-line react-hooks/exhaustive-deps }, [windowSize]); return (
{/* Workspace switcher and settings */} {!shouldRenderAppRail && } {isAppRailEnabled && (
{title}
)} {/* Quick actions */} {quickActions}
{children} {/* Help Section */}
{!shouldRenderAppRail && } {!isAppRailEnabled && }
); });