46 lines
1.3 KiB
TypeScript
46 lines
1.3 KiB
TypeScript
import React from 'react';
|
|
import { ListItem, FilterOptions } from '../../types';
|
|
export interface TableColumn {
|
|
key: string;
|
|
label: string;
|
|
sortable?: boolean;
|
|
filterable?: boolean;
|
|
width?: string | number;
|
|
render?: (value: any, item: ListItem) => React.ReactNode;
|
|
}
|
|
export interface TableAction {
|
|
key: string;
|
|
label: string;
|
|
icon?: React.ReactNode;
|
|
color?: string;
|
|
onClick: (item: ListItem) => void;
|
|
show?: (item: ListItem) => boolean;
|
|
}
|
|
export interface DataTableProps {
|
|
data: ListItem[];
|
|
columns: TableColumn[];
|
|
loading?: boolean;
|
|
error?: string | null;
|
|
title?: string;
|
|
total?: number;
|
|
page?: number;
|
|
pageSize?: number;
|
|
onPageChange?: (page: number) => void;
|
|
onAdd?: () => void;
|
|
onEdit?: (item: ListItem) => void;
|
|
onDelete?: (item: ListItem) => Promise<void>;
|
|
onRefresh?: () => void;
|
|
customActions?: TableAction[];
|
|
searchable?: boolean;
|
|
filterable?: boolean;
|
|
filters?: FilterOptions;
|
|
onFiltersChange?: (filters: FilterOptions) => void;
|
|
withBorder?: boolean;
|
|
withColumnBorders?: boolean;
|
|
striped?: boolean;
|
|
highlightOnHover?: boolean;
|
|
emptyMessage?: string;
|
|
}
|
|
declare const DataTable: React.FC<DataTableProps>;
|
|
export default DataTable;
|