UNPKG

labo-components

Version:
88 lines (73 loc) 3.94 kB
import ProjectAPI from './api/ProjectAPI'; import SessionStorageHandler from "./util/SessionStorageHandler"; //bookmark and annotation view import ProjectBookmarkView from './components/workspace/projects/bookmark/ProjectBookmarkView'; import ProjectAnnotationView from './components/workspace/projects/annotation/ProjectAnnotationView'; //basic crud views import ProjectListView from './components/workspace/projects/crud/ProjectListView'; import ProjectCreateView from './components/workspace/projects/crud/ProjectCreateView'; import ProjectDetailsView from './components/workspace/projects/crud/ProjectDetailsView'; import ProjectEditView from './components/workspace/projects/crud/ProjectEditView'; //session view import ProjectSessionView from './components/workspace/projects/session/ProjectSessionView'; import ProjectSessionCreateView from './components/workspace/projects/session/ProjectSessionCreateView'; //queries view import ProjectQueriesView from './components/workspace/projects/query/ProjectQueriesView'; import PropTypes from 'prop-types'; import React, { Component } from 'react'; import { Switch, BrowserRouter as Router, Route, Redirect } from 'react-router-dom' class WorkspaceProjects extends Component { constructor(props){ super(props); this.state={} } getPropsRenderer(RenderComponent, props, extraProps={}){ return (routeProps) => ( <RenderComponent {...routeProps} {...props} {...extraProps} /> ) } //FIXME there is an overload of properties being passed to the components, many are not used in individual components (e.g. see ProjectDetailsView.PropTypes) render() { return( <Router> <Switch> <Route exact path="/workspace/projects/session/create/:tool" render={this.getPropsRenderer(ProjectSessionCreateView, this.props, {api: ProjectAPI})} /> <Route exact path="/workspace/projects" render={this.getPropsRenderer(ProjectListView, this.props, {api: ProjectAPI} )} /> <Route exact path="/workspace/projects/create" render={this.getPropsRenderer(ProjectCreateView, this.props, {api: ProjectAPI} )} /> <Route exact path="/workspace/projects/:id" render={({ match }) => ( <Redirect to={`/workspace/projects/${match.params.id}/${SessionStorageHandler.get("bg__project-tab","details")}`} /> )} /> <Route path="/workspace/projects/:id/bookmarks" render={this.getPropsRenderer(ProjectBookmarkView, this.props, {api: ProjectAPI})} /> <Route path="/workspace/projects/:id/annotations" render={this.getPropsRenderer(ProjectAnnotationView, this.props, {api: ProjectAPI})} /> <Route path="/workspace/projects/:id/sessions" render={this.getPropsRenderer(ProjectSessionView, this.props, {api: ProjectAPI})} /> <Route path="/workspace/projects/:id/queries" render={this.getPropsRenderer(ProjectQueriesView, this.props)} /> <Route path="/workspace/projects/:id/details" render={this.getPropsRenderer(ProjectDetailsView, this.props, {api: ProjectAPI})} /> <Route path="/workspace/projects/:id/edit" render={this.getPropsRenderer(ProjectEditView, this.props, {api: ProjectAPI})} /> </Switch> </Router> ); } } WorkspaceProjects.propTypes = { // project api api: PropTypes.func.isRequired, // current user object used for defining access roles per project user: PropTypes.shape({ id: PropTypes.string.isRequired }).isRequired, }; export default WorkspaceProjects;