"use client"; import { useAtom, useAtomValue } from "jotai"; import { AlertCircle, Pencil, Play, Podcast, RefreshCw } from "lucide-react"; import { useCallback, useContext, useTransition } from "react"; import { cn } from "@/lib/utils"; import { activeChatAtom } from "@/stores/chat/active-chat.atom"; import { chatUIAtom } from "@/stores/chat/chat-ui.atom"; import { getPodcastStalenessMessage, isPodcastStale } from "../PodcastUtils"; import type { GeneratePodcastRequest } from "./ChatPanelContainer"; import { ConfigModal } from "./ConfigModal"; import { PodcastPlayer } from "./PodcastPlayer"; interface ChatPanelViewProps { generatePodcast: (request: GeneratePodcastRequest) => Promise; } export function ChatPanelView(props: ChatPanelViewProps) { const [chatUIState, setChatUIState] = useAtom(chatUIAtom); const { data: activeChatState } = useAtomValue(activeChatAtom); const { isChatPannelOpen } = chatUIState; const podcast = activeChatState?.podcast; const chatDetails = activeChatState?.chatDetails; const { generatePodcast } = props; // Check if podcast is stale const podcastIsStale = podcast && chatDetails && isPodcastStale(chatDetails.state_version, podcast.chat_state_version); const handleGeneratePost = useCallback(async () => { if (!chatDetails) return; await generatePodcast({ type: "CHAT", ids: [chatDetails.id], search_space_id: chatDetails.search_space_id, podcast_title: chatDetails.title, }); }, [chatDetails, generatePodcast]); return (
{isChatPannelOpen ? (
{/* Show stale podcast warning if applicable */} {podcastIsStale && (

Podcast is outdated

{getPodcastStalenessMessage( chatDetails?.state_version || 0, podcast?.chat_state_version )}

)}
{ if (e.key === "Enter" || e.key === " ") { e.preventDefault(); handleGeneratePost(); } }} className={cn( "w-full space-y-3 rounded-xl p-3 transition-colors", podcastIsStale ? "bg-gradient-to-r from-amber-400/50 to-orange-300/50 dark:from-amber-500/30 dark:to-orange-600/30 hover:from-amber-400/60 hover:to-orange-300/60" : "bg-gradient-to-r from-slate-400/50 to-slate-200/50 dark:from-slate-400/30 dark:to-slate-800/60 hover:from-slate-400/60 hover:to-slate-200/60" )} >
{podcastIsStale ? ( ) : ( )}

{podcastIsStale ? "Regenerate Podcast" : "Generate Podcast"}

) : ( )}
{podcast ? (
{isChatPannelOpen ? ( ) : podcast ? ( ) : null}
) : null}
); }