SurfSense/surfsense_web/components/public-chat/public-chat-view.tsx

64 lines
2.4 KiB
TypeScript
Raw Normal View History

2026-01-26 17:08:26 +02:00
"use client";
import { AssistantRuntimeProvider } from "@assistant-ui/react";
import { Navbar } from "@/components/homepage/navbar";
import { ReportPanel } from "@/components/report-panel/report-panel";
2026-01-26 17:08:26 +02:00
import { DisplayImageToolUI } from "@/components/tool-ui/display-image";
import { GeneratePodcastToolUI } from "@/components/tool-ui/generate-podcast";
import { GenerateReportToolUI } from "@/components/tool-ui/generate-report";
2026-03-21 22:13:41 -07:00
import { GenerateVideoPresentationToolUI } from "@/components/tool-ui/video-presentation";
2026-01-26 17:08:26 +02:00
import { LinkPreviewToolUI } from "@/components/tool-ui/link-preview";
import { ScrapeWebpageToolUI } from "@/components/tool-ui/scrape-webpage";
2026-02-09 16:49:11 -08:00
import { Spinner } from "@/components/ui/spinner";
2026-01-26 17:08:26 +02:00
import { usePublicChat } from "@/hooks/use-public-chat";
import { usePublicChatRuntime } from "@/hooks/use-public-chat-runtime";
import { PublicChatFooter } from "./public-chat-footer";
import { PublicChatNotFound } from "./public-chat-not-found";
2026-01-26 17:08:26 +02:00
import { PublicThread } from "./public-thread";
interface PublicChatViewProps {
shareToken: string;
}
export function PublicChatView({ shareToken }: PublicChatViewProps) {
const { data, isLoading, error } = usePublicChat(shareToken);
const runtime = usePublicChatRuntime({ data });
if (isLoading) {
return (
<main className="min-h-screen bg-linear-to-b from-gray-50 to-gray-100 text-gray-900 dark:from-black dark:to-gray-900 dark:text-white overflow-x-hidden">
<Navbar />
<div className="flex h-screen items-center justify-center">
<Spinner size="lg" className="text-muted-foreground" />
</div>
</main>
2026-01-26 17:08:26 +02:00
);
}
if (error || !data) {
return <PublicChatNotFound />;
2026-01-26 17:08:26 +02:00
}
return (
<main className="min-h-screen bg-linear-to-b from-gray-50 to-gray-100 text-gray-900 dark:from-black dark:to-gray-900 dark:text-white overflow-x-hidden">
<Navbar />
<AssistantRuntimeProvider runtime={runtime}>
{/* Tool UIs for rendering tool results */}
<GeneratePodcastToolUI />
<GenerateReportToolUI />
2026-03-21 22:13:41 -07:00
<GenerateVideoPresentationToolUI />
<LinkPreviewToolUI />
<DisplayImageToolUI />
<ScrapeWebpageToolUI />
2026-01-26 17:08:26 +02:00
<div className="flex h-screen pt-16 overflow-hidden">
<div className="flex-1 flex flex-col min-w-0 overflow-hidden">
<PublicThread footer={<PublicChatFooter shareToken={shareToken} />} />
</div>
<ReportPanel />
</div>
</AssistantRuntimeProvider>
</main>
2026-01-26 17:08:26 +02:00
);
}