1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: AGPL-3.0
5 import * as React from 'react';
6 import { Table, TableBody, TableRow, TableCell, TableHead, StyleRulesCallback, Theme, WithStyles, withStyles, Typography, Grid } from '@material-ui/core';
7 import { Column } from './column';
8 import ColumnsConfigurator from "./columns-configurator/columns-configurator";
10 export interface DataExplorerProps<T> {
12 columns: Array<Column<T>>;
13 onColumnToggle: (column: Column<T>) => void;
14 onItemClick: (item: T) => void;
17 class DataExplorer<T> extends React.Component<DataExplorerProps<T> & WithStyles<CssRules>> {
19 const { items, columns, classes, onItemClick, onColumnToggle } = this.props;
22 <Grid container justify="flex-end">
23 <ColumnsConfigurator {...{ columns, onColumnToggle }} />
25 <div className={classes.tableContainer}>
32 columns.filter(column => column.selected).map((column, index) => (
33 <TableCell key={index}>{column.header}</TableCell>
38 <TableBody className={classes.tableBody}>
40 items.map((item, index) => (
41 <TableRow key={index} hover onClick={() => onItemClick(item)}>
43 columns.filter(column => column.selected).map((column, index) => (
44 <TableCell key={index}>
55 <Typography>No items</Typography>
65 type CssRules = "tableBody" | "tableContainer";
67 const styles: StyleRulesCallback<CssRules> = (theme: Theme) => ({
72 background: theme.palette.background.paper
76 export default withStyles(styles)(DataExplorer);