From 06107cf429fd5d5f8ec2634e62f9ea86a98c1fcb Mon Sep 17 00:00:00 2001 From: gene9831 Date: Wed, 11 Feb 2026 09:56:42 +0800 Subject: [PATCH 1/2] feat(conversation): add onLoad callback for initial conversation list loading --- packages/kit/src/vue/conversation/types.ts | 5 +++++ packages/kit/src/vue/conversation/useConversation.ts | 9 +++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/packages/kit/src/vue/conversation/types.ts b/packages/kit/src/vue/conversation/types.ts index 25b2cc9e6..a43649636 100644 --- a/packages/kit/src/vue/conversation/types.ts +++ b/packages/kit/src/vue/conversation/types.ts @@ -45,6 +45,11 @@ export interface UseConversationOptions { * When provided, conversation list and messages can be loaded and persisted. */ storage?: ConversationStorageStrategy + /** + * Called when the initial conversation list has been loaded from storage. + * Only fired when storage.loadConversations is available and has completed. + */ + onLoad?: (conversations: ConversationInfo[]) => void } export interface UseConversationReturn { diff --git a/packages/kit/src/vue/conversation/useConversation.ts b/packages/kit/src/vue/conversation/useConversation.ts index eff761fd9..556a187ce 100644 --- a/packages/kit/src/vue/conversation/useConversation.ts +++ b/packages/kit/src/vue/conversation/useConversation.ts @@ -1,10 +1,10 @@ import { computed, ref, watch, WatchStopHandle } from 'vue' +import { localStorageStrategyFactory } from '../../storage/factories' import { ChatMessage } from '../../types' import { UseMessageOptions, UseMessageReturn } from '../message/types' import { useMessage } from '../message/useMessage' import { Conversation, ConversationInfo, UseConversationOptions, UseConversationReturn } from './types' import { useThrottleFn } from './useThrottleFn' -import { localStorageStrategyFactory } from '../../storage/factories' export const useConversation = (options: UseConversationOptions): UseConversationReturn => { // 如果没有提供存储策略,使用默认的 LocalStorage 策略 @@ -117,11 +117,15 @@ export const useConversation = (options: UseConversationOptions): UseConversatio Promise.resolve(storage.loadConversations()) .then((list) => { // 如果加载的列表为空,直接返回 - if (!list?.length) return + if (!list?.length) { + options.onLoad?.([]) + return + } // 如果当前内存中的会话列表为空,直接使用加载的列表 if (conversations.value.length === 0) { conversations.value = list + options.onLoad?.(conversations.value) return } @@ -136,6 +140,7 @@ export const useConversation = (options: UseConversationOptions): UseConversatio } }) conversations.value = Array.from(merged.values()) + options.onLoad?.(conversations.value) // 确保 activeConversation 对应的会话在合并后的列表中 // 如果 activeConversationId 存在但对应的会话不在列表中,说明可能被意外删除 From 556a2aaefbdb090dedbc8b51642ebca151c06999 Mon Sep 17 00:00:00 2001 From: gene9831 Date: Wed, 11 Feb 2026 10:36:50 +0800 Subject: [PATCH 2/2] refactor(conversation): streamline onLoad callback handling for conversation list loading --- packages/kit/src/vue/conversation/useConversation.ts | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/packages/kit/src/vue/conversation/useConversation.ts b/packages/kit/src/vue/conversation/useConversation.ts index 556a187ce..348878d25 100644 --- a/packages/kit/src/vue/conversation/useConversation.ts +++ b/packages/kit/src/vue/conversation/useConversation.ts @@ -118,15 +118,13 @@ export const useConversation = (options: UseConversationOptions): UseConversatio .then((list) => { // 如果加载的列表为空,直接返回 if (!list?.length) { - options.onLoad?.([]) - return + return [] } // 如果当前内存中的会话列表为空,直接使用加载的列表 if (conversations.value.length === 0) { conversations.value = list - options.onLoad?.(conversations.value) - return + return conversations.value } // 合并策略:内存数据优先于存储数据 @@ -140,11 +138,14 @@ export const useConversation = (options: UseConversationOptions): UseConversatio } }) conversations.value = Array.from(merged.values()) - options.onLoad?.(conversations.value) // 确保 activeConversation 对应的会话在合并后的列表中 // 如果 activeConversationId 存在但对应的会话不在列表中,说明可能被意外删除 // 这种情况下,activeConversation 会自动变为 null(通过 computed 属性) + return conversations.value + }) + .then((loadedList) => { + options.onLoad?.(loadedList) }) .catch((error) => { console.error('[useConversation] loadConversations failed:', error)