X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/fbe620454ddcba2c96b7a0f6049e05e3d12e5422..4bbaf2a0cede89ea50d63d210c6631adc1970620:/src/store/project/project-reducer.ts diff --git a/src/store/project/project-reducer.ts b/src/store/project/project-reducer.ts index ac6d4b73..8770391a 100644 --- a/src/store/project/project-reducer.ts +++ b/src/store/project/project-reducer.ts @@ -4,12 +4,12 @@ import { Project } from "../../models/project"; import actions, { ProjectAction } from "./project-action"; -import { TreeItem } from "../../components/tree/tree"; +import { TreeItem, TreeItemStatus } from "../../components/tree/tree"; import * as _ from "lodash"; export type ProjectState = Array>; -function findTreeItem(tree: Array>, itemId: string): TreeItem | undefined { +export function findTreeItem(tree: Array>, itemId: string): TreeItem | undefined { let item; for (const t of tree) { item = t.id === itemId @@ -47,11 +47,15 @@ function updateProjectTree(tree: Array>, projects: Project[], let treeItem; if (parentItemId) { treeItem = findTreeItem(tree, parentItemId); + if (treeItem) { + treeItem.status = TreeItemStatus.Loaded; + } } const items = projects.map((p, idx) => ({ id: p.uuid, open: false, active: false, + status: TreeItemStatus.Initial, data: p, items: [] } as TreeItem)); @@ -64,12 +68,18 @@ function updateProjectTree(tree: Array>, projects: Project[], return items; } - const projectsReducer = (state: ProjectState = [], action: ProjectAction) => { return actions.match(action, { CREATE_PROJECT: project => [...state, project], REMOVE_PROJECT: () => state, - PROJECTS_REQUEST: () => state, + PROJECTS_REQUEST: itemId => { + const tree = _.cloneDeep(state); + const item = findTreeItem(tree, itemId); + if (item) { + item.status = TreeItemStatus.Pending; + } + return tree; + }, PROJECTS_SUCCESS: ({ projects, parentItemId }) => { return updateProjectTree(state, projects, parentItemId); }, @@ -80,6 +90,7 @@ const projectsReducer = (state: ProjectState = [], action: ProjectAction) => { if (item) { item.open = !item.open; item.active = true; + item.toggled = true; } return tree; },