22159: changed render param type and applied casts
[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     ResourceOwnerWithName,
20     ResourcePortableDataHash,
21     ResourceTrashDate,
22     ResourceType,
23     ResourceUUID,
24     ResourceVersion,
25     renderName,
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: (resource)=> renderName(resource as ProjectResource),
59     },
60     {
61         name: ProjectPanelDataColumnNames.TYPE,
62         selected: true,
63         configurable: true,
64         filters: getInitialDataResourceTypeFilters(),
65         render: (uuid) => {
66         return <ResourceType uuid={uuid as string} />},
67     },
68     {
69         name: ProjectPanelDataColumnNames.OWNER,
70         selected: false,
71         configurable: true,
72         filters: createTree(),
73         render: (uuid) => <ResourceOwnerWithName uuid={uuid as string} />,
74     },
75     {
76         name: ProjectPanelDataColumnNames.PORTABLE_DATA_HASH,
77         selected: false,
78         configurable: true,
79         filters: createTree(),
80         render: (uuid) => <ResourcePortableDataHash uuid={uuid as string} />,
81     },
82     {
83         name: ProjectPanelDataColumnNames.FILE_SIZE,
84         selected: true,
85         configurable: true,
86         filters: createTree(),
87         render: (uuid) => <ResourceFileSize uuid={uuid as string} />,
88     },
89     {
90         name: ProjectPanelDataColumnNames.FILE_COUNT,
91         selected: false,
92         configurable: true,
93         filters: createTree(),
94         render: (uuid) => <ResourceFileCount uuid={uuid as string} />,
95     },
96     {
97         name: ProjectPanelDataColumnNames.UUID,
98         selected: false,
99         configurable: true,
100         filters: createTree(),
101         render: (uuid) => <ResourceUUID uuid={uuid as string} />,
102     },
103     {
104         name: ProjectPanelDataColumnNames.MODIFIED_BY_USER_UUID,
105         selected: false,
106         configurable: true,
107         filters: createTree(),
108         render: (uuid) => <ResourceModifiedByUserUuid uuid={uuid as string} />,
109     },
110     {
111         name: ProjectPanelDataColumnNames.VERSION,
112         selected: false,
113         configurable: true,
114         filters: createTree(),
115         render: (uuid) => <ResourceVersion uuid={uuid as string} />,
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 as string} />,
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 as string} />,
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 as string} />,
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 as string} />,
148     },
149 ];
150
151 const DEFAULT_VIEW_MESSAGES = ['No data found'];
152
153 interface ProjectPanelDataProps {
154     paperClassName?: string;
155     onRowClick: (uuid: string) => void;
156     onRowDoubleClick: (uuid: string) => void;
157     onContextMenu: (event: React.MouseEvent<HTMLElement>, resourceUuid: string) => void;
158 };
159
160 export const ProjectPanelData = class extends React.Component<ProjectPanelDataProps> {
161     render () {
162         return <DataExplorer
163             id={PROJECT_PANEL_DATA_ID}
164             onRowClick={this.props.onRowClick}
165             onRowDoubleClick={this.props.onRowDoubleClick}
166             onContextMenu={this.props.onContextMenu}
167             contextMenuColumn={false}
168             defaultViewIcon={ProjectIcon}
169             defaultViewMessages={DEFAULT_VIEW_MESSAGES}
170             paperClassName={this.props.paperClassName}
171         />;
172     }
173 };