"use client"; import { useMemo, useState } from "react"; import { PageHeader, DataTable, EmptyState, Input } from "@/components/ds"; import { Search } from "lucide-react"; export type BeautyTableColumn = { key: string; header: string; className?: string; render?: (row: Record) => React.ReactNode; searchable?: boolean; }; export function BeautyTablePage({ title, description, columns, rows, empty, actions, searchPlaceholder = "جستجو…", filterFn, }: { title: string; description?: string; columns: BeautyTableColumn[]; rows: Record[]; empty?: React.ReactNode; actions?: React.ReactNode; searchPlaceholder?: string; filterFn?: (row: Record, query: string) => boolean; }) { const [query, setQuery] = useState(""); const filtered = useMemo(() => { const q = query.trim().toLowerCase(); if (!q) return rows; if (filterFn) return rows.filter((r) => filterFn(r, q)); return rows.filter((r) => columns.some((c) => { if (c.searchable === false) return false; const val = r[c.key]; return val != null && String(val).toLowerCase().includes(q); }) ); }, [rows, query, columns, filterFn]); return (
setQuery(e.target.value)} placeholder={searchPlaceholder} className="pr-10" />
} />
); }