From: Daniel Kos Date: Tue, 12 Jun 2018 21:20:12 +0000 (+0200) Subject: Added dynamic sub projects loading X-Git-Tag: 1.2.0~80^2~1 X-Git-Url: https://git.arvados.org/arvados-workbench2.git/commitdiff_plain/25dbcc4a5b95924e8a9d1d385ac0fe87f6c658bd?ds=sidebyside Added dynamic sub projects loading Feature #13610 Arvados-DCO-1.1-Signed-off-by: Daniel Kos --- diff --git a/src/common/api/filter-builder.ts b/src/common/api/filter-builder.ts index c4c29b40..3f8e323c 100644 --- a/src/common/api/filter-builder.ts +++ b/src/common/api/filter-builder.ts @@ -3,7 +3,8 @@ // SPDX-License-Identifier: AGPL-3.0 export enum FilterField { - UUID = "uuid" + UUID = "uuid", + OWNER_UUID = "owner_uuid" } export default class FilterBuilder { diff --git a/src/components/tree/tree.tsx b/src/components/tree/tree.tsx index 3a644734..d8397d66 100644 --- a/src/components/tree/tree.tsx +++ b/src/components/tree/tree.tsx @@ -44,8 +44,8 @@ interface TreeProps { } class Tree extends React.Component & WithStyles, {}> { - renderArrow (items: Array> | undefined, arrowClass: string, isOpen: boolean){ - return items && items.length > 0 ? : '' + renderArrow (items: boolean, arrowClass: string, open: boolean){ + return } render(): ReactElement { const level = this.props.level ? this.props.level : 0; @@ -55,7 +55,7 @@ class Tree extends React.Component & WithStyles, {}> { {items && items.map((it: TreeItem, idx: number) =>
toggleItem(it.id)} className={list} style={{paddingLeft: (level + 1) * 20}}> - {this.renderArrow(it.items, it.active ? activeArrow : arrow, it.open)} + {this.renderArrow(true, it.active ? activeArrow : arrow, it.open)} {render(it, level)} {it.items && it.items.length > 0 && diff --git a/src/services/project-service/project-service.ts b/src/services/project-service/project-service.ts index 2b1bcffc..9350dabd 100644 --- a/src/services/project-service/project-service.ts +++ b/src/services/project-service/project-service.ts @@ -33,15 +33,15 @@ interface GroupsResponse { } export default class ProjectService { - public getProjectList = (parentUuid?: string) => (dispatch: Dispatch) => { + public getProjectList = (parentUuid?: string) => (dispatch: Dispatch): Promise => { dispatch(actions.PROJECTS_REQUEST()); const ub = new UrlBuilder('/groups'); const fb = new FilterBuilder(); - fb.addEqual(FilterField.UUID, parentUuid); - const url = ub.addParam('filter', fb.get()).get(); + fb.addEqual(FilterField.OWNER_UUID, parentUuid); + const url = ub.addParam('filters', fb.get()).get(); - serverApi.get(url).then(groups => { + return serverApi.get(url).then(groups => { const projects = groups.data.items.map(g => ({ name: g.name, createdAt: g.created_at, @@ -51,6 +51,7 @@ export default class ProjectService { ownerUuid: g.owner_uuid } as Project)); dispatch(actions.PROJECTS_SUCCESS({projects, parentItemId: parentUuid})); + return projects; }); }; } diff --git a/src/views/workbench/workbench.tsx b/src/views/workbench/workbench.tsx index 00fab70d..d18d113b 100644 --- a/src/views/workbench/workbench.tsx +++ b/src/views/workbench/workbench.tsx @@ -27,6 +27,7 @@ import projectActions from "../../store/project/project-action" import ProjectTree from '../../components/project-tree/project-tree'; import { TreeItem } from "../../components/tree/tree"; import { Project } from "../../models/project"; +import { projectService } from '../../services/services'; const drawerWidth = 240; @@ -103,6 +104,12 @@ class Workbench extends React.Component { }); }; + toggleProjectTreeItem = (itemId: string) => { + this.props.dispatch(projectService.getProjectList(itemId)).then(() => { + this.props.dispatch(projectActions.TOGGLE_PROJECT_TREE_ITEM(itemId)); + }); + }; + render() { const {classes, user} = this.props; return ( @@ -159,7 +166,7 @@ class Workbench extends React.Component {
this.props.dispatch(projectActions.TOGGLE_PROJECT_TREE_ITEM(itemId))}/> + toggleProjectTreeItem={this.toggleProjectTreeItem}/> }