1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: AGPL-3.0
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";
14 ResourceCreatedAtDate,
18 ResourceLastModifiedDate,
19 ResourceModifiedByUserUuid,
21 ResourceOwnerWithName,
22 ResourcePortableDataHash,
27 } from "views-components/data-explorer/renderers";
28 import { getInitialDataResourceTypeFilters } from "store/resource-type-filters/resource-type-filters";
30 export enum ProjectPanelDataColumnNames {
35 PORTABLE_DATA_HASH = 'Portable Data Hash',
36 FILE_SIZE = 'File Size',
37 FILE_COUNT = 'File Count',
39 CONTAINER_UUID = 'Container UUID',
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',
46 CREATED_AT = 'Date Created',
47 LAST_MODIFIED = 'Last Modified',
48 TRASH_AT = 'Trash at',
49 DELETE_AT = 'Delete at',
52 export const projectPanelDataColumns: DataColumns<string, ProjectResource> = [
54 name: ProjectPanelDataColumnNames.NAME,
57 sort: { direction: SortDirection.NONE, field: 'name' },
58 filters: createTree(),
59 render: (uuid) => <ResourceName uuid={uuid} />,
62 name: ProjectPanelDataColumnNames.TYPE,
65 filters: getInitialDataResourceTypeFilters(),
66 render: (uuid) => <ResourceType uuid={uuid} />,
69 name: ProjectPanelDataColumnNames.OWNER,
72 filters: createTree(),
73 render: (uuid) => <ResourceOwnerWithName uuid={uuid} />,
76 name: ProjectPanelDataColumnNames.PORTABLE_DATA_HASH,
79 filters: createTree(),
80 render: (uuid) => <ResourcePortableDataHash uuid={uuid} />,
83 name: ProjectPanelDataColumnNames.FILE_SIZE,
86 filters: createTree(),
87 render: (uuid) => <ResourceFileSize uuid={uuid} />,
90 name: ProjectPanelDataColumnNames.FILE_COUNT,
93 filters: createTree(),
94 render: (uuid) => <ResourceFileCount uuid={uuid} />,
97 name: ProjectPanelDataColumnNames.UUID,
100 filters: createTree(),
101 render: (uuid) => <ResourceUUID uuid={uuid} />,
104 name: ProjectPanelDataColumnNames.MODIFIED_BY_USER_UUID,
107 filters: createTree(),
108 render: (uuid) => <ResourceModifiedByUserUuid uuid={uuid} />,
111 name: ProjectPanelDataColumnNames.VERSION,
114 filters: createTree(),
115 render: (uuid) => <ResourceVersion uuid={uuid} />,
118 name: ProjectPanelDataColumnNames.CREATED_AT,
121 sort: { direction: SortDirection.NONE, field: 'createdAt' },
122 filters: createTree(),
123 render: (uuid) => <ResourceCreatedAtDate uuid={uuid} />,
126 name: ProjectPanelDataColumnNames.LAST_MODIFIED,
129 sort: { direction: SortDirection.DESC, field: 'modifiedAt' },
130 filters: createTree(),
131 render: (uuid) => <ResourceLastModifiedDate uuid={uuid} />,
134 name: ProjectPanelDataColumnNames.TRASH_AT,
137 sort: { direction: SortDirection.NONE, field: 'trashAt' },
138 filters: createTree(),
139 render: (uuid) => <ResourceTrashDate uuid={uuid} />,
142 name: ProjectPanelDataColumnNames.DELETE_AT,
145 sort: { direction: SortDirection.NONE, field: 'deleteAt' },
146 filters: createTree(),
147 render: (uuid) => <ResourceDeleteDate uuid={uuid} />,
151 const DEFAULT_VIEW_MESSAGES = ['No data found'];
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;
160 export const ProjectPanelData = class extends React.Component<ProjectPanelDataProps> {
163 id={PROJECT_PANEL_DATA_ID}
164 onRowClick={this.props.onRowClick}
165 onRowDoubleClick={this.props.onRowDoubleClick}
166 onContextMenu={this.props.onContextMenu}
167 contextMenuColumn={true}
168 defaultViewIcon={ProjectIcon}
169 defaultViewMessages={DEFAULT_VIEW_MESSAGES}
170 paperClassName={this.props.paperClassName}