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 { 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";
13 ResourceCreatedAtDate,
17 ResourceLastModifiedDate,
18 ResourceModifiedByUserUuid,
20 ResourceOwnerWithName,
21 ResourcePortableDataHash,
26 } from "views-components/data-explorer/renderers";
27 import { getInitialDataResourceTypeFilters } from "store/resource-type-filters/resource-type-filters";
29 export enum ProjectPanelDataColumnNames {
34 PORTABLE_DATA_HASH = 'Portable Data Hash',
35 FILE_SIZE = 'File Size',
36 FILE_COUNT = 'File Count',
38 CONTAINER_UUID = 'Container UUID',
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',
45 CREATED_AT = 'Date Created',
46 LAST_MODIFIED = 'Last Modified',
47 TRASH_AT = 'Trash at',
48 DELETE_AT = 'Delete at',
51 export const projectPanelDataColumns: DataColumns<string, ProjectResource> = [
53 name: ProjectPanelDataColumnNames.NAME,
56 sort: { direction: SortDirection.NONE, field: 'name' },
57 filters: createTree(),
58 render: (uuid) => <ResourceName uuid={uuid} />,
61 name: ProjectPanelDataColumnNames.TYPE,
64 filters: getInitialDataResourceTypeFilters(),
65 render: (uuid) => <ResourceType uuid={uuid} />,
68 name: ProjectPanelDataColumnNames.OWNER,
71 filters: createTree(),
72 render: (uuid) => <ResourceOwnerWithName uuid={uuid} />,
75 name: ProjectPanelDataColumnNames.PORTABLE_DATA_HASH,
78 filters: createTree(),
79 render: (uuid) => <ResourcePortableDataHash uuid={uuid} />,
82 name: ProjectPanelDataColumnNames.FILE_SIZE,
85 filters: createTree(),
86 render: (uuid) => <ResourceFileSize uuid={uuid} />,
89 name: ProjectPanelDataColumnNames.FILE_COUNT,
92 filters: createTree(),
93 render: (uuid) => <ResourceFileCount uuid={uuid} />,
96 name: ProjectPanelDataColumnNames.UUID,
99 filters: createTree(),
100 render: (uuid) => <ResourceUUID uuid={uuid} />,
103 name: ProjectPanelDataColumnNames.MODIFIED_BY_USER_UUID,
106 filters: createTree(),
107 render: (uuid) => <ResourceModifiedByUserUuid uuid={uuid} />,
110 name: ProjectPanelDataColumnNames.VERSION,
113 filters: createTree(),
114 render: (uuid) => <ResourceVersion uuid={uuid} />,
117 name: ProjectPanelDataColumnNames.CREATED_AT,
120 sort: { direction: SortDirection.NONE, field: 'createdAt' },
121 filters: createTree(),
122 render: (uuid) => <ResourceCreatedAtDate uuid={uuid} />,
125 name: ProjectPanelDataColumnNames.LAST_MODIFIED,
128 sort: { direction: SortDirection.DESC, field: 'modifiedAt' },
129 filters: createTree(),
130 render: (uuid) => <ResourceLastModifiedDate uuid={uuid} />,
133 name: ProjectPanelDataColumnNames.TRASH_AT,
136 sort: { direction: SortDirection.NONE, field: 'trashAt' },
137 filters: createTree(),
138 render: (uuid) => <ResourceTrashDate uuid={uuid} />,
141 name: ProjectPanelDataColumnNames.DELETE_AT,
144 sort: { direction: SortDirection.NONE, field: 'deleteAt' },
145 filters: createTree(),
146 render: (uuid) => <ResourceDeleteDate uuid={uuid} />,
150 const DEFAULT_VIEW_MESSAGES = ['No data found'];
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;
159 export const ProjectPanelData = class extends React.Component<ProjectPanelDataProps> {
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}