// Copyright (C) The Arvados Authors. All rights reserved. // // SPDX-License-Identifier: AGPL-3.0 import * as React from 'react'; import { Table, TableBody, TableRow, TableCell, TableHead, TableSortLabel, StyleRulesCallback, Theme, WithStyles, withStyles, Typography } from '@material-ui/core'; import { DataColumn } from './data-column'; import DataTableFilters from "../data-table-filters/data-table-filters"; export type DataColumns = Array>; export interface DataTableProps { items: T[]; columns: DataColumns; onRowClick?: (event: React.MouseEvent, item: T) => void; onRowContextMenu?: (event: React.MouseEvent, item: T) => void; } class DataTable extends React.Component & WithStyles> { render() { const { items, columns, classes, onRowClick, onRowContextMenu } = this.props; return
{items.length > 0 ? {columns .filter(column => column.selected) .map(({ name, renderHeader, key, sortDirection, onSortToggle, filters, onFiltersChange }, index) => {renderHeader ? renderHeader() : filters ? {name} : onSortToggle && onSortToggle()}> {name} } )} {items .map((item, index) => onRowClick && onRowClick(event, item)} onContextMenu={event => onRowContextMenu && onRowContextMenu(event, item)}> {columns .filter(column => column.selected) .map((column, index) => ( {column.render(item)} ))} )}
: No items }
; } } type CssRules = "tableBody" | "tableContainer" | "noItemsInfo"; const styles: StyleRulesCallback = (theme: Theme) => ({ tableContainer: { overflowX: 'auto' }, tableBody: { background: theme.palette.background.paper }, noItemsInfo: { textAlign: "center", padding: theme.spacing.unit } }); export default withStyles(styles)(DataTable);