Merge branch 'origin/master' into 13666-data-explorer-mapper
[arvados-workbench2.git] / src / store / project / project-action.ts
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4 import { default as unionize, ofType, UnionOf } from "unionize";
5
6 import { Project } from "../../models/project";
7 import { projectService } from "../../services/services";
8 import { Dispatch } from "redux";
9
10 const actions = unionize({
11     CREATE_PROJECT: ofType<Project>(),
12     REMOVE_PROJECT: ofType<string>(),
13     PROJECTS_REQUEST: ofType<string>(),
14     PROJECTS_SUCCESS: ofType<{ projects: Project[], parentItemId?: string }>(),
15     TOGGLE_PROJECT_TREE_ITEM_OPEN: ofType<string>(),
16     TOGGLE_PROJECT_TREE_ITEM_ACTIVE: ofType<string>(),
17     RESET_PROJECT_TREE_ACTIVITY: ofType<string>(),
18 }, {
19         tag: 'type',
20         value: 'payload'
21     });
22
23 export const getProjectList = (parentUuid?: string) => (dispatch: Dispatch): Promise<Project[]> => {
24     if (parentUuid) {
25         dispatch(actions.PROJECTS_REQUEST(parentUuid));
26         return projectService.getProjectList(parentUuid).then(projects => {
27             dispatch(actions.PROJECTS_SUCCESS({ projects, parentItemId: parentUuid }));
28             return projects;
29         });
30     } return Promise.resolve([]);
31 };
32
33 export type ProjectAction = UnionOf<typeof actions>;
34 export default actions;