ds-smart-ui
Version:
Smart UI is a React component library that helps you build accessible and responsive web applications.
59 lines (57 loc) • 3.32 kB
TypeScript
import { MRT_ColumnDef } from 'material-react-table';
import { ButtonColorTypes, ButtonVariantTypes } from '../../../types/button-types';
/**
* DataTable component to display tabular data with various features.
* It supports row selection, column virtualization, row virtualization, column pinning,
* row numbers, row actions, and detail buttons.
* @component
* @template T - Type of the data rows.
* @param {Object} props - Component properties.
* @param {MRT_ColumnDef<T>[]} props.columns - Array of column definitions.
* @param {T[]} props.rows - Array of data rows to display.
* @param {boolean} [props.enableRowSelection=true] - Whether to enable row selection.
* @param {boolean} [props.enableColumnVirtualization=false] - Whether to enable column virtualization.
* @param {boolean} [props.enableRowVirtualization=false] - Whether to enable row virtualization.
* @param {boolean} [props.enableColumnPinning=false] - Whether to enable column pinning.
* @param {boolean} [props.enableRowNumber=false] - Whether to display row numbers.
* @param {boolean} [props.enableRowActions=true] - Whether to enable row actions.
* @param {string[]} [props.leftPinnedColumns=[]] - Array of column keys to pin on the left.
* @param {string[]} [props.rightPinnedColumns=[]] - Array of column keys to pin on the right.
* @param {string} [props.labelDetailButton="Detail"] - Label for the detail button.
* @param {Object[]} [props.rowActionItems=[]] - Array of row action items with labels, click handlers, permissions, and optional conditions.
* @param {function} [props.onDetailChange] - Callback function when detail button is clicked.
* @param {boolean} [props.enableDetailButton=true] - Whether to enable the detail button.
* @param {string} [props.id] - Optional ID for the data table.
* @param {Object} rest - Additional properties to pass to the MaterialReactTable.
* @returns {JSX.Element} The DataTable component.
*/
type DataTableProps<T extends Record<string, unknown>> = {
columns: MRT_ColumnDef<T>[];
rows: T[];
enableRowSelection?: boolean;
enableColumnVirtualization?: boolean;
enableRowVirtualization?: boolean;
enableColumnPinning?: boolean;
enableRowNumber?: boolean;
enableRowActions?: boolean;
leftPinnedColumns?: string[];
rightPinnedColumns?: string[];
labelDetailButton?: string;
rowActionItems?: {
label: string;
onClick: (rowData: T) => void;
permission: boolean;
condition?: (rowData: T) => boolean;
variantMenu?: ButtonVariantTypes;
colorMenu?: ButtonColorTypes;
startIconMenu?: React.ReactNode;
endIconMenu?: React.ReactNode;
id?: string;
}[];
onDetailChange?: (rowData: T) => void;
enableDetailButton?: boolean;
id?: string;
uniqueRowIdentifier?: keyof T;
} & Partial<Record<string, unknown>>;
declare const DataTable: <T extends Record<string, unknown>>({ columns, rows, enableRowSelection, enableColumnVirtualization, enableRowVirtualization, enableColumnPinning, enableRowNumber, enableRowActions, leftPinnedColumns, rightPinnedColumns, rowActionItems, enableDetailButton, labelDetailButton, onDetailChange, id, uniqueRowIdentifier, ...rest }: DataTableProps<T>) => import("react/jsx-runtime").JSX.Element;
export default DataTable;