1 Commits

Author SHA1 Message Date
993137068e chat scroll to bottom by default 2026-06-18 02:53:06 +02:00

View File

@@ -1,5 +1,5 @@
'use client'
import { useState, useEffect } from 'react'
import { useState, useEffect, useRef } from 'react'
import { useChat } from '@ai-sdk/react'
import { DefaultChatTransport, type UIMessage } from 'ai'
import { Button } from '~/components/ui/button'
@@ -83,14 +83,21 @@ function AuthenticatedChatInterface({ dbMessages, sessionId }: ChatInterfaceProp
sendMessage({ text })
}
const gsapContext = useGsapContext()
const didInitialScroll = useRef(false)
useEffect(() => {
let scroller = gsapContext?.getScroller()
if (scroller instanceof Window) {
return;
const scroller = gsapContext?.getScroller()
if (!scroller || scroller instanceof Window) {
return
}
console.log(scroller?.scrollHeight)
scroller?.scrollTo({ behavior: 'smooth', top: scroller.scrollHeight })
}, [messages])
// Jump instantly on first open so the chat starts pinned to the bottom;
// animate subsequent updates. Defer a frame so the messages have laid out
// (and any streaming content has grown) before we measure scrollHeight.
const behavior: ScrollBehavior = didInitialScroll.current ? 'smooth' : 'auto'
didInitialScroll.current = true
requestAnimationFrame(() => {
scroller.scrollTo({ behavior, top: scroller.scrollHeight })
})
}, [messages, status])
return (
<div className="flex flex-col h-full">
{messages &&