"use client"; import { Loader2 } from "lucide-react"; import { usePathname, useRouter } from "next/navigation"; import type React from "react"; import { useEffect, useState } from "react"; import { DashboardBreadcrumb } from "@/components/dashboard-breadcrumb"; import { AppSidebarProvider } from "@/components/sidebar/AppSidebarProvider"; import { ThemeTogglerComponent } from "@/components/theme/theme-toggle"; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; import { Separator } from "@/components/ui/separator"; import { SidebarInset, SidebarProvider, SidebarTrigger } from "@/components/ui/sidebar"; import { useLLMPreferences } from "@/hooks/use-llm-configs"; export function DashboardClientLayout({ children, searchSpaceId, navSecondary, navMain, }: { children: React.ReactNode; searchSpaceId: string; navSecondary: any[]; navMain: any[]; }) { const router = useRouter(); const pathname = usePathname(); const searchSpaceIdNum = Number(searchSpaceId); const { loading, error, isOnboardingComplete } = useLLMPreferences(searchSpaceIdNum); const [hasCheckedOnboarding, setHasCheckedOnboarding] = useState(false); // Skip onboarding check if we're already on the onboarding page const isOnboardingPage = pathname?.includes("/onboard"); const [open, setOpen] = useState(() => { try { const match = document.cookie.match(/(?:^|; )sidebar_state=([^;]+)/); if (match) return match[1] === "true"; } catch { // ignore } return true; }); useEffect(() => { // Skip check if already on onboarding page if (isOnboardingPage) { setHasCheckedOnboarding(true); return; } // Only check once after preferences have loaded if (!loading && !hasCheckedOnboarding) { const onboardingComplete = isOnboardingComplete(); if (!onboardingComplete) { router.push(`/dashboard/${searchSpaceId}/onboard`); } setHasCheckedOnboarding(true); } }, [ loading, isOnboardingComplete, isOnboardingPage, router, searchSpaceId, hasCheckedOnboarding, ]); // Show loading screen while checking onboarding status (only on first load) if (!hasCheckedOnboarding && loading && !isOnboardingPage) { return (
Loading Configuration Checking your LLM preferences...
); } // Show error screen if there's an error loading preferences (but not on onboarding page) if (error && !hasCheckedOnboarding && !isOnboardingPage) { return (
Configuration Error Failed to load your LLM configuration

{error}

); } return ( {/* Use AppSidebarProvider which fetches user, search space, and recent chats */}
{children}
); }