'use client' import * as React from 'react' import { useVirtualizer } from '@tanstack/react-virtual' import { clsx } from 'clsx' import { useRouter, useSearchParams } from 'next/navigation' import { useRef, useTransition } from 'react' import Link from 'next/link' export function RowVirtualizerFixed({ rows = [] }: { rows: string[] }) { const parentRef = React.useRef(null) const totalRef = useRef([]) const searchParams = useSearchParams() if (searchParams.get('page') === '1') { totalRef.current = rows } rows.forEach((row) => { if (!totalRef.current.includes(row)) { totalRef.current.push(row) } }) const allRows = totalRef.current const hasNextPage = true const rowVirtualizer = useVirtualizer({ count: hasNextPage ? allRows.length + 1 : allRows.length, getScrollElement: () => parentRef.current, estimateSize: () => 100, overscan: 5, initialRect: { width: 800, height: 800, }, }) return (
{rowVirtualizer.getVirtualItems().map((virtualRow) => { const isLoaderRow = virtualRow.index > allRows.length - 1 const post = allRows[virtualRow.index] return (
{isLoaderRow ? : post}
) })}
) } const LoadingMoreButton = () => { const searchParams = useSearchParams() const router = useRouter() const [isPending, startTransition] = useTransition() const fetchNextPage = () => { startTransition(() => { router.push(`?page=${+searchParams.get('page')! + 1}`) }) } const isMaxPage = searchParams.get('page')! === '10' if (isMaxPage) { return (

Max page reached

go to page 1
) } return ( ) }