21225: Move progressWrapper to data explorer for conditional styles
[arvados.git] / services / workbench2 / src / views / project-panel / project-panel-data.tsx
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4
5 import React from "react";
6 import { ProjectIcon } from "components/icon/icon";
7 import { PROJECT_PANEL_DATA_ID } from "store/project-panel/project-panel-action-bind";
8 import { DataColumns } from 'components/data-table/data-table';
9 import { DataExplorer } from "views-components/data-explorer/data-explorer";
10 import { ProjectResource } from 'models/project';
11 import { SortDirection } from "components/data-table/data-column";
12 import { createTree } from "models/tree";
13 import {
14     ResourceCreatedAtDate,
15     ResourceDeleteDate,
16     ResourceFileCount,
17     ResourceFileSize,
18     ResourceLastModifiedDate,
19     ResourceModifiedByUserUuid,
20     ResourceName,
21     ResourceOwnerWithName,
22     ResourcePortableDataHash,
23     ResourceTrashDate,
24     ResourceType,
25     ResourceUUID,
26     ResourceVersion,
27 } from "views-components/data-explorer/renderers";
28 import { getInitialDataResourceTypeFilters } from "store/resource-type-filters/resource-type-filters";
29
30 export enum ProjectPanelDataColumnNames {
31     NAME = 'Name',
32     STATUS = 'Status',
33     TYPE = 'Type',
34     OWNER = 'Owner',
35     PORTABLE_DATA_HASH = 'Portable Data Hash',
36     FILE_SIZE = 'File Size',
37     FILE_COUNT = 'File Count',
38     UUID = 'UUID',
39     CONTAINER_UUID = 'Container UUID',
40     RUNTIME = 'Runtime',
41     OUTPUT_UUID = 'Output UUID',
42     LOG_UUID = 'Log UUID',
43     PARENT_PROCESS = 'Parent Process UUID',
44     MODIFIED_BY_USER_UUID = 'Modified by User UUID',
45     VERSION = 'Version',
46     CREATED_AT = 'Date Created',
47     LAST_MODIFIED = 'Last Modified',
48     TRASH_AT = 'Trash at',
49     DELETE_AT = 'Delete at',
50 }
51
52 export const projectPanelDataColumns: DataColumns<string, ProjectResource> = [
53     {
54         name: ProjectPanelDataColumnNames.NAME,
55         selected: true,
56         configurable: true,
57         sort: { direction: SortDirection.NONE, field: 'name' },
58         filters: createTree(),
59         render: (uuid) => <ResourceName uuid={uuid} />,
60     },
61     {
62         name: ProjectPanelDataColumnNames.TYPE,
63         selected: true,
64         configurable: true,
65         filters: getInitialDataResourceTypeFilters(),
66         render: (uuid) => <ResourceType uuid={uuid} />,
67     },
68     {
69         name: ProjectPanelDataColumnNames.OWNER,
70         selected: false,
71         configurable: true,
72         filters: createTree(),
73         render: (uuid) => <ResourceOwnerWithName uuid={uuid} />,
74     },
75     {
76         name: ProjectPanelDataColumnNames.PORTABLE_DATA_HASH,
77         selected: false,
78         configurable: true,
79         filters: createTree(),
80         render: (uuid) => <ResourcePortableDataHash uuid={uuid} />,
81     },
82     {
83         name: ProjectPanelDataColumnNames.FILE_SIZE,
84         selected: true,
85         configurable: true,
86         filters: createTree(),
87         render: (uuid) => <ResourceFileSize uuid={uuid} />,
88     },
89     {
90         name: ProjectPanelDataColumnNames.FILE_COUNT,
91         selected: false,
92         configurable: true,
93         filters: createTree(),
94         render: (uuid) => <ResourceFileCount uuid={uuid} />,
95     },
96     {
97         name: ProjectPanelDataColumnNames.UUID,
98         selected: false,
99         configurable: true,
100         filters: createTree(),
101         render: (uuid) => <ResourceUUID uuid={uuid} />,
102     },
103     {
104         name: ProjectPanelDataColumnNames.MODIFIED_BY_USER_UUID,
105         selected: false,
106         configurable: true,
107         filters: createTree(),
108         render: (uuid) => <ResourceModifiedByUserUuid uuid={uuid} />,
109     },
110     {
111         name: ProjectPanelDataColumnNames.VERSION,
112         selected: false,
113         configurable: true,
114         filters: createTree(),
115         render: (uuid) => <ResourceVersion uuid={uuid} />,
116     },
117     {
118         name: ProjectPanelDataColumnNames.CREATED_AT,
119         selected: false,
120         configurable: true,
121         sort: { direction: SortDirection.NONE, field: 'createdAt' },
122         filters: createTree(),
123         render: (uuid) => <ResourceCreatedAtDate uuid={uuid} />,
124     },
125     {
126         name: ProjectPanelDataColumnNames.LAST_MODIFIED,
127         selected: true,
128         configurable: true,
129         sort: { direction: SortDirection.DESC, field: 'modifiedAt' },
130         filters: createTree(),
131         render: (uuid) => <ResourceLastModifiedDate uuid={uuid} />,
132     },
133     {
134         name: ProjectPanelDataColumnNames.TRASH_AT,
135         selected: false,
136         configurable: true,
137         sort: { direction: SortDirection.NONE, field: 'trashAt' },
138         filters: createTree(),
139         render: (uuid) => <ResourceTrashDate uuid={uuid} />,
140     },
141     {
142         name: ProjectPanelDataColumnNames.DELETE_AT,
143         selected: false,
144         configurable: true,
145         sort: { direction: SortDirection.NONE, field: 'deleteAt' },
146         filters: createTree(),
147         render: (uuid) => <ResourceDeleteDate uuid={uuid} />,
148     },
149 ];
150
151 const DEFAULT_VIEW_MESSAGES = ['No data found'];
152
153 export const ProjectPanelData = class extends React.Component {
154     handleRowClick = () => {};
155     handleRowDoubleClick = () => {};
156     handleContextMenu = () => {};
157
158     render () {
159         return <DataExplorer
160             id={PROJECT_PANEL_DATA_ID}
161             onRowClick={this.handleRowClick}
162             onRowDoubleClick={this.handleRowDoubleClick}
163             onContextMenu={this.handleContextMenu}
164             contextMenuColumn={true}
165             defaultViewIcon={ProjectIcon}
166             defaultViewMessages={DEFAULT_VIEW_MESSAGES}
167         />;
168     }
169 };