X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/a918d09702ac7b1ac111ea12ded1cdb2bd801e88..a781af5eae4f4e7f6e07a2b205ad4e54e9e8ec7a:/src/views/project-panel/project-panel.tsx diff --git a/src/views/project-panel/project-panel.tsx b/src/views/project-panel/project-panel.tsx index ff3dd9c8dd..e34ea1ecda 100644 --- a/src/views/project-panel/project-panel.tsx +++ b/src/views/project-panel/project-panel.tsx @@ -4,27 +4,37 @@ import * as React from 'react'; import { ProjectPanelItem } from './project-panel-item'; -import { Grid, Typography, Button, Toolbar, StyleRulesCallback, WithStyles, withStyles } from '@material-ui/core'; +import { Grid, Typography, Button, StyleRulesCallback, WithStyles, withStyles } from '@material-ui/core'; import { formatDate, formatFileSize } from '../../common/formatters'; import DataExplorer from "../../views-components/data-explorer/data-explorer"; -import { ContextMenuAction } from '../../components/context-menu/context-menu'; import { DispatchProp, connect } from 'react-redux'; -import actions from "../../store/data-explorer/data-explorer-action"; import { DataColumns } from '../../components/data-table/data-table'; -import { ResourceKind } from "../../models/resource"; import { RouteComponentProps } from 'react-router'; import { RootState } from '../../store/store'; +import { DataTableFilterItem } from '../../components/data-table-filters/data-table-filters'; +import { ContainerRequestState } from '../../models/container-request'; +import { SortDirection } from '../../components/data-table/data-column'; +import { ResourceKind } from '../../models/resource'; +import { resourceLabel } from '../../common/labels'; export const PROJECT_PANEL_ID = "projectPanel"; +export interface ProjectPanelFilter extends DataTableFilterItem { + type: ResourceKind | ContainerRequestState; +} + type ProjectPanelProps = { currentItemId: string, onItemClick: (item: ProjectPanelItem) => void, + onContextMenu: (event: React.MouseEvent, item: ProjectPanelItem) => void; + onDialogOpen: (ownerUuid: string) => void; + onItemDoubleClick: (item: ProjectPanelItem) => void, onItemRouteChange: (itemId: string) => void } & DispatchProp & WithStyles & RouteComponentProps<{ id: string }>; + class ProjectPanel extends React.Component { render() { return
@@ -35,15 +45,16 @@ class ProjectPanel extends React.Component { -
; + onRowDoubleClick={this.props.onItemDoubleClick} + onContextMenu={this.props.onContextMenu} + extractKey={(item: ProjectPanelItem) => item.uuid} /> ; } @@ -52,11 +63,6 @@ class ProjectPanel extends React.Component { this.props.onItemRouteChange(match.params.id); } } - - executeAction = (action: ContextMenuAction, item: ProjectPanelItem) => { - alert(`Executing ${action.name} on ${item.name}`); - } - } type CssRules = "toolbar" | "button"; @@ -68,7 +74,7 @@ const styles: StyleRulesCallback = theme => ({ }, button: { marginLeft: theme.spacing.unit - } + }, }); const renderName = (item: ProjectPanelItem) => @@ -90,10 +96,12 @@ const renderName = (item: ProjectPanelItem) => const renderIcon = (item: ProjectPanelItem) => { switch (item.kind) { - case ResourceKind.PROJECT: + case ResourceKind.Project: return ; - case ResourceKind.COLLECTION: - return ; + case ResourceKind.Collection: + return ; + case ResourceKind.Process: + return ; default: return ; } @@ -114,80 +122,87 @@ const renderOwner = (owner: string) => {owner} ; -const renderType = (type: string) => - - {type} +const renderType = (type: string) => { + return + {resourceLabel(type)} ; +}; const renderStatus = (item: ProjectPanelItem) => {item.status || "-"} ; -export const columns: DataColumns = [{ - name: "Name", +export enum ProjectPanelColumnNames { + Name = "Name", + Status = "Status", + Type = "Type", + Owner = "Owner", + FileSize = "File size", + LastModified = "Last modified" + +} + +export const columns: DataColumns = [{ + name: ProjectPanelColumnNames.Name, selected: true, - sortDirection: "desc", + sortDirection: SortDirection.Asc, render: renderName, width: "450px" }, { name: "Status", selected: true, + filters: [{ + name: ContainerRequestState.Committed, + selected: true, + type: ContainerRequestState.Committed + }, { + name: ContainerRequestState.Final, + selected: true, + type: ContainerRequestState.Final + }, { + name: ContainerRequestState.Uncommitted, + selected: true, + type: ContainerRequestState.Uncommitted + }], render: renderStatus, width: "75px" }, { - name: "Type", + name: ProjectPanelColumnNames.Type, selected: true, filters: [{ - name: "Collection", - selected: true + name: resourceLabel(ResourceKind.Collection), + selected: true, + type: ResourceKind.Collection + }, { + name: resourceLabel(ResourceKind.Process), + selected: true, + type: ResourceKind.Process }, { - name: "Project", - selected: true + name: resourceLabel(ResourceKind.Project), + selected: true, + type: ResourceKind.Project }], render: item => renderType(item.kind), width: "125px" }, { - name: "Owner", + name: ProjectPanelColumnNames.Owner, selected: true, render: item => renderOwner(item.owner), width: "200px" }, { - name: "File size", + name: ProjectPanelColumnNames.FileSize, selected: true, render: item => renderFileSize(item.fileSize), width: "50px" }, { - name: "Last modified", + name: ProjectPanelColumnNames.LastModified, selected: true, - sortDirection: "none", + sortDirection: SortDirection.None, render: item => renderDate(item.lastModified), width: "150px" }]; -const contextMenuActions = [[{ - icon: "fas fa-users fa-fw", - name: "Share" -}, { - icon: "fas fa-sign-out-alt fa-fw", - name: "Move to" -}, { - icon: "fas fa-star fa-fw", - name: "Add to favourite" -}, { - icon: "fas fa-edit fa-fw", - name: "Rename" -}, { - icon: "fas fa-copy fa-fw", - name: "Make a copy" -}, { - icon: "fas fa-download fa-fw", - name: "Download" -}], [{ - icon: "fas fa-trash-alt fa-fw", - name: "Remove" -} -]]; export default withStyles(styles)( connect((state: RootState) => ({ currentItemId: state.projects.currentItemId }))(