import {useListSearch} from "@/hooks/useListSearch"; import usePagination from "@/hooks/usePagination"; import { clsx } from "clsx"; import {ReactNode} from "react"; interface Props { list: T[]; searchFields: string[][]; pageSize?: number; firstCard?: () => ReactNode; renderCard: (item: T) => ReactNode; className?: string } export default function CardList({list, searchFields, renderCard, firstCard, className, pageSize = 20}: Props) { const {rows, renderSearch} = useListSearch(searchFields, list); const {items, page, render, renderMinimal} = usePagination(rows, pageSize); return (
{searchFields.length > 0 && renderSearch()} {searchFields.length > 0 ? renderMinimal() : render()}
{page === 0 && !!firstCard && firstCard()} {items.map(renderCard)}
); }