import { ChevronLeft, ChevronRight, ChevronsLeft, ChevronsRight, } from 'lucide-react'; import * as React from 'react'; import type { PaginationState } from '@/components/data-table'; import { useDebounce } from '@/components/data-table'; import { Button } from '@/components/ui/button'; import { Card, CardContent } from '@/components/ui/card'; import { Input } from '@/components/ui/input'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@/components/ui/select'; export type { PaginationState } from '@/components/data-table'; interface DataCardsProps { data: TData[]; renderCard: (item: TData, index: number) => React.ReactNode; getRowId?: (item: TData) => string | number; searchKey?: string; searchPlaceholder?: string; emptyText?: string; toolbar?: React.ReactNode; pagination: PaginationState; onPageChange: (page: number) => void; onPerPageChange?: (perPage: number) => void; onSearchChange?: (search: string) => void; searchValue?: string; } export function DataCards({ data, renderCard, getRowId, searchKey, searchPlaceholder = 'Ketikkan sesuatu...', emptyText = 'Tidak ada data.', toolbar, pagination, onPageChange, onPerPageChange, onSearchChange, searchValue, }: DataCardsProps) { const [localSearch, setLocalSearch] = React.useState(searchValue ?? ''); const [previousSearchValue, setPreviousSearchValue] = React.useState(searchValue); if (searchValue !== previousSearchValue) { setPreviousSearchValue(searchValue); setLocalSearch(searchValue ?? ''); } const handleSearchDebounced = useDebounce( (value: string) => onSearchChange?.(value), 300, ); function handleSearchChange(value: string) { setLocalSearch(value); handleSearchDebounced(value); } const currentPage = pagination.current_page; const totalPages = pagination.last_page; return ( <> {(searchKey || toolbar || onPerPageChange) && (
{searchKey && ( handleSearchChange(event.target.value) } className="max-w-sm" /> )} {toolbar}
{onPerPageChange && ( )}
)} {data.length ? (
{data.map((item, index) => ( {renderCard(item, index)} ))}
) : ( {emptyText} )}
{`Halaman ${currentPage} dari ${totalPages}`}
); }