Update filters in views so that the code can be compiled, leave TODO markers to guide...
[arvados-workbench2.git] / src / views / workflow-panel / workflow-panel-view.tsx
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4
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';
10 import {
11     ResourceLastModifiedDate,
12     RosurceWorkflowName,
13     ResourceWorkflowStatus,
14     ResourceShare
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';
23
24 export enum WorkflowPanelColumnNames {
25     NAME = "Name",
26     AUTHORISATION = "Authorisation",
27     LAST_MODIFIED = "Last modified",
28     SHARE = 'Share'
29 }
30
31 export interface WorkflowPanelFilter extends DataTableFilterItem {
32     type: ResourceStatus;
33 }
34
35 export interface WorkflowPanelDataProps {
36     workflow?: WorkflowResource;
37 }
38
39 export interface WorfklowPanelActionProps {
40     handleRowDoubleClick: (workflowUuid: string) => void;
41     handleRowClick: (workflowUuid: string) => void;
42 }
43
44 export type WorkflowPanelProps = WorkflowPanelDataProps & WorfklowPanelActionProps;
45
46 export enum ResourceStatus {
47     PUBLIC = "Public",
48     PRIVATE = "Private",
49     SHARED = "Shared"
50 }
51
52 const resourceStatus = (type: string) => {
53     switch (type) {
54         case ResourceStatus.PUBLIC:
55             return "Public";
56         case ResourceStatus.PRIVATE:
57             return "Private";
58         case ResourceStatus.SHARED:
59             return "Shared";
60         default:
61             return "Unknown";
62     }
63 };
64
65 export const workflowPanelColumns: DataColumns<string> = [
66     {
67         name: WorkflowPanelColumnNames.NAME,
68         selected: true,
69         configurable: true,
70         sortDirection: SortDirection.ASC,
71         filters: createTree(),
72         render: (uuid: string) => <RosurceWorkflowName uuid={uuid} />
73     },
74     {
75         name: WorkflowPanelColumnNames.AUTHORISATION,
76         selected: true,
77         configurable: true,
78         filters: createTree(),
79         // TODO: restore filters
80         // filters: [
81         //     {
82         //         name: resourceStatus(ResourceStatus.PUBLIC),
83         //         selected: true,
84         //         type: ResourceStatus.PUBLIC
85         //     },
86         //     {
87         //         name: resourceStatus(ResourceStatus.PRIVATE),
88         //         selected: true,
89         //         type: ResourceStatus.PRIVATE
90         //     },
91         //     {
92         //         name: resourceStatus(ResourceStatus.SHARED),
93         //         selected: true,
94         //         type: ResourceStatus.SHARED
95         //     }
96         // ],
97         render: (uuid: string) => <ResourceWorkflowStatus uuid={uuid} />,
98     },
99     {
100         name: WorkflowPanelColumnNames.LAST_MODIFIED,
101         selected: true,
102         configurable: true,
103         sortDirection: SortDirection.NONE,
104         filters: createTree(),
105         render: (uuid: string) => <ResourceLastModifiedDate uuid={uuid} />
106     },
107     {
108         name: '',
109         selected: true,
110         configurable: false,
111         filters: createTree(),
112         render: (uuid: string) => <ResourceShare uuid={uuid} />
113     }
114 ];
115
116 export const WorkflowPanelView = (props: WorkflowPanelProps) => {
117     return <Grid container spacing={16} style={{minHeight: '500px'}}>
118         <Grid item xs={6}>
119             <DataExplorer
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} />} />
126         </Grid>
127         <Grid item xs={6}>
128             <Paper style={{ height: '100%' }}>
129                 <WorkflowDetailsCard workflow={props.workflow} />
130             </Paper>
131         </Grid>
132     </Grid>;
133 };