import { useState } from "react"; import { useQuery, useMutation } from "@tanstack/react-query"; import { Dialog, DialogContent, DialogHeader, DialogTitle } from "@/components/ui/dialog"; import { Button } from "@/components/ui/button"; import { Textarea } from "@/components/ui/textarea"; import { ScrollArea } from "@/components/ui/scroll-area"; import { MessageCircle, Send } from "lucide-react"; import { apiRequest, queryClient } from "@/lib/queryClient"; import type { ChatMessage, MediaOutlet } from "@shared/schema"; interface ChatbotModalProps { outlet: MediaOutlet; isOpen: boolean; onClose: () => void; } export default function ChatbotModal({ outlet, isOpen, onClose }: ChatbotModalProps) { const [message, setMessage] = useState(""); const { data: messages = [], isLoading } = useQuery({ queryKey: [`/api/media-outlets/${outlet.slug}/chat`], enabled: isOpen }); const sendMessageMutation = useMutation({ mutationFn: async (content: string) => { return await apiRequest("POST", `/api/media-outlets/${outlet.slug}/chat`, { content }); }, onSuccess: () => { queryClient.invalidateQueries({ queryKey: [`/api/media-outlets/${outlet.slug}/chat`] }); setMessage(""); } }); const handleSend = () => { if (message.trim()) { sendMessageMutation.mutate(message.trim()); } }; const handleKeyPress = (e: React.KeyboardEvent) => { if (e.key === "Enter" && !e.shiftKey) { e.preventDefault(); handleSend(); } }; const getChatbotName = () => { if (outlet.category === 'people') { return outlet.name; } else if (outlet.category === 'topics') { return `${outlet.name} 전문가`; } else { return `${outlet.name} 대표`; } }; return ( {getChatbotName()}와 대화하기
{isLoading ? (
대화 내용을 불러오는 중...
) : messages.length === 0 ? (

대화를 시작해보세요!

{getChatbotName()}에게 궁금한 것을 물어보세요.

) : ( messages.map((msg) => (

{msg.content}

)) )} {sendMessageMutation.isPending && (

입력 중...

)}