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,
19 ResourceOwnerWithName,
20 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: (resource)=> renderName(resource as ProjectResource),
61 name: ProjectPanelDataColumnNames.TYPE,
64 filters: getInitialDataResourceTypeFilters(),
66 return <ResourceType uuid={uuid as string} />},
69 name: ProjectPanelDataColumnNames.OWNER,
72 filters: createTree(),
73 render: (uuid) => <ResourceOwnerWithName uuid={uuid as string} />,
76 name: ProjectPanelDataColumnNames.PORTABLE_DATA_HASH,
79 filters: createTree(),
80 render: (uuid) => <ResourcePortableDataHash uuid={uuid as string} />,
83 name: ProjectPanelDataColumnNames.FILE_SIZE,
86 filters: createTree(),
87 render: (uuid) => <ResourceFileSize uuid={uuid as string} />,
90 name: ProjectPanelDataColumnNames.FILE_COUNT,
93 filters: createTree(),
94 render: (uuid) => <ResourceFileCount uuid={uuid as string} />,
97 name: ProjectPanelDataColumnNames.UUID,
100 filters: createTree(),
101 render: (uuid) => <ResourceUUID uuid={uuid as string} />,
104 name: ProjectPanelDataColumnNames.MODIFIED_BY_USER_UUID,
107 filters: createTree(),
108 render: (uuid) => <ResourceModifiedByUserUuid uuid={uuid as string} />,
111 name: ProjectPanelDataColumnNames.VERSION,
114 filters: createTree(),
115 render: (uuid) => <ResourceVersion uuid={uuid as string} />,
118 name: ProjectPanelDataColumnNames.CREATED_AT,
121 sort: { direction: SortDirection.NONE, field: 'createdAt' },
122 filters: createTree(),
123 render: (uuid) => <ResourceCreatedAtDate uuid={uuid as string} />,
126 name: ProjectPanelDataColumnNames.LAST_MODIFIED,
129 sort: { direction: SortDirection.DESC, field: 'modifiedAt' },
130 filters: createTree(),
131 render: (uuid) => <ResourceLastModifiedDate uuid={uuid as string} />,
134 name: ProjectPanelDataColumnNames.TRASH_AT,
137 sort: { direction: SortDirection.NONE, field: 'trashAt' },
138 filters: createTree(),
139 render: (uuid) => <ResourceTrashDate uuid={uuid as string} />,
142 name: ProjectPanelDataColumnNames.DELETE_AT,
145 sort: { direction: SortDirection.NONE, field: 'deleteAt' },
146 filters: createTree(),
147 render: (uuid) => <ResourceDeleteDate uuid={uuid as string} />,
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={false}
168 defaultViewIcon={ProjectIcon}
169 defaultViewMessages={DEFAULT_VIEW_MESSAGES}
170 paperClassName={this.props.paperClassName}