import { useThreadScrolling } from '@/hooks/useThreadScrolling' import { memo } from 'react' import { GenerateResponseButton } from './GenerateResponseButton' import { useMessages } from '@/hooks/useMessages' import { useShallow } from 'zustand/react/shallow' import { useAppearance } from '@/hooks/useAppearance' import { cn } from '@/lib/utils' import { ArrowDown } from 'lucide-react' import { useTranslation } from '@/i18n/react-i18next-compat' import { useAppState } from '@/hooks/useAppState' import { MessageStatus } from '@janhq/core' const ScrollToBottom = ({ threadId, scrollContainerRef, }: { threadId: string scrollContainerRef: React.RefObject }) => { const { t } = useTranslation() const appMainViewBgColor = useAppearance((state) => state.appMainViewBgColor) const { showScrollToBottomBtn, scrollToBottom } = useThreadScrolling( threadId, scrollContainerRef ) const { messages } = useMessages( useShallow((state) => ({ messages: state.messages[threadId], })) ) const streamingContent = useAppState((state) => state.streamingContent) const lastMsg = messages[messages.length - 1] const showGenerateAIResponseBtn = !!lastMsg && lastMsg.status !== MessageStatus.Ready && !streamingContent return (
{showScrollToBottomBtn && (
{ scrollToBottom(true) }} >

{t('scrollToBottom')}

)} {showGenerateAIResponseBtn && ( )}
) } export default memo(ScrollToBottom)