refactor: streamline chat scroll manager

- Removed unused activeTurnAnchorId and activeTurnSpacerHeight from MemoryDebugPanel.
- Simplified useChatScrollManager by eliminating unnecessary state and functions related to active turn anchoring.
- Updated loadMessages function signatures to accept an optional limit parameter across message and session stores.
- Enhanced scroll behavior in useScrollEngine to support dynamic bottom tracking during animations.
- Improved event stream handling to allow for resyncing messages with a specified limit.
- Cleaned up session memory state to remove active turn properties, focusing on viewport anchoring.
This commit is contained in:
Bohdan Triapitsyn
2026-01-20 03:23:39 +02:00
parent 8fa16baf3b
commit 6544b12e78
15 changed files with 318 additions and 937 deletions
@@ -19,8 +19,7 @@ interface MessageListProps {
hasMoreAbove: boolean;
isLoadingOlder: boolean;
onLoadOlder: () => void;
scrollToBottom?: (options?: { instant?: boolean; force?: boolean; clearAnchor?: boolean }) => void;
pendingAnchorId?: string | null;
scrollToBottom?: (options?: { instant?: boolean; force?: boolean }) => void;
}
const MessageList: React.FC<MessageListProps> = ({
@@ -33,7 +32,6 @@ const MessageList: React.FC<MessageListProps> = ({
isLoadingOlder,
onLoadOlder,
scrollToBottom,
pendingAnchorId,
}) => {
React.useEffect(() => {
if (permissions.length === 0 && questions.length === 0) {
@@ -101,7 +99,6 @@ const MessageList: React.FC<MessageListProps> = ({
onContentChange={onMessageContentChange}
animationHandlers={getAnimationHandlers(message.info.id)}
scrollToBottom={scrollToBottom}
isPendingAnchor={pendingAnchorId === message.info.id}
turnGroupingContext={getContextForMessage(message.info.id)}
/>
))}
@@ -118,6 +115,9 @@ const MessageList: React.FC<MessageListProps> = ({
))}
</div>
)}
{/* Bottom spacer - always 10% of viewport height */}
<div className="flex-shrink-0" style={{ height: '10vh' }} aria-hidden="true" />
</div>
);
};