components/AgentView.tsx (64 lines of code) (raw):
"use client";
import React from "react";
import useConversationStore from "@/stores/useConversationStore";
import { Item } from "@/lib/assistant";
import ContextPanel from "./ContextPanel";
import {
Drawer,
DrawerContent,
DrawerHeader,
DrawerTitle,
DrawerTrigger,
} from "./ui/drawer";
import { Info } from "lucide-react";
import Chat from "./Chat";
export default function AgentView() {
const { chatMessages, addConversationItem, addChatMessage } =
useConversationStore();
const handleSendMessage = async (message: string) => {
if (!message.trim()) return;
const agentItem: Item = {
type: "message",
role: "agent",
content: [{ type: "input_text", text: message.trim() }],
};
const agentMessage: any = {
role: "assistant",
content: message.trim(),
};
addConversationItem(agentMessage);
addChatMessage(agentItem);
};
return (
<div className="relative flex flex-1 min-h-0 bg-white rounded-lg p-4 gap-4">
<div className="w-full md:w-3/5">
<Chat
items={chatMessages}
view="agent"
onSendMessage={handleSendMessage}
/>
</div>
<div className="hidden md:block md:w-2/5">
<ContextPanel className="h-full" />
</div>
<Drawer>
<DrawerTrigger asChild>
<button
className="absolute top-4 right-4 md:hidden"
aria-label="Open Context Panel"
>
<Info className="text-zinc-500" />
</button>
</DrawerTrigger>
<DrawerContent>
<DrawerHeader>
<DrawerTitle className="text-sm">Case Context</DrawerTitle>
</DrawerHeader>
<div className="px-2 pb-10 flex flex-col h-[75vh]">
<ContextPanel className="flex-1 overflow-y-auto h-[50vh]" />
</div>
</DrawerContent>
</Drawer>
</div>
);
}