"use client" import { useMemo, useState } from "react" import { Card } from "@/components/ui/card" import { SearchIcon } from "lucide-react" export interface Column { key: string label: string render: (row: T) => React.ReactNode } interface DataTableProps { data: T[] columns: Column[] searchPlaceholder?: string searchKeys?: (keyof T)[] } export function DataTable({ data, columns, searchPlaceholder = "Поиск…", searchKeys = [], }: DataTableProps) { const [search, setSearch] = useState("") const filtered = useMemo(() => { if (!search || searchKeys.length === 0) return data const s = search.toLowerCase() return data.filter((row) => searchKeys.some((k) => String(row[k]).toLowerCase().includes(s)), ) }, [data, search, searchKeys]) return (
setSearch(e.target.value)} />
{filtered.length} записей
{columns.map((col) => ( ))} {filtered.map((row) => ( {columns.map((col) => ( ))} ))}
{col.label}
{col.render(row)}
) }