import { FC, useEffect, useRef } from "react"; import isEmpty from "lodash/isEmpty"; import { observer } from "mobx-react"; // plane helpers import { EUserPermissions, EUserPermissionsLevel } from "@plane/constants"; import { useOutsideClickDetector } from "@plane/hooks"; // components import { SidebarDropdown, SidebarHelpSection, SidebarProjectsList, SidebarQuickActions } from "@/components/workspace"; import { SidebarFavoritesMenu } from "@/components/workspace/sidebar/favorites/favorites-menu"; import { SidebarMenuItems } from "@/components/workspace/sidebar/sidebar-menu-items"; // helpers import { cn } from "@/helpers/common.helper"; // hooks import { useAppTheme, useUserPermissions } from "@/hooks/store"; import { useFavorite } from "@/hooks/store/use-favorite"; import useSize from "@/hooks/use-window-size"; // plane web components import { SidebarAppSwitcher } from "@/plane-web/components/sidebar"; import { SidebarTeamsList } from "@/plane-web/components/workspace/sidebar/teams-sidebar-list"; import { ExtendedProjectSidebar } from "./extended-project-sidebar"; import { ExtendedAppSidebar } from "./extended-sidebar"; export const AppSidebar: FC = observer(() => { // store hooks const { allowPermissions } = useUserPermissions(); const { toggleSidebar, sidebarCollapsed } = useAppTheme(); const { groupedFavorites } = useFavorite(); const windowSize = useSize(); // refs const ref = useRef(null); // derived values const canPerformWorkspaceMemberActions = allowPermissions( [EUserPermissions.ADMIN, EUserPermissions.MEMBER], EUserPermissionsLevel.WORKSPACE ); useOutsideClickDetector(ref, () => { if (sidebarCollapsed === false) { if (window.innerWidth < 768) { toggleSidebar(); } } }); useEffect(() => { if (windowSize[0] < 768 && !sidebarCollapsed) toggleSidebar(); // eslint-disable-next-line react-hooks/exhaustive-deps }, [windowSize]); const isFavoriteEmpty = isEmpty(groupedFavorites); return ( <>
{/* Workspace switcher and settings */}
{/* App switcher */} {canPerformWorkspaceMemberActions && } {/* Quick actions */}

{sidebarCollapsed && (
)} {/* Favorites Menu */} {canPerformWorkspaceMemberActions && !isFavoriteEmpty && } {/* Teams List */} {/* Projects List */}
{/* Help Section */}
); });