refactor: update auto scroll mechanism (#970)
This commit is contained in:
parent
1fd2302914
commit
45978c27a2
13 changed files with 250 additions and 52 deletions
45
hooks/use-messages.tsx
Normal file
45
hooks/use-messages.tsx
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
import { useState, useEffect } from 'react';
|
||||
import { useScrollToBottom } from './use-scroll-to-bottom';
|
||||
import type { UseChatHelpers } from '@ai-sdk/react';
|
||||
|
||||
export function useMessages({
|
||||
chatId,
|
||||
status,
|
||||
}: {
|
||||
chatId: string;
|
||||
status: UseChatHelpers['status'];
|
||||
}) {
|
||||
const {
|
||||
containerRef,
|
||||
endRef,
|
||||
isAtBottom,
|
||||
scrollToBottom,
|
||||
onViewportEnter,
|
||||
onViewportLeave,
|
||||
} = useScrollToBottom();
|
||||
|
||||
const [hasSentMessage, setHasSentMessage] = useState(false);
|
||||
|
||||
useEffect(() => {
|
||||
if (chatId) {
|
||||
scrollToBottom('instant');
|
||||
setHasSentMessage(false);
|
||||
}
|
||||
}, [chatId, scrollToBottom]);
|
||||
|
||||
useEffect(() => {
|
||||
if (status === 'submitted') {
|
||||
setHasSentMessage(true);
|
||||
}
|
||||
}, [status]);
|
||||
|
||||
return {
|
||||
containerRef,
|
||||
endRef,
|
||||
isAtBottom,
|
||||
scrollToBottom,
|
||||
onViewportEnter,
|
||||
onViewportLeave,
|
||||
hasSentMessage,
|
||||
};
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue