Skip to content

Commit 72aeb5b

Browse files
committed
feat: Refactor loading state management in AI service and ChatLogic, ensuring accurate loading indicators during message processing and service interactions
1 parent 8d1b476 commit 72aeb5b

2 files changed

Lines changed: 27 additions & 3 deletions

File tree

src/renderer/src/components/pages/chat/ChatLogic.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,12 +115,18 @@ export default function ChatLogic({
115115
setSelectedModel(modelId)
116116
}
117117

118+
const handleStopGeneration = useCallback(() => {
119+
// 同时重置两个 loading 状态
120+
setIsLoading(false)
121+
aiService.stopGeneration()
122+
}, [aiService, setIsLoading])
123+
118124
return children({
119125
isLoading: isLoading || aiService.isLoading,
120126
selectedModel,
121127
onModelChange: handleModelChange,
122128
onSendMessage: messageOperations.handleSendMessage,
123-
onStopGeneration: aiService.stopGeneration,
129+
onStopGeneration: handleStopGeneration,
124130
onRetryMessage: messageOperations.handleRetryMessage,
125131
onEditMessage: messageOperations.handleEditMessage,
126132
onEditAndResendMessage: messageOperations.handleEditAndResendMessage,

src/renderer/src/components/pages/chat/hooks/useAIService.ts

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,9 @@ export function useAIService(chatId: string): UseAIServiceReturn {
6262
const aiService = createAIService(llmConfig, modelConfig)
6363
const messageId = uuidv4()
6464

65+
// 设置 loading 状态为 true
66+
setIsLoading(true)
67+
6568
// 将AI服务实例添加到活跃服务列表中
6669
setActiveAIServices((prev) => new Map(prev).set(messageId, aiService))
6770

@@ -128,10 +131,14 @@ export function useAIService(chatId: string): UseAIServiceReturn {
128131
endTime: Date.now()
129132
})
130133

131-
// 从活跃服务列表中移除
134+
// 从活跃服务列表中移除并检查是否需要重置 loading 状态
132135
setActiveAIServices((prev) => {
133136
const newMap = new Map(prev)
134137
newMap.delete(messageId)
138+
// 如果没有活跃的服务了,重置 loading 状态
139+
if (newMap.size === 0) {
140+
setIsLoading(false)
141+
}
135142
return newMap
136143
})
137144

@@ -150,10 +157,14 @@ export function useAIService(chatId: string): UseAIServiceReturn {
150157
error: error.message
151158
})
152159

153-
// 从活跃服务列表中移除
160+
// 从活跃服务列表中移除并检查是否需要重置 loading 状态
154161
setActiveAIServices((prev) => {
155162
const newMap = new Map(prev)
156163
newMap.delete(messageId)
164+
// 如果没有活跃的服务了,重置 loading 状态
165+
if (newMap.size === 0) {
166+
setIsLoading(false)
167+
}
157168
return newMap
158169
})
159170

@@ -177,6 +188,12 @@ export function useAIService(chatId: string): UseAIServiceReturn {
177188
)
178189

179190
const stopGeneration = useCallback(() => {
191+
// 如果没有活跃的服务,直接返回
192+
if (activeAIServices.size === 0) {
193+
setIsLoading(false)
194+
return
195+
}
196+
180197
// 停止所有活跃的AI服务
181198
activeAIServices.forEach((aiService, messageId) => {
182199
aiService.stopStreaming()
@@ -220,6 +237,7 @@ export function useAIService(chatId: string): UseAIServiceReturn {
220237
clearStreamingMessage(chatId, messageId)
221238
})
222239

240+
// 清空活跃服务并重置 loading 状态
223241
setActiveAIServices(new Map())
224242
setIsLoading(false)
225243
}, [activeAIServices, updateTask, chatId, clearStreamingMessage])

0 commit comments

Comments
 (0)