diff --git a/surfsense_web/components/chat/ChatPanel/ChatPanelContainer.tsx b/surfsense_web/components/chat/ChatPanel/ChatPanelContainer.tsx new file mode 100644 index 000000000..75481dc3a --- /dev/null +++ b/surfsense_web/components/chat/ChatPanel/ChatPanelContainer.tsx @@ -0,0 +1,78 @@ +import { PanelRight } from "lucide-react"; +import { useActionState, useContext, useTransition } from "react"; +import { toast } from "sonner"; +import { cn } from "@/lib/utils"; +import { chatInterfaceContext } from "../ChatInterface"; +import type { GeneratePodcastRequest } from "./actions"; +import { ChatPanelView } from "./ChatPanelView"; + +export function ChatPanelContainer() { + const context = useContext(chatInterfaceContext); + + if (!context) { + throw new Error("chatInterfaceContext must be used within a ChatProvider"); + } + + const { isChatPannelOpen, setIsChatPannelOpen, chat_id: chatId, setPodcast } = context; + + const generatePodcast = async (request: GeneratePodcastRequest) => { + try { + const { podcast_title = "SurfSense Podcast" } = request; + + const response = await fetch( + `${process.env.NEXT_PUBLIC_FASTAPI_BACKEND_URL}/api/v1/podcasts/generate/`, + { + method: "POST", + headers: { + Authorization: `Bearer ${localStorage.getItem("surfsense_bearer_token")}`, + "Content-Type": "application/json", + }, + body: JSON.stringify({ ...request, podcast_title }), + } + ); + + if (!response.ok) { + const errorData = await response.json().catch(() => ({})); + throw new Error(errorData.detail || "Failed to generate podcast"); + } + + const result = await response.json(); + + setPodcast(result); + + toast.success(`Podcast generation started!`); + } catch (error) { + console.error("Error generating podcast:", error); + console.log(error); + } finally { + } + }; + + return chatId && chatId !== "" ? ( +
+
+ +
+ +
+ +
+
+ ) : null; +}