Untitled
unknown
plain_text
2 years ago
2.5 kB
19
Indexable
import axios from 'axios'; // Ajout de axios import { useCompletion } from "ai/react"; import { FormEvent, useState } from "react"; import { Companion, Message } from "@prisma/client"; import { useRouter } from "next/navigation"; import { Button } from "@/components/ui/button"; import { Trash2 } from "lucide-react"; import { ChatForm } from "@/components/chat-form"; import { ChatHeader } from "@/components/chat-header"; import { ChatMessages } from "@/components/chat-messages"; import { ChatMessageProps } from "@/components/chat-message"; interface ChatClientProps { companion: Companion & { messages: Message[]; _count: { messages: number; } }; }; export const ChatClient = ({ companion, }: ChatClientProps) => { const router = useRouter(); const [messages, setMessages] = useState<ChatMessageProps[]>(companion.messages); const { input, isLoading, handleInputChange, handleSubmit, setInput, } = useCompletion({ api: `/api/chat/${companion.id}`, onFinish(_prompt, completion) { const systemMessage: ChatMessageProps = { role: "system", content: completion }; setMessages((current) => [...current, systemMessage]); setInput(""); router.refresh(); }, }); const onSubmit = (e: FormEvent<HTMLFormElement>) => { const userMessage: ChatMessageProps = { role: "user", content: input }; setMessages((current) => [...current, userMessage]); handleSubmit(e); } const resetConversation = async () => { try { const response = await axios.delete(`/api/chat/${companion.id}`); if (response.status === 200) { setMessages([]); } } catch (error) { console.error("Failed to reset conversation:", error); } } return ( <div className="flex flex-col h-full p-4 space-y-2"> <ChatHeader companion={companion} /> <ChatMessages companion={companion} isLoading={isLoading} messages={messages} /> <ChatForm isLoading={isLoading} input={input} handleInputChange={handleInputChange} onSubmit={onSubmit} /> <Button variant="ghost" onClick={resetConversation} className="mt-4" > <Trash2 /> Reset conversation </Button> </div> ); }
Editor is loading...