1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: AGPL-3.0
5 import * as React from 'react';
6 import { DataTableProps } from "../../components/data-table";
7 import { RouteComponentProps } from 'react-router';
8 import { Project } from '../../models/project';
9 import { ProjectState, findTreeItem } from '../../store/project/project-reducer';
10 import { RootState } from '../../store/store';
11 import { connect, DispatchProp } from 'react-redux';
12 import { push } from 'react-router-redux';
13 import projectActions from "../../store/project/project-action";
14 import { DataExplorer, DataItem } from '../../components/data-explorer';
15 import { TreeItem } from '../../components/tree/tree';
17 interface DataExplorerViewDataProps {
18 projects: ProjectState;
21 type DataExplorerViewProps = DataExplorerViewDataProps & RouteComponentProps<{ name: string }> & DispatchProp;
23 type DataExplorerViewState = Pick<DataTableProps<Project>, "columns">;
25 interface MappedProjectItem extends DataItem {
29 class DataExplorerView extends React.Component<DataExplorerViewProps, DataExplorerViewState> {
32 const project = findTreeItem(this.props.projects, this.props.match.params.name);
33 const projectItems = project && project.items || [];
36 items={projectItems.map(mapTreeItem)}
37 onItemClick={this.goToProject}
42 goToProject = (project: MappedProjectItem) => {
43 this.props.dispatch(push(`/project/${project.uuid}`));
44 this.props.dispatch(projectActions.TOGGLE_PROJECT_TREE_ITEM(project.uuid));
49 const mapTreeItem = (item: TreeItem<Project>): MappedProjectItem => ({
52 owner: item.data.ownerUuid,
53 lastModified: item.data.modifiedAt,
58 export default connect(
59 (state: RootState) => ({
60 projects: state.projects