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