Skip to content

Commit 6fcc070

Browse files
committed
fix(messages): handle the problem of failure to scroll to the position of custom message item
1 parent 0cfc668 commit 6fcc070

File tree

1 file changed

+25
-10
lines changed

1 file changed

+25
-10
lines changed

src/runtime/components/ChatMessages.vue

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ type ChatSlotMessageProps = ChatMessageProps & {
6464
slots?: {
6565
[K in keyof ChatMessageSlots]?: ExtendSlotWithVersion<K>
6666
}
67+
[key: string]: any
6768
}
6869
6970
type ExtendSlotWithVersion<K extends keyof ChatMessageSlots>
@@ -124,6 +125,8 @@ function registerMessageRef(id: string, element: ComponentPublicInstance | null)
124125
const elInstance = element?.$el
125126
if (elInstance) {
126127
messagesRefs.value.set(id, elInstance)
128+
} else {
129+
console.warn('message id', id, 'unregistered dom instance may cause the failure of rolling to the message')
127130
}
128131
}
129132
@@ -299,21 +302,33 @@ onMounted(() => {
299302
:style="{ '--last-message-height': `${lastMessageHeight}px` }"
300303
>
301304
<slot>
302-
<template v-for="message in messages" :key="message.id">
303-
<component
304-
:is="$slots.message ? $slots.message : UChatMessage"
305+
<template
306+
v-for="messageData in messages"
307+
:key="messageData.id"
308+
>
309+
<slot
310+
v-if="$slots.message"
311+
:ref="(el: ComponentPublicInstance) => registerMessageRef(messageData.id, el)"
312+
name="message"
313+
:compact="compact"
314+
v-bind="{
315+
...messageData,
316+
...(messageData.role === 'user' ? userProps : assistantProps)
317+
}"
318+
/>
319+
<UChatMessage
320+
v-else
321+
:ref="(el) => registerMessageRef(messageData.id, el as ComponentPublicInstance)"
322+
:compact="compact"
305323
v-bind="{
306-
...message,
307-
...(message.role === 'user' ? userProps : assistantProps),
308-
...($slots.message ? { message, slots: getProxySlots() } : {}),
309-
compact
324+
...messageData,
325+
...(messageData.role === 'user' ? userProps : assistantProps)
310326
}"
311-
:ref="(el: ComponentPublicInstance) => registerMessageRef(message.id, el)"
312327
>
313328
<template v-for="(_, name) in getProxySlots()" #[name]="slotData">
314-
<slot :name="name" v-bind="slotData" :message="message" />
329+
<slot :name="name" v-bind="(slotData as any)" :message="messageData" />
315330
</template>
316-
</component>
331+
</UChatMessage>
317332
</template>
318333
</slot>
319334
<UChatMessage

0 commit comments

Comments
 (0)