Merge branch '14528_advance_tab_action_for_ssh_key'
[arvados-workbench2.git] / src / views / search-results-panel / search-results-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 { SortDirection } from '~/components/data-table/data-column';
7 import { DataColumns } from '~/components/data-table/data-table';
8 import { DataTableFilterItem } from '~/components/data-table-filters/data-table-filters';
9 import { ResourceKind } from '~/models/resource';
10 import { ContainerRequestState } from '~/models/container-request';
11 import { resourceLabel } from '~/common/labels';
12 import { SearchBarAdvanceFormData } from '~/models/search-bar';
13 import { SEARCH_RESULTS_PANEL_ID } from '~/store/search-results-panel/search-results-panel-actions';
14 import { DataExplorer } from '~/views-components/data-explorer/data-explorer';
15 import {
16     ProcessStatus,
17     ResourceFileSize,
18     ResourceLastModifiedDate,
19     ResourceName,
20     ResourceOwner,
21     ResourceType
22 } from '~/views-components/data-explorer/renderers';
23 import { createTree } from '~/models/tree';
24 import { getInitialResourceTypeFilters } from '../../store/resource-type-filters/resource-type-filters';
25 // TODO: code clean up
26 export enum SearchResultsPanelColumnNames {
27     NAME = "Name",
28     PROJECT = "Project",
29     STATUS = "Status",
30     TYPE = 'Type',
31     OWNER = "Owner",
32     FILE_SIZE = "File size",
33     LAST_MODIFIED = "Last modified"
34 }
35
36 export interface SearchResultsPanelDataProps {
37     data: SearchBarAdvanceFormData;
38 }
39
40 export interface SearchResultsPanelActionProps {
41     onItemClick: (item: string) => void;
42     onContextMenu: (event: React.MouseEvent<HTMLElement>, item: string) => void;
43     onDialogOpen: (ownerUuid: string) => void;
44     onItemDoubleClick: (item: string) => void;
45 }
46
47 export type SearchResultsPanelProps = SearchResultsPanelDataProps & SearchResultsPanelActionProps;
48
49 export interface WorkflowPanelFilter extends DataTableFilterItem {
50     type: ResourceKind | ContainerRequestState;
51 }
52
53 export const searchResultsPanelColumns: DataColumns<string> = [
54     {
55         name: SearchResultsPanelColumnNames.NAME,
56         selected: true,
57         configurable: true,
58         sortDirection: SortDirection.ASC,
59         filters: createTree(),
60         render: (uuid: string) => <ResourceName uuid={uuid} />
61     },
62     {
63         name: SearchResultsPanelColumnNames.PROJECT,
64         selected: true,
65         configurable: true,
66         filters: createTree(),
67         render: uuid => <ResourceFileSize uuid={uuid} />
68     },
69     {
70         name: SearchResultsPanelColumnNames.STATUS,
71         selected: true,
72         configurable: true,
73         filters: createTree(),
74         render: uuid => <ProcessStatus uuid={uuid} />
75     },
76     {
77         name: SearchResultsPanelColumnNames.TYPE,
78         selected: true,
79         configurable: true,
80         filters: getInitialResourceTypeFilters(),
81         render: (uuid: string) => <ResourceType uuid={uuid} />,
82     },
83     {
84         name: SearchResultsPanelColumnNames.OWNER,
85         selected: true,
86         configurable: true,
87         filters: createTree(),
88         render: uuid => <ResourceOwner uuid={uuid} />
89     },
90     {
91         name: SearchResultsPanelColumnNames.FILE_SIZE,
92         selected: true,
93         configurable: true,
94         filters: createTree(),
95         render: uuid => <ResourceFileSize uuid={uuid} />
96     },
97     {
98         name: SearchResultsPanelColumnNames.LAST_MODIFIED,
99         selected: true,
100         configurable: true,
101         sortDirection: SortDirection.NONE,
102         filters: createTree(),
103         render: uuid => <ResourceLastModifiedDate uuid={uuid} />
104     }
105 ];
106
107 export const SearchResultsPanelView = (props: SearchResultsPanelProps) => {
108     return <DataExplorer
109         id={SEARCH_RESULTS_PANEL_ID}
110         onRowClick={props.onItemClick}
111         onRowDoubleClick={props.onItemDoubleClick}
112         onContextMenu={props.onContextMenu}
113         contextMenuColumn={true} />;
114 };