// Copyright (C) The Arvados Authors. All rights reserved. // // SPDX-License-Identifier: AGPL-3.0 import * as React from 'react'; import { DataTable, DataTableProps, DataColumn, ColumnSelector } from "../../components/data-table"; import { Typography, Grid, ListItem, Divider, List, ListItemIcon, ListItemText, Paper, Toolbar } from '@material-ui/core'; import IconButton, { IconButtonProps } from '@material-ui/core/IconButton'; import MoreVertIcon from "@material-ui/icons/MoreVert"; import Popover from '../popover/popover'; import { formatFileSize, formatDate } from '../../common/formatters'; import { DataItem } from './data-item'; interface DataExplorerProps { items: DataItem[]; onItemClick: (item: DataItem) => void; } type DataExplorerState = Pick, "columns">; class DataExplorer extends React.Component { state: DataExplorerState = { columns: [ { name: "Name", selected: true, render: item => this.renderName(item) }, { name: "Status", selected: true, render: item => renderStatus(item.status) }, { name: "Type", selected: true, render: item => renderType(item.type) }, { name: "Owner", selected: true, render: item => renderOwner(item.owner) }, { name: "File size", selected: true, render: (item) => renderFileSize(item.fileSize) }, { name: "Last modified", selected: true, render: item => renderDate(item.lastModified) }, { name: "Actions", selected: true, configurable: false, renderHeader: () => null, render: renderItemActions } ] }; render() { return ; } toggleColumn = (column: DataColumn) => { 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 }); } renderName = (item: DataItem) => this.props.onItemClick(item)}> {renderIcon(item)} {item.name} } const renderIcon = (dataItem: DataItem) => { switch (dataItem.type) { case "arvados#group": return ; case "arvados#groupList": return ; default: return ; } }; const renderDate = (date: string) => {formatDate(date)} ; const renderFileSize = (fileSize?: number) => {formatFileSize(fileSize)} ; const renderOwner = (owner: string) => {owner} ; const renderType = (type: string) => {type} ; const renderStatus = (status?: string) => {status || "-"} ; const renderItemActions = () => {[{ 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" })} ; const renderAction = (action: { label: string, icon: string }, index?: number) => {action.label} ; const ItemActionsTrigger: React.SFC = (props) => ; export default DataExplorer;