X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/63210cc7d29062bcffa7af461e27f56d3b8bac7c..39c6f239172d5f2d92341f6c31de32e7c02ffa2d:/src/store/project/project-reducer.ts diff --git a/src/store/project/project-reducer.ts b/src/store/project/project-reducer.ts index 8ee9e9f916..40356c0c90 100644 --- a/src/store/project/project-reducer.ts +++ b/src/store/project/project-reducer.ts @@ -4,12 +4,12 @@ import * as _ from "lodash"; -import { Project } from "../../models/project"; -import actions, { ProjectAction } from "./project-action"; +import { projectActions, ProjectAction } from "./project-action"; import { TreeItem, TreeItemStatus } from "../../components/tree/tree"; +import { ProjectResource } from "../../models/project"; export type ProjectState = { - items: Array>, + items: Array>, currentItemId: string, creator: ProjectCreator }; @@ -67,7 +67,7 @@ function resetTreeActivity(tree: Array>) { } } -function updateProjectTree(tree: Array>, projects: Project[], parentItemId?: string): Array> { +function updateProjectTree(tree: Array>, projects: ProjectResource[], parentItemId?: string): Array> { let treeItem; if (parentItemId) { treeItem = findTreeItem(tree, parentItemId); @@ -82,7 +82,7 @@ function updateProjectTree(tree: Array>, projects: Project[], status: TreeItemStatus.Initial, data: p, items: [] - } as TreeItem)); + } as TreeItem)); if (treeItem) { treeItem.items = items; @@ -111,8 +111,8 @@ const initialState: ProjectState = { }; -const projectsReducer = (state: ProjectState = initialState, action: ProjectAction) => { - return actions.match(action, { +export const projectsReducer = (state: ProjectState = initialState, action: ProjectAction) => { + return projectActions.match(action, { OPEN_PROJECT_CREATOR: ({ ownerUuid }) => updateCreator(state, { ownerUuid, opened: true, pending: false }), CLOSE_PROJECT_CREATOR: () => updateCreator(state, { opened: false }), CREATE_PROJECT: () => updateCreator(state, { opened: false, pending: true }), @@ -126,12 +126,13 @@ const projectsReducer = (state: ProjectState = initialState, action: ProjectActi item.status = TreeItemStatus.Pending; state.items = items; } - return state; + return { ...state, items }; }, PROJECTS_SUCCESS: ({ projects, parentItemId }) => { + const items = _.cloneDeep(state.items); return { ...state, - items: updateProjectTree(state.items, projects, parentItemId) + items: updateProjectTree(items, projects, parentItemId) }; }, TOGGLE_PROJECT_TREE_ITEM_OPEN: itemId => { @@ -173,5 +174,3 @@ const projectsReducer = (state: ProjectState = initialState, action: ProjectActi default: () => state }); }; - -export default projectsReducer;