// Copyright (C) The Arvados Authors. All rights reserved. // // SPDX-License-Identifier: AGPL-3.0 import * as React from 'react'; import { DataTable, DataTableProps, Column, ColumnsConfigurator } from "../../components/data-table"; import { Typography, Grid, ListItem, Divider, List, ListItemIcon, ListItemText } from '@material-ui/core'; import IconButton, { IconButtonProps } from '@material-ui/core/IconButton'; import MoreVertIcon from "@material-ui/icons/MoreVert"; import Popover from '../popover/popover'; export interface DataItem { name: string; type: string; owner: string; lastModified: string; fileSize?: number; status?: string; } interface DataExplorerProps { items: DataItem[]; onItemClick: (item: DataItem) => void; } type DataExplorerState = Pick, "columns">; class DataExplorer extends React.Component { state: DataExplorerState = { columns: [ { header: "Name", selected: true, render: item => ( this.props.onItemClick(item)} > {renderIcon(item)} {item.name} ) }, { header: "Status", selected: true, render: item => ( {item.status || "-"} ) }, { header: "Type", selected: true, render: item => ( {item.type} ) }, { header: "Owner", selected: true, render: item => ( {item.owner} ) }, { header: "File size", selected: true, render: ({ fileSize }) => ( {typeof fileSize === "number" ? formatFileSize(fileSize) : "-"} ) }, { header: "Last modified", selected: true, render: item => ( {formatDate(item.lastModified)} ) }, { header: "Actions", key: "Actions", selected: true, configurable: false, renderHeader: () => ( ), render: item => ( {[ { icon: "fas fa-users", label: "Share" }, { icon: "fas fa-sign-out-alt", label: "Move to" }, { icon: "fas fa-star", label: "Add to favourite" }, { icon: "fas fa-edit", label: "Rename" }, { icon: "fas fa-copy", label: "Make a copy" }, { icon: "fas fa-download", label: "Download" }].map(renderAction) } < Divider /> { renderAction({ icon: "fas fa-trash-alt", label: "Remove" }) } ) } ] }; render() { return ( ); } toggleColumn = (column: Column) => { const index = this.state.columns.indexOf(column); const columns = this.state.columns.slice(0); columns.splice(index, 1, { ...column, selected: !column.selected }); this.setState({ columns }); } } const formatDate = (isoDate: string) => { const date = new Date(isoDate); return date.toLocaleString(); }; const formatFileSize = (size: number) => { switch (true) { case size > 1000000000000: return `${size / 1000000000000} TB`; case size > 1000000000: return `${size / 1000000000} GB`; case size > 1000000: return `${size / 1000000} MB`; case size > 1000: return `${size / 1000} KB`; default: return `${size} B`; } }; const renderIcon = (DataItem: DataItem) => { switch (DataItem.type) { case "arvados#group": return ; case "arvados#groupList": return ; default: return ; } }; const renderAction = (action: { label: string, icon: string }, index?: number) => ( {action.label} ); const ItemActionsTrigger: React.SFC = (props) => ( ); export default DataExplorer;