Remove columns configurator usage to project-explorer, use provided keys when mapping...
authorMichal Klobukowski <michal.klobukowski@contractors.roche.com>
Thu, 14 Jun 2018 14:37:44 +0000 (16:37 +0200)
committerMichal Klobukowski <michal.klobukowski@contractors.roche.com>
Thu, 14 Jun 2018 14:37:44 +0000 (16:37 +0200)
Feature #13601

Arvados-DCO-1.1-Signed-off-by: Michal Klobukowski <michal.klobukowski@contractors.roche.com>

src/components/data-explorer/column.ts
src/components/data-explorer/data-explorer.tsx
src/components/project-explorer/project-explorer.tsx

index 6681f63b4c1a3571cbe9136db0c3bfbbbeb9fc51..53ac7b001f412fa4288c7114f38d1c7459007158 100644 (file)
@@ -6,6 +6,7 @@ export interface Column<T> {
     header: string;
     selected: boolean;
     configurable?: boolean;
+    key?: React.Key;
     render: (item: T) => React.ReactElement<void>;
     renderHeader?: () => React.ReactElement<void>;
 }
index 05c157f20869c930bd3b742c528b02d30835c5f7..229a0905ed294fdd17b733466e5174c4da773649 100644 (file)
@@ -18,47 +18,42 @@ class DataExplorer<T> extends React.Component<DataExplorerProps<T> & WithStyles<
     render() {
         const { items, columns, classes, onItemClick, onColumnToggle } = this.props;
         return (
-            <div>
-                <Grid container justify="flex-end">
-                    <ColumnsConfigurator {...{ columns, onColumnToggle }} />
-                </Grid>
-                <div className={classes.tableContainer}>
-                    {
-                        items.length > 0 ? (
-                            <Table>
-                                <TableHead>
-                                    <TableRow>
-                                        {
-                                            columns.filter(column => column.selected).map(({ header, renderHeader }, index) => (
-                                                <TableCell key={index}>
-                                                    {renderHeader ? renderHeader() : header}
-                                                </TableCell>
-                                            ))
-                                        }
-                                    </TableRow>
-                                </TableHead>
-                                <TableBody className={classes.tableBody}>
+            <div className={classes.tableContainer}>
+                {
+                    items.length > 0 ? (
+                        <Table>
+                            <TableHead>
+                                <TableRow>
                                     {
-                                        items.map((item, index) => (
-                                            <TableRow key={index} hover onClick={() => onItemClick && onItemClick(item)}>
-                                                {
-                                                    columns.filter(column => column.selected).map((column, index) => (
-                                                        <TableCell key={index}>
-                                                            {column.render(item)}
-                                                        </TableCell>
-                                                    ))
-                                                }
-                                            </TableRow>
+                                        columns.filter(column => column.selected).map(({ header, renderHeader, key }, index) => (
+                                            <TableCell key={key || index}>
+                                                {renderHeader ? renderHeader() : header}
+                                            </TableCell>
                                         ))
                                     }
-                                </TableBody>
-                            </Table>
-                        ) : (
-                                <Typography>No items</Typography>
-                            )
-                    }
+                                </TableRow>
+                            </TableHead>
+                            <TableBody className={classes.tableBody}>
+                                {
+                                    items.map((item, index) => (
+                                        <TableRow key={index} hover onClick={() => onItemClick && onItemClick(item)}>
+                                            {
+                                                columns.filter(column => column.selected).map((column, index) => (
+                                                    <TableCell key={index}>
+                                                        {column.render(item)}
+                                                    </TableCell>
+                                                ))
+                                            }
+                                        </TableRow>
+                                    ))
+                                }
+                            </TableBody>
+                        </Table>
+                    ) : (
+                            <Typography>No items</Typography>
+                        )
+                }
 
-                </div>
             </div>
         );
     }
index 18910bf2e2113b63a316635969c9088d95f2091b..7b8565b546b398a93b414e1b94b7042e157afe66 100644 (file)
@@ -4,6 +4,7 @@
 
 import * as React from 'react';
 import DataExplorer, { DataExplorerProps } from "../../components/data-explorer/data-explorer";
+import ColumnsConfigurator from "../../components/data-explorer/columns-configurator/columns-configurator";
 import { Typography, Grid, ListItem, Divider, List, ListItemIcon, ListItemText } from '@material-ui/core';
 import { Column } from '../../components/data-explorer/column';
 import IconButton, { IconButtonProps } from '@material-ui/core/IconButton';
@@ -89,9 +90,17 @@ class ProjectExplorer extends React.Component<ProjectExplorerProps, ProjectExplo
             },
             {
                 header: "Actions",
+                key: "Actions",
                 selected: true,
                 configurable: false,
-                renderHeader: () => <span/>,
+                renderHeader: () => (
+                    <Grid container justify="flex-end">
+                        <ColumnsConfigurator
+                            columns={this.state.columns}
+                            onColumnToggle={this.toggleColumn}
+                        />
+                    </Grid>
+                ),
                 render: item => (
                     <Grid container justify="flex-end">
                         <Popover triggerComponent={ItemActionsTrigger}>