'use client' import { useRef } from 'react' import { useVirtualizer } from '@tanstack/react-virtual' interface VirtualListProps { items: T[] estimateSize: number className?: string renderItem: (item: T, index: number) => React.ReactNode } export default function VirtualList({ items, estimateSize, className, renderItem }: VirtualListProps) { const parentRef = useRef(null) const virtualizer = useVirtualizer({ count: items.length, getScrollElement: () => parentRef.current, estimateSize: () => estimateSize, overscan: 10, }) // For small lists (< 50 items), render directly without virtualization if (items.length < 50) { return (
{items.map((item, index) => renderItem(item, index))}
) } return (
{virtualizer.getVirtualItems().map((virtualRow) => (
{renderItem(items[virtualRow.index], virtualRow.index)}
))}
) }