diff --git a/packages/frameworks/vue/src/chat/index.ts b/packages/frameworks/vue/src/chat/index.ts index db0e6b64..138c5716 100644 --- a/packages/frameworks/vue/src/chat/index.ts +++ b/packages/frameworks/vue/src/chat/index.ts @@ -1,4 +1,5 @@ export { default as GenuiChat } from './GenuiChat.vue'; +export { cardIdSymbol } from './useChat.js'; export * from './CustomModelProvider.js'; export * from './response-handler.js'; export * from './chat.types.js'; diff --git a/sites/playground/web/src/message-renderers/message-renderer-angular.ts b/sites/playground/web/src/message-renderers/message-renderer-angular.ts index 33f57dbd..65be40c5 100644 --- a/sites/playground/web/src/message-renderers/message-renderer-angular.ts +++ b/sites/playground/web/src/message-renderers/message-renderer-angular.ts @@ -1,23 +1,41 @@ import { defineAsyncComponent, h } from 'vue'; -import type { GenuiChat } from '@opentiny/genui-sdk-vue'; +import { cardIdSymbol, type GenuiChat } from '@opentiny/genui-sdk-vue'; const GenuiRendererNg = defineAsyncComponent(() => import('schema-renderer-ng-adpater').then((m) => m.SchemaRendererNgAdapter), ); + +/** Angular context 用的是另一份 CARD_ID Symbol,注入 Vue Chat 的 cardIdSymbol 才能让 saveState 定位到消息 */ +function bindCardIdToAction) => any }>( + action: T, + cardId: string, +): T { + return { + ...action, + execute: (params: any, context: Record = {}) => + action.execute(params, { + ...context, + [cardIdSymbol]: cardId, + }), + }; +} + export function getMessageRendererAngular(instance: InstanceType) { return (schemaCardProps) => { const props = instance.getProps(); const { continueChatAction, saveStateAction } = instance; + const cardId = schemaCardProps.id; + const customActions = { + continueChat: bindCardIdToAction(continueChatAction, cardId), + saveState: bindCardIdToAction(saveStateAction, cardId), + }; return h( 'div', h(GenuiRendererNg, { ...schemaCardProps, requiredCompleteFieldSelectors: props.requiredCompleteFieldSelectors || [], generating: instance.lastSchemaCardId === schemaCardProps.id ? instance.generating : false, - customActions: { - continueChat: continueChatAction, - saveState: saveStateAction, - }, + customActions, key: schemaCardProps.id, }), );