1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: AGPL-3.0
5 import * as React from 'react';
6 import { DataExplorer } from "~/views-components/data-explorer/data-explorer";
7 import { WorkflowIcon } from '~/components/icon/icon';
8 import { DataTableDefaultView } from '~/components/data-table-default-view/data-table-default-view';
9 import { WORKFLOW_PANEL_ID } from '~/store/workflow-panel/workflow-panel-actions';
11 ResourceLastModifiedDate,
13 ResourceWorkflowStatus,
15 } from "~/views-components/data-explorer/renderers";
16 import { SortDirection } from '~/components/data-table/data-column';
17 import { DataColumns } from '~/components/data-table/data-table';
18 import { DataTableFilterItem } from '~/components/data-table-filters/data-table-filters';
19 import { Grid, Paper } from '@material-ui/core';
20 import { WorkflowDetailsCard } from './workflow-description-card';
21 import { WorkflowResource } from '../../models/workflow';
22 import { createTree } from '~/models/tree';
24 export enum WorkflowPanelColumnNames {
26 AUTHORISATION = "Authorisation",
27 LAST_MODIFIED = "Last modified",
31 export interface WorkflowPanelFilter extends DataTableFilterItem {
35 export interface WorkflowPanelDataProps {
36 workflow?: WorkflowResource;
39 export interface WorfklowPanelActionProps {
40 handleRowDoubleClick: (workflowUuid: string) => void;
41 handleRowClick: (workflowUuid: string) => void;
44 export type WorkflowPanelProps = WorkflowPanelDataProps & WorfklowPanelActionProps;
46 export enum ResourceStatus {
52 const resourceStatus = (type: string) => {
54 case ResourceStatus.PUBLIC:
56 case ResourceStatus.PRIVATE:
58 case ResourceStatus.SHARED:
65 export const workflowPanelColumns: DataColumns<string> = [
67 name: WorkflowPanelColumnNames.NAME,
70 sortDirection: SortDirection.ASC,
71 filters: createTree(),
72 render: (uuid: string) => <RosurceWorkflowName uuid={uuid} />
75 name: WorkflowPanelColumnNames.AUTHORISATION,
78 filters: createTree(),
79 // TODO: restore filters
82 // name: resourceStatus(ResourceStatus.PUBLIC),
84 // type: ResourceStatus.PUBLIC
87 // name: resourceStatus(ResourceStatus.PRIVATE),
89 // type: ResourceStatus.PRIVATE
92 // name: resourceStatus(ResourceStatus.SHARED),
94 // type: ResourceStatus.SHARED
97 render: (uuid: string) => <ResourceWorkflowStatus uuid={uuid} />,
100 name: WorkflowPanelColumnNames.LAST_MODIFIED,
103 sortDirection: SortDirection.NONE,
104 filters: createTree(),
105 render: (uuid: string) => <ResourceLastModifiedDate uuid={uuid} />
111 filters: createTree(),
112 render: (uuid: string) => <ResourceShare uuid={uuid} />
116 export const WorkflowPanelView = (props: WorkflowPanelProps) => {
117 return <Grid container spacing={16} style={{minHeight: '500px'}}>
120 id={WORKFLOW_PANEL_ID}
121 onRowClick={props.handleRowClick}
122 onRowDoubleClick={props.handleRowDoubleClick}
123 contextMenuColumn={false}
124 onContextMenu={e => e}
125 dataTableDefaultView={<DataTableDefaultView icon={WorkflowIcon} />} />
128 <Paper style={{ height: '100%' }}>
129 <WorkflowDetailsCard workflow={props.workflow} />