'use client' import { useLoadMore } from '@/hooks/use-load-more' import { LoadMore } from './load-more' interface PaginatedContentProps { items: T[] renderItem: (item: T, index: number) => React.ReactNode initialItemsPerPage?: number itemsPerLoad?: number loadMoreVariant?: 'button' | 'auto' | 'scroll' loadMoreText?: string noMoreText?: string containerClassName?: string itemsClassName?: string emptyState?: React.ReactNode threshold?: number } export function PaginatedContent({ items, renderItem, initialItemsPerPage = 12, itemsPerLoad = 12, loadMoreVariant = 'button', loadMoreText = 'Load more', noMoreText = 'All items loaded', containerClassName = '', itemsClassName = 'grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-4', emptyState, threshold = 200 }: PaginatedContentProps) { const { displayedItems, hasMore, isLoading, loadMore, showItemsCount, totalItemsCount } = useLoadMore({ items, initialItemsPerPage, itemsPerLoad }) if (items.length === 0 && emptyState) { return
{emptyState}
} return (
{/* Items Grid/List */}
{displayedItems.map((item, index) => renderItem(item, index))}
{/* Load More Component */} {(hasMore || loadMoreVariant !== 'scroll') && ( )}
) } // Convenience wrapper for common website grid layout export function WebsitesPaginatedGrid({ items, renderItem, ...props }: Omit, 'itemsClassName'> & { items: T[] renderItem: (item: T, index: number) => React.ReactNode }) { return ( ) }