'use client'; import { useRouter } from 'next/navigation'; import { useCallback, useEffect, useRef, useTransition } from 'react'; import Spinner from './Spinner'; export default function MorePhotos({ path, triggerOnView = true, prefetch = true, }: { path: string triggerOnView?: boolean prefetch?: boolean }) { const router = useRouter(); const [isPending, startTransition] = useTransition(); const buttonRef = useRef(null); const advance = useCallback(() => startTransition(() => { router.push(path, { scroll: false }); }), [router, path]); useEffect(() => { if (prefetch) { router.prefetch(path); } }, [router, path, prefetch]); useEffect(() => { const observer = new IntersectionObserver(e => { if ( triggerOnView && e[0].isIntersecting && !isPending ) { advance(); } }, { root: null, threshold: 0, }); observer.observe(buttonRef.current!); return () => observer.disconnect(); }, [triggerOnView, advance, isPending]); return ( ); }