X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/312f0cb3a36f9bce0b16b53765701578191daab8..5114536622bd9abf5bd729629b9249ccd11fd3ce:/src/store/project/project-reducer.ts diff --git a/src/store/project/project-reducer.ts b/src/store/project/project-reducer.ts index bb7d3d07e3..2c1ab81eb5 100644 --- a/src/store/project/project-reducer.ts +++ b/src/store/project/project-reducer.ts @@ -11,12 +11,15 @@ import { TreeItem, TreeItemStatus } from "../../components/tree/tree"; export type ProjectState = { items: Array>, currentItemId: string, - creator: { - opened: boolean, - pending: boolean - } + creator: ProjectCreator }; +interface ProjectCreator { + opened: boolean; + pending: boolean; + ownerUuid: string; +} + export function findTreeItem(tree: Array>, itemId: string): TreeItem | undefined { let item; for (const t of tree) { @@ -89,22 +92,32 @@ function updateProjectTree(tree: Array>, projects: Project[], return items; } +const updateCreator = (state: ProjectState, creator: Partial) => ({ + ...state, + creator: { + ...state.creator, + ...creator + } +}); + const initialState: ProjectState = { items: [], currentItemId: "", creator: { opened: false, - pending: false + pending: false, + ownerUuid: "" } }; const projectsReducer = (state: ProjectState = initialState, action: ProjectAction) => { return actions.match(action, { - OPEN_PROJECT_CREATOR: () => ({ ...state, creator: { opened: true, pending: false } }), - CREATE_PROJECT: () => ({ ...state, creator: { opened: false, pending: true } }), - CREATE_PROJECT_SUCCESS: () => ({ ...state, creator: { opened: false, pending: false } }), - CREATE_PROJECT_ERROR: () => ({ ...state, creator: { opened: false, pending: false } }), + OPEN_PROJECT_CREATOR: ({ ownerUuid }) => updateCreator(state, { ownerUuid, opened: true, pending: false }), + CLOSE_PROJECT_CREATOR: () => updateCreator(state, { opened: false }), + CREATE_PROJECT: () => updateCreator(state, { pending: true }), + CREATE_PROJECT_SUCCESS: () => updateCreator(state, { ownerUuid: "", pending: false }), + CREATE_PROJECT_ERROR: () => updateCreator(state, { ownerUuid: "", pending: false }), REMOVE_PROJECT: () => state, PROJECTS_REQUEST: itemId => { const items = _.cloneDeep(state.items); @@ -129,6 +142,7 @@ const projectsReducer = (state: ProjectState = initialState, action: ProjectActi item.open = !item.open; } return { + ...state, items, currentItemId: itemId }; @@ -142,6 +156,7 @@ const projectsReducer = (state: ProjectState = initialState, action: ProjectActi item.active = true; } return { + ...state, items, currentItemId: itemId }; @@ -150,6 +165,7 @@ const projectsReducer = (state: ProjectState = initialState, action: ProjectActi const items = _.cloneDeep(state.items); resetTreeActivity(items); return { + ...state, items, currentItemId: "" };