mirror of
https://github.com/prowler-cloud/prowler.git
synced 2026-10-04 02:04:06 +00:00
Co-authored-by: alejandrobailo <alejandrobailo94@gmail.com>
78 lines
2.6 KiB
TypeScript
78 lines
2.6 KiB
TypeScript
"use client";
|
|
|
|
import Link from "next/link";
|
|
import { usePathname } from "next/navigation";
|
|
|
|
import { LighthouseV2SidebarChat } from "@/app/(prowler)/lighthouse/_components/navigation";
|
|
import { ProwlerBrand } from "@/components/icons";
|
|
import { useAuth } from "@/hooks";
|
|
import { useRuntimeConfig } from "@/hooks/use-runtime-config";
|
|
import { isCloud } from "@/lib/shared/env";
|
|
import { useUIStore } from "@/store/ui/store";
|
|
|
|
import { useAppSidebarMode } from "./app-sidebar-mode-store";
|
|
import { AppSidebarModeToggle } from "./app-sidebar-mode-toggle";
|
|
import { LaunchScanAction } from "./launch-scan-action";
|
|
import { getNavigationConfig } from "./navigation-config";
|
|
import { SidebarFooter } from "./sidebar-footer";
|
|
import { SidebarNavigation } from "./sidebar-navigation";
|
|
import { APP_SIDEBAR_MODE, type AppSidebarSelectionHandler } from "./types";
|
|
|
|
interface AppSidebarContentProps {
|
|
onSelect?: AppSidebarSelectionHandler;
|
|
}
|
|
|
|
export function AppSidebarContent({ onSelect }: AppSidebarContentProps) {
|
|
const pathname = usePathname();
|
|
const { permissions } = useAuth();
|
|
// One-time server decision per request, seeded by the root layout.
|
|
const registryEligible = useUIStore((state) => state.registryEligible);
|
|
const { apiDocsUrl, cloudBillingEnabled } = useRuntimeConfig();
|
|
const mode = useAppSidebarMode((state) => state.mode);
|
|
const isCloudEnvironment = isCloud();
|
|
const sections = getNavigationConfig({
|
|
pathname,
|
|
apiDocsUrl,
|
|
cloudBillingEnabled,
|
|
registryEligible,
|
|
permissions,
|
|
});
|
|
const showChat = isCloudEnvironment && mode === APP_SIDEBAR_MODE.CHAT;
|
|
|
|
return (
|
|
<div className="relative flex h-full min-h-0 w-full flex-col overflow-hidden">
|
|
<div className="shrink-0 px-5 pt-8 pb-7">
|
|
<Link
|
|
href="/"
|
|
aria-label="Prowler home"
|
|
className="focus-visible:ring-button-primary/50 flex h-8 items-center rounded-md focus-visible:ring-2 focus-visible:outline-none"
|
|
onClick={onSelect}
|
|
>
|
|
<ProwlerBrand />
|
|
</Link>
|
|
</div>
|
|
|
|
<div className="shrink-0 space-y-3 px-3 pb-1">
|
|
<LaunchScanAction onSelect={onSelect} />
|
|
<AppSidebarModeToggle
|
|
chatEnabled={isCloudEnvironment}
|
|
onSelect={onSelect}
|
|
/>
|
|
</div>
|
|
|
|
<div className="min-h-0 flex-1 overflow-hidden">
|
|
{showChat ? (
|
|
<LighthouseV2SidebarChat isOpen />
|
|
) : (
|
|
<SidebarNavigation sections={sections} onSelect={onSelect} />
|
|
)}
|
|
</div>
|
|
|
|
<SidebarFooter
|
|
isCloudEnvironment={isCloudEnvironment}
|
|
onSelect={onSelect}
|
|
/>
|
|
</div>
|
|
);
|
|
}
|