From 7959cef5049430f13616e58d67eaf82221979600 Mon Sep 17 00:00:00 2001 From: shenlan Date: Sun, 3 Aug 2025 13:52:37 +0800 Subject: [PATCH] Add minimize and chat end features with message limit --- ui/homepage/components/AskAIButton.tsx | 31 ++++++++++++++------ ui/homepage/components/AskAIDialog.tsx | 39 +++++++++++++++++--------- 2 files changed, 48 insertions(+), 22 deletions(-) diff --git a/ui/homepage/components/AskAIButton.tsx b/ui/homepage/components/AskAIButton.tsx index a27f7c3..2a7ca72 100644 --- a/ui/homepage/components/AskAIButton.tsx +++ b/ui/homepage/components/AskAIButton.tsx @@ -6,18 +6,33 @@ import { AskAIDialog } from './AskAIDialog' export function AskAIButton() { const [open, setOpen] = useState(false) + const [minimized, setMinimized] = useState(false) return ( <> - + {!open && ( + + )} - setOpen(false)} /> + { + setOpen(false) + setMinimized(true) + }} + onEnd={() => { + setOpen(false) + setMinimized(false) + }} + /> ) } diff --git a/ui/homepage/components/AskAIDialog.tsx b/ui/homepage/components/AskAIDialog.tsx index 3d7d298..a0f2b1b 100644 --- a/ui/homepage/components/AskAIDialog.tsx +++ b/ui/homepage/components/AskAIDialog.tsx @@ -4,7 +4,9 @@ import { useState } from 'react' import { ChatBubble } from './ChatBubble' import { SourceHint } from './SourceHint' -export function AskAIDialog({ open, onClose }: { open: boolean; onClose: () => void }) { +const MAX_MESSAGES = 20 + +export function AskAIDialog({ open, onMinimize, onEnd }: { open: boolean; onMinimize: () => void; onEnd: () => void }) { const [question, setQuestion] = useState('') const [messages, setMessages] = useState<{ sender: 'user' | 'ai'; text: string }[]>([]) @@ -12,27 +14,39 @@ export function AskAIDialog({ open, onClose }: { open: boolean; onClose: () => v if (!question) return const userMessage = { sender: 'user' as const, text: question } const apiBase = process.env.NEXT_PUBLIC_API_BASE_URL || '' + const trimmedHistory = messages.slice(-MAX_MESSAGES) const res = await fetch(`${apiBase}/api/askai`, { method: 'POST', - body: JSON.stringify({ question, history: messages }), + body: JSON.stringify({ question, history: trimmedHistory }) }) const data = await res.json() const aiMessage = { sender: 'ai' as const, text: data.answer as string } - setMessages((prev) => [...prev, userMessage, aiMessage]) + setMessages(prev => { + const newMessages = [...prev, userMessage, aiMessage] + return newMessages.slice(-MAX_MESSAGES) + }) setQuestion('') } + function handleEnd() { + setMessages([]) + setQuestion('') + onEnd() + } + if (!open) return null return (
- +
+ + +

Ask anything about your docs