diff --git a/src/app/grid/page.tsx b/src/app/grid/page.tsx index b9c8258c..22b638ed 100644 --- a/src/app/grid/page.tsx +++ b/src/app/grid/page.tsx @@ -35,7 +35,7 @@ export default async function GridPage() { photos.length > 0 ? - + {photos.length >= INFINITE_SCROLL_MULTIPLE_GRID && className?: string contentMain: JSX.Element contentSide?: JSX.Element @@ -14,14 +17,17 @@ export default function SiteGrid({ sideHiddenOnMobile?: boolean }) { return ( -
+
- getPhotosAction( + const fetcher = useCallback(([_key, size]: [string, number]) => { + console.log('Fetching', size); + return getPhotosAction( initialOffset + size * itemsPerPage, itemsPerPage, - ) - , [initialOffset, itemsPerPage]); + ); + }, [initialOffset, itemsPerPage]); - const { data, isLoading, isValidating, error, mutate, size, setSize } = + const { data, isLoading, isValidating, error, mutate, setSize } = useSwrInfinite( keyGenerator, fetcher, { - revalidateFirstPage: Boolean(isUserSignedIn), - revalidateOnMount: Boolean(isUserSignedIn), + initialSize: 2, + revalidateFirstPage: false, revalidateOnFocus: Boolean(isUserSignedIn), revalidateOnReconnect: Boolean(isUserSignedIn), }, @@ -73,46 +68,11 @@ export default function InfinitePhotoScroll({ data && data[data.length - 1]?.length < itemsPerPage , [data, itemsPerPage]); - useEffect(() => { - if (prefetch && !isFinished) { - preload([key, (size ?? 0) + 1], fetcher); - } - }, [prefetch, isFinished, key, size, fetcher]); - const advance = useCallback(() => { if (!isFinished && !isLoadingOrValidating) { setSize(size => size + 1); } - }, [isFinished, setSize, isLoadingOrValidating]); - - useEffect(() => { - // Only add observer if button is rendered - if (buttonContainerRef.current) { - const observer = new IntersectionObserver(e => { - if (triggerOnView && e[0].isIntersecting) { - advance(); - } - }, { - root: null, - threshold: 0, - }); - observer.observe(buttonContainerRef.current); - return () => observer.disconnect(); - } - }, [triggerOnView, advance]); - - // Poll for button getting stuck - useEffect(() => { - if (triggerOnView && !isFinished && !isLoadingOrValidating) { - const interval = setInterval(() => { - const rect = buttonContainerRef.current?.getBoundingClientRect(); - if (rect && rect.top <= window.innerHeight) { - advance(); - } - }, 1000); - return () => clearInterval(interval); - } - }, [advance, isFinished, isLoadingOrValidating, triggerOnView]); + }, [isFinished, isLoadingOrValidating, setSize]); const photos = useMemo(() => (data ?? [])?.flat(), [data]); @@ -128,11 +88,7 @@ export default function InfinitePhotoScroll({ } as any), [data, mutate]); const renderMoreButton = () => -
+