770139e0fd18dd472c303c8f7fd9b08866697716
[arvados-workbench2.git] / src / views / subprocess-panel / subprocess-panel-root.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 { DataColumns } from '~/components/data-table/data-table';
8 import { DataTableFilterItem } from '~/components/data-table-filters/data-table-filters';
9 import { ContainerRequestState } from '~/models/container-request';
10 import { SortDirection } from '~/components/data-table/data-column';
11 import { ResourceKind } from '~/models/resource';
12 import { ResourceLastModifiedDate, ProcessStatus } from '~/views-components/data-explorer/renderers';
13 import { ProcessIcon } from '~/components/icon/icon';
14 import { ResourceName } from '~/views-components/data-explorer/renderers';
15 import { SUBPROCESS_PANEL_ID } from '~/store/subprocess-panel/subprocess-panel-actions';
16 import { DataTableDefaultView } from '~/components/data-table-default-view/data-table-default-view';
17 import { createTree } from '~/models/tree';
18
19 export enum SubprocessPanelColumnNames {
20     NAME = "Name",
21     STATUS = "Status",
22     LAST_MODIFIED = "Last modified"
23 }
24
25 export interface SubprocessPanelFilter extends DataTableFilterItem {
26     type: ResourceKind | ContainerRequestState;
27 }
28
29 export const subprocessPanelColumns: DataColumns<string> = [
30     {
31         name: SubprocessPanelColumnNames.NAME,
32         selected: true,
33         configurable: true,
34         sortDirection: SortDirection.NONE,
35         filters: createTree(),
36         render: uuid => <ResourceName uuid={uuid} />
37     },
38     {
39         name: "Status",
40         selected: true,
41         configurable: true,
42         filters: createTree(),
43         render: uuid => <ProcessStatus uuid={uuid} />,
44     },
45     {
46         name: SubprocessPanelColumnNames.LAST_MODIFIED,
47         selected: true,
48         configurable: true,
49         sortDirection: SortDirection.DESC,
50         filters: createTree(),
51         render: uuid => <ResourceLastModifiedDate uuid={uuid} />
52     }
53 ];
54
55 export interface SubprocessActionProps {
56     onItemClick: (item: string) => void;
57     onContextMenu: (event: React.MouseEvent<HTMLElement>, item: string) => void;
58     onItemDoubleClick: (item: string) => void;
59 }
60
61 export const SubprocessPanelRoot = (props: SubprocessActionProps) => {
62     return <DataExplorer
63         id={SUBPROCESS_PANEL_ID}
64         onRowClick={props.onItemClick}
65         onRowDoubleClick={props.onItemDoubleClick}
66         onContextMenu={props.onContextMenu}
67         contextMenuColumn={true}
68         hideColumnSelector
69         dataTableDefaultView={
70             <DataTableDefaultView
71                 icon={ProcessIcon}
72                 messages={['This process has no subprocesses.']} />
73         } />;
74 };