ai-chatbot/components/chat-shell.tsx
Your Name 4b820f8ff4
Some checks failed
Lint / build (20) (push) Has been cancelled
Playwright Tests / test (push) Has been cancelled
Add canvas agent mode and management
2026-03-10 19:56:25 +08:00

96 lines
2.3 KiB
TypeScript

"use client";
import { usePathname } from "next/navigation";
import type { User } from "next-auth";
import { AppSidebar } from "@/components/app-sidebar";
import { TopNavbar } from "@/components/top-navbar";
import { SidebarInset, SidebarProvider } from "@/components/ui/sidebar";
type CustomLink = {
id: string;
name: string;
url: string;
order: number;
toolboxGroup: number;
};
type TutorialVideo = {
id: string;
title: string;
videoUrl: string;
coverUrl: string | null;
description: string | null;
order: number;
};
type ChatShellProps = {
children: React.ReactNode;
user?: User;
isCollapsed: boolean;
homeVariant: "classic" | "lovart";
siteName: string;
siteLogo?: string;
siteLogoDark?: string;
isAdmin: boolean;
customLinks: CustomLink[];
toolbox1Name: string;
toolbox1Enabled: boolean;
toolbox2Name: string;
toolbox2Enabled: boolean;
tutorialVideos: TutorialVideo[];
tutorialEnabled: boolean;
rankingEnabled: boolean;
agentEnabled: boolean;
};
export function ChatShell({
children,
user,
isCollapsed,
homeVariant,
siteName,
siteLogo,
siteLogoDark,
isAdmin,
customLinks,
toolbox1Name,
toolbox1Enabled,
toolbox2Name,
toolbox2Enabled,
tutorialVideos,
tutorialEnabled,
rankingEnabled,
agentEnabled,
}: ChatShellProps) {
const pathname = usePathname();
const isLovartHome = pathname === "/" && homeVariant === "lovart";
if (isLovartHome) {
return <div className="h-svh w-full overflow-y-auto">{children}</div>;
}
return (
<SidebarProvider defaultOpen={!isCollapsed}>
<TopNavbar
siteName={siteName}
siteLogo={siteLogo}
siteLogoDark={siteLogoDark}
isAdmin={isAdmin}
customLinks={customLinks}
toolbox1Name={toolbox1Name}
toolbox1Enabled={toolbox1Enabled}
toolbox2Name={toolbox2Name}
toolbox2Enabled={toolbox2Enabled}
tutorialVideos={tutorialVideos}
tutorialEnabled={tutorialEnabled}
rankingEnabled={rankingEnabled}
agentEnabled={agentEnabled}
/>
<div className="flex h-svh w-full overflow-hidden pl-16 [--sidebar-offset:4rem]">
<AppSidebar user={user} />
<SidebarInset className="h-full">{children}</SidebarInset>
</div>
</SidebarProvider>
);
}