SurfSense/surfsense_web/app/dashboard/[search_space_id]/client-layout.tsx

56 lines
1.7 KiB
TypeScript
Raw Normal View History

"use client";
2025-04-07 23:47:06 -07:00
2025-07-27 10:05:37 -07:00
import type React from "react";
import { useState } from "react";
2025-08-02 22:46:15 -07:00
import { DashboardBreadcrumb } from "@/components/dashboard-breadcrumb";
2025-07-27 10:05:37 -07:00
import { AppSidebarProvider } from "@/components/sidebar/AppSidebarProvider";
import { ThemeTogglerComponent } from "@/components/theme/theme-toggle";
import { Separator } from "@/components/ui/separator";
import { SidebarInset, SidebarProvider, SidebarTrigger } from "@/components/ui/sidebar";
2025-04-07 23:47:06 -07:00
export function DashboardClientLayout({
2025-07-27 10:05:37 -07:00
children,
searchSpaceId,
navSecondary,
navMain,
2025-04-07 23:47:06 -07:00
}: {
2025-07-27 10:05:37 -07:00
children: React.ReactNode;
searchSpaceId: string;
navSecondary: any[];
navMain: any[];
2025-04-07 23:47:06 -07:00
}) {
const [open, setOpen] = useState<boolean>(() => {
try {
const match = document.cookie.match(/(?:^|; )sidebar_state=([^;]+)/);
if (match) return match[1] === "true";
} catch {
// ignore
}
return true;
});
2025-08-08 11:17:43 -07:00
2025-07-27 10:05:37 -07:00
return (
<SidebarProvider open={open} onOpenChange={setOpen}>
2025-07-27 10:05:37 -07:00
{/* Use AppSidebarProvider which fetches user, search space, and recent chats */}
<AppSidebarProvider
searchSpaceId={searchSpaceId}
navSecondary={navSecondary}
navMain={navMain}
/>
<SidebarInset>
<header className="sticky top-0 z-50 flex h-16 shrink-0 items-center gap-2 bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/60 border-b">
<div className="flex items-center justify-between w-full gap-2 px-4">
2025-08-02 22:46:15 -07:00
<div className="flex items-center gap-2">
<SidebarTrigger className="-ml-1" />
<Separator orientation="vertical" className="h-6" />
<DashboardBreadcrumb />
</div>
2025-07-27 10:05:37 -07:00
<ThemeTogglerComponent />
</div>
</header>
{children}
</SidebarInset>
</SidebarProvider>
);
}