// 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, StyleRulesCallback, Theme, WithStyles, withStyles, Typography } from '@material-ui/core'; import { DataColumn } from './data-column'; export interface DataTableProps { items: T[]; columns: Array>; onItemClick?: (item: T) => void; } class DataTable extends React.Component & WithStyles> { render() { const { items, columns, classes, onItemClick } = this.props; return
{items.length > 0 ? {columns .filter(column => column.selected) .map(({ name, renderHeader, key }, index) => {renderHeader ? renderHeader() : name} )} {items .map((item, index) => onItemClick && onItemClick(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);