sync: migrate erp-mvp to Gitea (2026-08-10)
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
import type { ReactNode } from 'react';
|
||||
|
||||
import { EmptyState } from './ui/EmptyState';
|
||||
|
||||
export type TableColumn<TItem> = {
|
||||
key: string;
|
||||
label: string;
|
||||
render: (item: TItem) => ReactNode;
|
||||
};
|
||||
|
||||
type DataTableProps<TItem> = {
|
||||
items: TItem[];
|
||||
columns: TableColumn<TItem>[];
|
||||
getRowKey: (item: TItem) => string;
|
||||
actions?: (item: TItem) => ReactNode;
|
||||
emptyTitle?: string;
|
||||
emptyDescription?: string;
|
||||
};
|
||||
|
||||
export function DataTable<TItem>({
|
||||
items,
|
||||
columns,
|
||||
getRowKey,
|
||||
actions,
|
||||
emptyTitle,
|
||||
emptyDescription,
|
||||
}: DataTableProps<TItem>) {
|
||||
return (
|
||||
<div className="overflow-hidden rounded-md border border-slate-200 bg-white shadow-sm">
|
||||
<div className="overflow-x-auto">
|
||||
<table className="min-w-full divide-y divide-slate-200 text-sm">
|
||||
<thead className="bg-slate-50">
|
||||
<tr>
|
||||
{columns.map((column) => (
|
||||
<th key={column.key} className="whitespace-nowrap px-4 py-3 text-left text-xs font-semibold uppercase text-slate-500">
|
||||
{column.label}
|
||||
</th>
|
||||
))}
|
||||
{actions && <th className="whitespace-nowrap px-4 py-3 text-right text-xs font-semibold uppercase text-slate-500">Действия</th>}
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody className="divide-y divide-slate-200">
|
||||
{items.length === 0 ? (
|
||||
<tr>
|
||||
<td colSpan={columns.length + (actions ? 1 : 0)}>
|
||||
<EmptyState title={emptyTitle} description={emptyDescription} />
|
||||
</td>
|
||||
</tr>
|
||||
) : (
|
||||
items.map((item) => (
|
||||
<tr key={getRowKey(item)} className="align-top transition hover:bg-slate-50">
|
||||
{columns.map((column) => (
|
||||
<td key={column.key} className="px-4 py-3 text-slate-700">
|
||||
{column.render(item)}
|
||||
</td>
|
||||
))}
|
||||
{actions && <td className="px-4 py-3 text-right">{actions(item)}</td>}
|
||||
</tr>
|
||||
))
|
||||
)}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user