X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/8c6209c45e4720c66dd53640142cbc9111748246..d842372e4f45ee06315e511529e65ae1d3f319a0:/src/store/project/project-reducer.ts diff --git a/src/store/project/project-reducer.ts b/src/store/project/project-reducer.ts index 94a451a865..bb0748657e 100644 --- a/src/store/project/project-reducer.ts +++ b/src/store/project/project-reducer.ts @@ -5,22 +5,27 @@ import * as _ from "lodash"; import { projectActions, ProjectAction } from "./project-action"; -import { TreeItem, TreeItemStatus } from "../../components/tree/tree"; -import { ProjectResource } from "../../models/project"; +import { TreeItem, TreeItemStatus } from "~/components/tree/tree"; +import { ProjectResource } from "~/models/project"; export type ProjectState = { items: Array>, currentItemId: string, - creator: ProjectCreator + creator: ProjectCreator, + updater: ProjectUpdater }; interface ProjectCreator { opened: boolean; - pending: boolean; ownerUuid: string; error?: string; } +interface ProjectUpdater { + opened: boolean; + uuid: string; +} + export function findTreeItem(tree: Array>, itemId: string): TreeItem | undefined { let item; for (const t of tree) { @@ -73,14 +78,14 @@ function updateProjectTree(tree: Array>, projects: Pro if (parentItemId) { treeItem = findTreeItem(tree, parentItemId); if (treeItem) { - treeItem.status = TreeItemStatus.Loaded; + treeItem.status = TreeItemStatus.LOADED; } } const items = projects.map(p => ({ id: p.uuid, open: false, active: false, - status: TreeItemStatus.Initial, + status: TreeItemStatus.INITIAL, data: p, items: [] } as TreeItem)); @@ -101,29 +106,43 @@ const updateCreator = (state: ProjectState, creator: Partial) => } }); +const updateProject = (state: ProjectState, updater?: Partial) => ({ + ...state, + updater: { + ...state.updater, + ...updater + } +}); + const initialState: ProjectState = { items: [], currentItemId: "", creator: { opened: false, - pending: false, ownerUuid: "" + }, + updater: { + opened: false, + uuid: '' } }; export const projectsReducer = (state: ProjectState = initialState, action: ProjectAction) => { return projectActions.match(action, { - OPEN_PROJECT_CREATOR: ({ ownerUuid }) => updateCreator(state, { ownerUuid, opened: true, pending: false }), + OPEN_PROJECT_CREATOR: ({ ownerUuid }) => updateCreator(state, { ownerUuid, opened: true }), CLOSE_PROJECT_CREATOR: () => updateCreator(state, { opened: false }), CREATE_PROJECT: () => updateCreator(state, { error: undefined }), CREATE_PROJECT_SUCCESS: () => updateCreator(state, { opened: false, ownerUuid: "" }), + OPEN_PROJECT_UPDATER: ({ uuid }) => updateProject(state, { uuid, opened: true }), + CLOSE_PROJECT_UPDATER: () => updateProject(state, { opened: false, uuid: "" }), + UPDATE_PROJECT_SUCCESS: () => updateProject(state, { opened: false, uuid: "" }), REMOVE_PROJECT: () => state, PROJECTS_REQUEST: itemId => { const items = _.cloneDeep(state.items); const item = findTreeItem(items, itemId); if (item) { - item.status = TreeItemStatus.Pending; + item.status = TreeItemStatus.PENDING; state.items = items; } return { ...state, items }; @@ -139,7 +158,6 @@ export const projectsReducer = (state: ProjectState = initialState, action: Proj const items = _.cloneDeep(state.items); const item = findTreeItem(items, itemId); if (item) { - item.toggled = true; item.open = !item.open; } return { @@ -153,7 +171,6 @@ export const projectsReducer = (state: ProjectState = initialState, action: Proj resetTreeActivity(items); const item = findTreeItem(items, itemId); if (item) { - item.toggled = true; item.active = true; } return {