import { ReactNode, useCallback, useEffect, useState } from 'react'; import { FaChevronDown } from 'react-icons/fa'; const ScrollToBottom = ({ children, className = '' }: { children: ReactNode; className?: string }) => { const [node, setNode] = useState(null); const [show, setShow] = useState(false); const bottom = useCallback((node: HTMLDivElement) => { if (node) { node.scrollIntoView({ behavior: 'smooth' }); setNode(node); } }, []); useEffect(() => { const container = document.querySelector('main > div'); container?.addEventListener('scroll', () => { if (node?.getBoundingClientRect() && node.getBoundingClientRect().y >= window.innerHeight) { setShow(true); } else { setShow(false); } }); container?.addEventListener('DOMNodeInserted', (e) => { if (!(e.target as Element).classList.contains('message')) return; if (node?.getBoundingClientRect() && node.getBoundingClientRect().y >= window.innerHeight) { node?.scrollIntoView({ behavior: 'smooth' }); } }); }, [node]); return ( <>
{children}
); }; export default ScrollToBottom;