"use client"; import { useChat } from "@ai-sdk/react"; import { Button } from "@/components/ui/button"; import { UserProfile } from "@/components/auth/user-profile"; import { useSession } from "@/lib/auth-client"; import { useState, type ReactNode } from "react"; type TextPart = { type?: string; text?: string }; type MaybePartsMessage = { display?: ReactNode; parts?: TextPart[]; content?: TextPart[]; }; function renderMessageContent(message: MaybePartsMessage): ReactNode { if (message.display) return message.display; const parts = Array.isArray(message.parts) ? message.parts : Array.isArray(message.content) ? message.content : []; return parts.map((p, idx) => p?.type === "text" && p.text ? {p.text} : null ); } export default function ChatPage() { const { data: session, isPending } = useSession(); const { messages, sendMessage, status } = useChat(); const [input, setInput] = useState(""); if (isPending) { return (
Loading...
); } if (!session) { return (
); } return (

AI Chat

Welcome, {session.user.name}!
{messages.length === 0 && (
Start a conversation with AI
)} {messages.map((message) => (
{message.role === "user" ? "You" : "AI"}
{renderMessageContent(message as MaybePartsMessage)}
))}
{ e.preventDefault(); const text = input.trim(); if (!text) return; sendMessage({ role: "user", parts: [{ type: "text", text }] }); setInput(""); }} className="flex gap-2" > setInput(e.target.value)} placeholder="Type your message..." className="flex-1 p-2 border border-border rounded-md focus:outline-none focus:ring-2 focus:ring-ring" />
); }