"use client"; import { Loader2 } from "lucide-react"; import { usePathname } from "next/navigation"; import { useGetSettingsQuery } from "@/app/api/queries/useGetSettingsQuery"; import { DoclingHealthBanner } from "@/components/docling-health-banner"; import { KnowledgeFilterPanel } from "@/components/knowledge-filter-panel"; import { TaskNotificationMenu } from "@/components/task-notification-menu"; import { useAuth } from "@/contexts/auth-context"; import { useKnowledgeFilter } from "@/contexts/knowledge-filter-context"; import { useTask } from "@/contexts/task-context"; import { cn } from "@/lib/utils"; import { useDoclingHealthQuery } from "@/src/app/api/queries/useDoclingHealthQuery"; import { ChatRenderer } from "./chat-renderer"; import AnimatedProcessingIcon from "./ui/animated-processing-icon"; export function LayoutWrapper({ children }: { children: React.ReactNode }) { const pathname = usePathname(); const { isMenuOpen } = useTask(); const { isPanelOpen } = useKnowledgeFilter(); const { isLoading, isAuthenticated, isNoAuthMode } = useAuth(); // List of paths that should not show navigation const authPaths = ["/login", "/auth/callback"]; const isAuthPage = authPaths.includes(pathname); // Call all hooks unconditionally (React rules) // But disable queries for auth pages to prevent unnecessary requests const { data: settings, isLoading: isSettingsLoading } = useGetSettingsQuery({ enabled: !isAuthPage && (isAuthenticated || isNoAuthMode), }); const { data: health, isLoading: isHealthLoading, isError, } = useDoclingHealthQuery({ enabled: !isAuthPage, }); // For auth pages, render immediately without navigation // This prevents the main layout from flashing if (isAuthPage) { return
{children}
; } const isOnKnowledgePage = pathname.startsWith("/knowledge"); const isUnhealthy = health?.status === "unhealthy" || isError; const isBannerVisible = !isHealthLoading && isUnhealthy; const isSettingsLoadingOrError = isSettingsLoading || !settings; // Show loading state when backend isn't ready if (isLoading || (isSettingsLoadingOrError && (isNoAuthMode || isAuthenticated))) { return (

Starting OpenRAG...

); } // For all other pages, render with Langflow-styled navigation and task menu return (
{children} {/* Task Notifications Panel */} {/* Knowledge Filter Panel */}
); }