17782: Fixes absolute import paths from '~/somedir/...' to 'somedir/...'
[arvados.git] / src / views / subprocess-panel / subprocess-panel-root.tsx
index 770139e0fd18dd472c303c8f7fd9b08866697716..5c8f0ab84c95878ed6d1c0a9931fc8be6b7ecc45 100644 (file)
@@ -3,23 +3,26 @@
 // SPDX-License-Identifier: AGPL-3.0
 
 import * as React from 'react';
-import { DataExplorer } from "~/views-components/data-explorer/data-explorer";
-import { DataColumns } from '~/components/data-table/data-table';
-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 { ResourceLastModifiedDate, ProcessStatus } from '~/views-components/data-explorer/renderers';
-import { ProcessIcon } from '~/components/icon/icon';
-import { ResourceName } from '~/views-components/data-explorer/renderers';
-import { SUBPROCESS_PANEL_ID } from '~/store/subprocess-panel/subprocess-panel-actions';
-import { DataTableDefaultView } from '~/components/data-table-default-view/data-table-default-view';
-import { createTree } from '~/models/tree';
+import { DataExplorer } from "views-components/data-explorer/data-explorer";
+import { DataColumns } from 'components/data-table/data-table';
+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 { ResourceCreatedAtDate, ProcessStatus, ContainerRunTime } from 'views-components/data-explorer/renderers';
+import { ProcessIcon } from 'components/icon/icon';
+import { ResourceName } from 'views-components/data-explorer/renderers';
+import { SUBPROCESS_PANEL_ID } from 'store/subprocess-panel/subprocess-panel-actions';
+import { DataTableDefaultView } from 'components/data-table-default-view/data-table-default-view';
+import { createTree } from 'models/tree';
+import { getInitialProcessStatusFilters } from 'store/resource-type-filters/resource-type-filters';
+import { ResourcesState } from 'store/resources/resources';
 
 export enum SubprocessPanelColumnNames {
     NAME = "Name",
     STATUS = "Status",
-    LAST_MODIFIED = "Last modified"
+    CREATED_AT = "Created At",
+    RUNTIME = "Run Time"
 }
 
 export interface SubprocessPanelFilter extends DataTableFilterItem {
@@ -36,39 +39,57 @@ export const subprocessPanelColumns: DataColumns<string> = [
         render: uuid => <ResourceName uuid={uuid} />
     },
     {
-        name: "Status",
+        name: SubprocessPanelColumnNames.STATUS,
         selected: true,
         configurable: true,
-        filters: createTree(),
+        mutuallyExclusiveFilters: true,
+        filters: getInitialProcessStatusFilters(),
         render: uuid => <ProcessStatus uuid={uuid} />,
     },
     {
-        name: SubprocessPanelColumnNames.LAST_MODIFIED,
+        name: SubprocessPanelColumnNames.CREATED_AT,
         selected: true,
         configurable: true,
         sortDirection: SortDirection.DESC,
         filters: createTree(),
-        render: uuid => <ResourceLastModifiedDate uuid={uuid} />
+        render: uuid => <ResourceCreatedAtDate uuid={uuid} />
+    },
+    {
+        name: SubprocessPanelColumnNames.RUNTIME,
+        selected: true,
+        configurable: true,
+        filters: createTree(),
+        render: uuid => <ContainerRunTime uuid={uuid} />
     }
 ];
 
-export interface SubprocessActionProps {
+export interface SubprocessPanelDataProps {
+    resources: ResourcesState;
+}
+
+export interface SubprocessPanelActionProps {
     onItemClick: (item: string) => void;
-    onContextMenu: (event: React.MouseEvent<HTMLElement>, item: string) => void;
+    onContextMenu: (event: React.MouseEvent<HTMLElement>, item: string, resources: ResourcesState) => void;
     onItemDoubleClick: (item: string) => void;
 }
 
-export const SubprocessPanelRoot = (props: SubprocessActionProps) => {
+type SubprocessPanelProps = SubprocessPanelActionProps & SubprocessPanelDataProps;
+
+const DEFAULT_VIEW_MESSAGES = [
+    'No subprocesses available for listing.',
+    'The current process may not have any or none matches current filtering.'
+];
+
+export const SubprocessPanelRoot = (props: SubprocessPanelProps) => {
     return <DataExplorer
         id={SUBPROCESS_PANEL_ID}
         onRowClick={props.onItemClick}
         onRowDoubleClick={props.onItemDoubleClick}
-        onContextMenu={props.onContextMenu}
+        onContextMenu={(event, item) => props.onContextMenu(event, item, props.resources)}
         contextMenuColumn={true}
-        hideColumnSelector
         dataTableDefaultView={
             <DataTableDefaultView
                 icon={ProcessIcon}
-                messages={['This process has no subprocesses.']} />
+                messages={DEFAULT_VIEW_MESSAGES} />
         } />;
 };
\ No newline at end of file