From: Michal Klobukowski Date: Thu, 14 Jun 2018 10:47:56 +0000 (+0200) Subject: Seaparate project-explorer component from project-explorer view X-Git-Url: https://git.arvados.org/arvados.git/commitdiff_plain/6471df421940db8b44adc93171a27659f7e3bdf1 Seaparate project-explorer component from project-explorer view Feature #13601 Arvados-DCO-1.1-Signed-off-by: Michal Klobukowski --- diff --git a/src/components/project-explorer/project-explorer.tsx b/src/components/project-explorer/project-explorer.tsx new file mode 100644 index 0000000000..490e46fd81 --- /dev/null +++ b/src/components/project-explorer/project-explorer.tsx @@ -0,0 +1,72 @@ +// Copyright (C) The Arvados Authors. All rights reserved. +// +// SPDX-License-Identifier: AGPL-3.0 + +import * as React from 'react'; +import DataExplorer, { DataExplorerProps } from "../../components/data-explorer/data-explorer"; +import { RouteComponentProps } from 'react-router'; +import { Project } from '../../models/project'; +import { ProjectState, findTreeItem } from '../../store/project/project-reducer'; +import { RootState } from '../../store/store'; +import { connect, DispatchProp } from 'react-redux'; +import { push } from 'react-router-redux'; +import projectActions from "../../store/project/project-action"; +import { Typography } from '@material-ui/core'; +import { Column } from '../../components/data-explorer/column'; + +interface ProjectExplorerProps { + projects: Project[]; + onProjectClick: (project: Project) => void; +} + +type ProjectExplorerState = Pick, "columns">; + +class ProjectExplorer extends React.Component { + + state: ProjectExplorerState = { + columns: [ + { header: "Name", selected: true, render: item => {renderIcon(item.kind)} {item.name} }, + { header: "Created at", selected: true, render: item => {formatDate(item.createdAt)} }, + { header: "Modified at", selected: true, render: item => {formatDate(item.modifiedAt)} }, + { header: "UUID", selected: true, render: item => {item.uuid} }, + { header: "Owner UUID", selected: true, render: item => {item.ownerUuid} }, + { header: "URL", selected: true, render: item => {item.href} } + ] + }; + + render() { + return ( + + ); + } + + toggleColumn = (column: Column) => { + const index = this.state.columns.indexOf(column); + const columns = this.state.columns.slice(0); + columns.splice(index, 1, { ...column, selected: !column.selected }); + this.setState({ columns }); + } +} + +const formatDate = (isoDate: string) => { + const date = new Date(isoDate); + return date.toLocaleString(); +}; + +const renderIcon = (kind: string) => { + switch (kind) { + case "arvados#group": + return ; + case "arvados#groupList": + return ; + default: + return ; + } +}; + +export default ProjectExplorer; diff --git a/src/views/project-explorer/project-explorer.tsx b/src/views/project-explorer/project-explorer.tsx index 21e8d27894..de91c0bf37 100644 --- a/src/views/project-explorer/project-explorer.tsx +++ b/src/views/project-explorer/project-explorer.tsx @@ -13,6 +13,7 @@ import { push } from 'react-router-redux'; import projectActions from "../../store/project/project-action"; import { Typography } from '@material-ui/core'; import { Column } from '../../components/data-explorer/column'; +import ProjectExplorer from '../../components/project-explorer/project-explorer'; interface ProjectExplorerViewDataProps { projects: ProjectState; @@ -24,55 +25,24 @@ type ProjectExplorerViewState = Pick, "columns">; class ProjectExplorerView extends React.Component { - state: ProjectExplorerViewState = { - columns: [ - { header: "Name", selected: true, render: item => {renderIcon(item.kind)} {item.name} }, - { header: "Created at", selected: true, render: item => {formatDate(item.createdAt)} }, - { header: "Modified at", selected: true, render: item => {formatDate(item.modifiedAt)} }, - { header: "UUID", selected: true, render: item => {item.uuid} }, - { header: "Owner UUID", selected: true, render: item => {item.ownerUuid} }, - { header: "URL", selected: true, render: item => {item.href} } - ] - }; - render() { const project = findTreeItem(this.props.projects, this.props.match.params.name); const projectItems = project && project.items || []; return ( - item.data)} onItemClick={this.goToProject} onColumnToggle={this.toggleColumn} /> + item.data)} + onProjectClick={this.goToProject} + /> ); } - goToProject = (project: Project) => { this.props.dispatch(push(`/project/${project.uuid}`)); this.props.dispatch(projectActions.TOGGLE_PROJECT_TREE_ITEM(project.uuid)); } - toggleColumn = (column: Column) => { - const index = this.state.columns.indexOf(column); - const columns = this.state.columns.slice(0); - columns.splice(index, 1, { ...column, selected: !column.selected }); - this.setState({ columns }); - } } -const formatDate = (isoDate: string) => { - const date = new Date(isoDate); - return date.toLocaleString(); -}; - -const renderIcon = (kind: string) => { - switch (kind) { - case "arvados#group": - return ; - case "arvados#groupList": - return ; - default: - return ; - } -}; - export default connect( (state: RootState) => ({ projects: state.projects