DB-GPT/web/new-components/chat/ChatContentContainer.tsx
Dreammy23 471689ba20
feat(web): Unified frontend code style (#1923)
Co-authored-by: Fangyin Cheng <staneyffer@gmail.com>
Co-authored-by: 谨欣 <echo.cmy@antgroup.com>
Co-authored-by: 严志勇 <yanzhiyong@tiansuixiansheng.com>
Co-authored-by: yanzhiyong <932374019@qq.com>
2024-08-30 14:03:06 +08:00

44 lines
1.4 KiB
TypeScript

import ChatHeader from '@/new-components/chat/header/ChatHeader';
import dynamic from 'next/dynamic';
import React, { forwardRef, useEffect, useImperativeHandle, useRef, useState } from 'react';
const ChatCompletion = dynamic(() => import('@/new-components/chat/content/ChatCompletion'), { ssr: false });
// eslint-disable-next-line no-empty-pattern
const ChatContentContainer = ({}, ref: React.ForwardedRef<any>) => {
const scrollRef = useRef<HTMLDivElement>(null);
const [isScrollToTop, setIsScrollToTop] = useState<boolean>(false);
useImperativeHandle(ref, () => {
return scrollRef.current;
});
useEffect(() => {
if (scrollRef.current) {
scrollRef.current.addEventListener('scroll', () => {
const st = scrollRef.current?.scrollTop || 0;
if (st >= 42 + 32) {
setIsScrollToTop(true);
} else {
setIsScrollToTop(false);
}
});
}
return () => {
// eslint-disable-next-line react-hooks/exhaustive-deps
scrollRef.current && scrollRef.current.removeEventListener('scroll', () => {});
};
}, []);
return (
<div className='flex flex-1 overflow-hidden'>
<div ref={scrollRef} className='h-full w-full mx-auto overflow-y-auto'>
<ChatHeader isScrollToTop={isScrollToTop} />
<ChatCompletion />
</div>
</div>
);
};
export default forwardRef(ChatContentContainer);