From 56100c6759f9f34fb3fabc9b606d9694565fa510 Mon Sep 17 00:00:00 2001 From: xintaofei Date: Wed, 11 Mar 2026 18:17:15 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3pnpm=20lint=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/chat/message-input.tsx | 10 ++++++---- .../conversation-detail-panel.tsx | 18 +++++++++++++----- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/src/components/chat/message-input.tsx b/src/components/chat/message-input.tsx index 1100ed9..365a6b0 100644 --- a/src/components/chat/message-input.tsx +++ b/src/components/chat/message-input.tsx @@ -7,7 +7,11 @@ import { open } from "@tauri-apps/plugin-dialog" import Image from "next/image" import { useTranslations } from "next-intl" import { Button } from "@/components/ui/button" -import { Popover, PopoverContent, PopoverTrigger } from "@/components/ui/popover" +import { + Popover, + PopoverContent, + PopoverTrigger, +} from "@/components/ui/popover" import { Textarea } from "@/components/ui/textarea" import { Ellipsis, FileSearch, Plus, Send, Square, X } from "lucide-react" import { cn } from "@/lib/utils" @@ -1133,9 +1137,7 @@ export function MessageInput({ {/* 宽屏内联显示,窄屏(<300px)通过"更多"气泡显示 */} -
- {selectorItems} -
+
{selectorItems}
{hasAnySelector && ( diff --git a/src/components/conversations/conversation-detail-panel.tsx b/src/components/conversations/conversation-detail-panel.tsx index 6ad7d99..528b344 100644 --- a/src/components/conversations/conversation-detail-panel.tsx +++ b/src/components/conversations/conversation-detail-panel.tsx @@ -245,6 +245,10 @@ const ConversationTabView = memo(function ConversationTabView({ disconnect: connDisconnect, sessionId: connSessionId, } = conn + const connStatusRef = useRef(connStatus) + useEffect(() => { + connStatusRef.current = connStatus + }, [connStatus]) const isConnecting = connStatus === "connecting" || connStatus === "downloading" const connectionModes = useMemo( @@ -281,7 +285,7 @@ const ConversationTabView = memo(function ConversationTabView({ // resetting syncState while streaming. The useEffect with the // connStatus === "prompting" guard will handle it naturally // once prompting ends. - if (prevStatusRef.current === "prompting") return + if (connStatusRef.current === "prompting") return acknowledgePersistedDetail(refreshConversationId, refreshed) } catch (error) { setSyncState(refreshConversationId, "failed") @@ -348,11 +352,14 @@ const ConversationTabView = memo(function ConversationTabView({ acknowledgePersistedDetail(dbConversationId, detail) }, [acknowledgePersistedDetail, connStatus, dbConversationId, detail]) - const prevStatusRef = useRef(connStatus) + const [prevConnStatus, setPrevConnStatus] = useState(connStatus) + const promptingJustEnded = + prevConnStatus === "prompting" && connStatus !== "prompting" + if (prevConnStatus !== connStatus) { + setPrevConnStatus(connStatus) + } useEffect(() => { - const prev = prevStatusRef.current - prevStatusRef.current = connStatus - if (prev !== "prompting" || connStatus === "prompting") return + if (!promptingJustEnded) return setSyncState(effectiveConversationId, "reconciling") const persistedId = dbConvIdRef.current @@ -374,6 +381,7 @@ const ConversationTabView = memo(function ConversationTabView({ }, [ clearReconcileTimer, connStatus, + promptingJustEnded, effectiveConversationId, refreshConversations, refreshFromDb,