继续优化重构后的逻辑
This commit is contained in:
@@ -165,10 +165,6 @@ const ConversationTabView = memo(function ConversationTabView({
|
||||
const dbConvIdRef = useRef<number | null>(conversationId)
|
||||
const statusUpdatedRef = useRef(false)
|
||||
const selectedAgentRef = useRef(selectedAgent)
|
||||
const pendingPromptRef = useRef<{
|
||||
draft: PromptDraft
|
||||
modeId: string | null
|
||||
} | null>(null)
|
||||
const createConversationPendingRef = useRef(false)
|
||||
const reconcileTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null)
|
||||
const externalIdSavedRef = useRef(false)
|
||||
@@ -355,14 +351,6 @@ const ConversationTabView = memo(function ConversationTabView({
|
||||
setSyncState,
|
||||
])
|
||||
|
||||
useEffect(() => {
|
||||
if (connStatus === "connected" && pendingPromptRef.current) {
|
||||
const pending = pendingPromptRef.current
|
||||
pendingPromptRef.current = null
|
||||
lifecycleSend(pending.draft, pending.modeId)
|
||||
}
|
||||
}, [connStatus, lifecycleSend])
|
||||
|
||||
useEffect(() => {
|
||||
if (connStatus === "connected" || connStatus === "prompting") {
|
||||
statusUpdatedRef.current = false
|
||||
@@ -424,6 +412,7 @@ const ConversationTabView = memo(function ConversationTabView({
|
||||
setAgentConnectError(tWelcome("enableAgentFirstPlaceholder"))
|
||||
return
|
||||
}
|
||||
if (connStatus !== "connected") return
|
||||
|
||||
const optimisticTurn = buildOptimisticUserTurnFromDraft(
|
||||
draft,
|
||||
@@ -436,32 +425,7 @@ const ConversationTabView = memo(function ConversationTabView({
|
||||
)
|
||||
setSendSignal((prev) => prev + 1)
|
||||
setSyncState(effectiveConversationId, "awaiting_persist")
|
||||
|
||||
if (connStatus === "connected") {
|
||||
lifecycleSend(draft, selectedModeIdArg)
|
||||
} else {
|
||||
pendingPromptRef.current = {
|
||||
draft,
|
||||
modeId: selectedModeIdArg ?? null,
|
||||
}
|
||||
if (
|
||||
(!connStatus ||
|
||||
connStatus === "disconnected" ||
|
||||
connStatus === "error") &&
|
||||
workingDirForConnection
|
||||
) {
|
||||
connConnect(
|
||||
selectedAgent,
|
||||
workingDirForConnection,
|
||||
dbConversationId != null ? externalId : undefined,
|
||||
{
|
||||
source: "auto_link",
|
||||
}
|
||||
).catch((e) => {
|
||||
setAgentConnectError(normalizeErrorMessage(e))
|
||||
})
|
||||
}
|
||||
}
|
||||
lifecycleSend(draft, selectedModeIdArg)
|
||||
|
||||
const persistedId = dbConvIdRef.current
|
||||
if (persistedId) {
|
||||
@@ -511,11 +475,8 @@ const ConversationTabView = memo(function ConversationTabView({
|
||||
appendOptimisticTurn,
|
||||
bindConversationTab,
|
||||
canAutoConnect,
|
||||
connConnect,
|
||||
connStatus,
|
||||
dbConversationId,
|
||||
effectiveConversationId,
|
||||
externalId,
|
||||
folderId,
|
||||
hasPersistedConversation,
|
||||
lifecycleSend,
|
||||
@@ -530,7 +491,6 @@ const ConversationTabView = memo(function ConversationTabView({
|
||||
tabId,
|
||||
temporaryConversationId,
|
||||
trySaveExternalId,
|
||||
workingDirForConnection,
|
||||
]
|
||||
)
|
||||
|
||||
@@ -659,12 +619,17 @@ export function ConversationDetailPanel() {
|
||||
const { tabs, activeTabId, openNewConversationTab, closeTab } =
|
||||
useTabContext()
|
||||
const [reloadByTabId, setReloadByTabId] = useState<Record<string, number>>({})
|
||||
const tabsRef = useRef(tabs)
|
||||
const conversationsRef = useRef(conversations)
|
||||
const pendingClosedConversationIdsRef = useRef<Set<number>>(new Set())
|
||||
const pendingRefreshTimerRef = useRef<ReturnType<typeof setTimeout> | null>(
|
||||
null
|
||||
)
|
||||
|
||||
useEffect(() => {
|
||||
tabsRef.current = tabs
|
||||
}, [tabs])
|
||||
|
||||
useEffect(() => {
|
||||
conversationsRef.current = conversations
|
||||
}, [conversations])
|
||||
@@ -744,6 +709,11 @@ export function ConversationDetailPanel() {
|
||||
runtimeConversationId ?? summary?.id ?? null
|
||||
if (!matchedConversationId) return
|
||||
|
||||
const isOpenInTabs = tabsRef.current.some(
|
||||
(tab) => tab.conversationId === matchedConversationId
|
||||
)
|
||||
if (isOpenInTabs) return
|
||||
|
||||
invalidateDetailCache(matchedConversationId)
|
||||
setSyncState(matchedConversationId, "reconciling")
|
||||
|
||||
|
||||
@@ -70,12 +70,6 @@ async function loadAndCacheDetail(
|
||||
return promise
|
||||
}
|
||||
|
||||
export async function warmupDetailCache(
|
||||
conversationId: number
|
||||
): Promise<DbConversationDetail> {
|
||||
return loadAndCacheDetail(conversationId)
|
||||
}
|
||||
|
||||
export async function refreshDetailCache(
|
||||
conversationId: number
|
||||
): Promise<DbConversationDetail> {
|
||||
|
||||
Reference in New Issue
Block a user