// SPDX-License-Identifier: AGPL-3.0
export enum FilterField {
- UUID = "uuid"
+ UUID = "uuid",
+ OWNER_UUID = "owner_uuid"
}
export default class FilterBuilder {
}
class Tree<T> extends React.Component<TreeProps<T> & WithStyles<CssRules>, {}> {
- renderArrow (items: Array<TreeItem<T>> | undefined, arrowClass: string, isOpen: boolean){
- return items && items.length > 0 ? <i className={`${arrowClass} ${isOpen ? "fas fa-caret-down" : `fas fa-caret-down ${this.props.classes.arrowRotate}`}`} /> : ''
+ renderArrow (items: boolean, arrowClass: string, open: boolean){
+ return <i className={`${arrowClass} ${open ? "fas fa-caret-down" : `fas fa-caret-down ${this.props.classes.arrowRotate}`}`} />
}
render(): ReactElement<any> {
const level = this.props.level ? this.props.level : 0;
{items && items.map((it: TreeItem<T>, idx: number) =>
<div key={`item/${level}/${idx}`}>
<ListItem button onClick={() => 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)}
</ListItem>
{it.items && it.items.length > 0 &&
}
export default class ProjectService {
- public getProjectList = (parentUuid?: string) => (dispatch: Dispatch) => {
+ public getProjectList = (parentUuid?: string) => (dispatch: Dispatch): Promise<Project[]> => {
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<GroupsResponse>(url).then(groups => {
+ return serverApi.get<GroupsResponse>(url).then(groups => {
const projects = groups.data.items.map(g => ({
name: g.name,
createdAt: g.created_at,
ownerUuid: g.owner_uuid
} as Project));
dispatch(actions.PROJECTS_SUCCESS({projects, parentItemId: parentUuid}));
+ return projects;
});
};
}
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;
});
};
+ toggleProjectTreeItem = (itemId: string) => {
+ this.props.dispatch<any>(projectService.getProjectList(itemId)).then(() => {
+ this.props.dispatch(projectActions.TOGGLE_PROJECT_TREE_ITEM(itemId));
+ });
+ };
+
render() {
const {classes, user} = this.props;
return (
<div className={classes.toolbar}/>
<ProjectTree
projects={this.props.projects}
- toggleProjectTreeItem={itemId => this.props.dispatch(projectActions.TOGGLE_PROJECT_TREE_ITEM(itemId))}/>
+ toggleProjectTreeItem={this.toggleProjectTreeItem}/>
</Drawer>}
<main className={classes.content}>
<div className={classes.toolbar}/>