"use client"; import { SubmitEvent, useEffect, useState, useRef } from "react"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Sheet, SheetContent, SheetHeader, SheetTitle, SheetDescription, SheetFooter } from "@/components/ui/sheet"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { ScrollArea } from "@/components/ui/scroll-area"; type AssistantMessage = { id: string; role: "user" | "assistant"; content: string; }; type AssistantDrawerProps = { mode?: "global" | "page"; }; export const ASSISTANT_TOGGLE_EVENT = "acve:assistant-toggle"; export default function AssistantDrawer({ mode = "global" }: AssistantDrawerProps) { const [isOpen, setIsOpen] = useState(mode === "page"); const [messages, setMessages] = useState([ { id: "seed", role: "assistant", content: "Ask about courses, case studies, or practice. Demo responses are mocked for now.", }, ]); const [input, setInput] = useState(""); const scrollRef = useRef(null); useEffect(() => { if (scrollRef.current) { scrollRef.current.scrollIntoView({ behavior: "smooth" }); } }, [messages]); useEffect(() => { if (mode === "page") { return; } const onToggle = () => setIsOpen((current) => !current); window.addEventListener(ASSISTANT_TOGGLE_EVENT, onToggle); return () => window.removeEventListener(ASSISTANT_TOGGLE_EVENT, onToggle); }, [mode]); const send = (event: SubmitEvent) => { event.preventDefault(); const trimmed = input.trim(); if (!trimmed) return; const now = Date.now().toString(); setMessages((current) => [ ...current, { id: `u-${now}`, role: "user", content: trimmed }, { id: `a-${now}`, role: "assistant", content: "(Demo) Assistant not connected yet." }, ]); setInput(""); }; const ChatContent = (
{messages.map((message) => (
{message.content}
))}
setInput(event.target.value)} placeholder="Type your message..." value={input} />
); if (mode === "page") { return ( AI Assistant {ChatContent} ); } return ( AI Assistant Chat with our AI assistant
{ChatContent}
); }