Create actions and store field for project creator
[arvados-workbench2.git] / src / store / project / project-reducer.ts
index efef80992189c39a2d748a477cc972f3b1bf696b..bb7d3d07e3720cfba20aa939122582d54be5860f 100644 (file)
@@ -10,7 +10,11 @@ import { TreeItem, TreeItemStatus } from "../../components/tree/tree";
 
 export type ProjectState = {
     items: Array<TreeItem<Project>>,
-    currentItemId: string
+    currentItemId: string,
+    creator: {
+        opened: boolean,
+        pending: boolean
+    }
 };
 
 export function findTreeItem<T>(tree: Array<TreeItem<T>>, itemId: string): TreeItem<T> | undefined {
@@ -40,12 +44,12 @@ export function getActiveTreeItem<T>(tree: Array<TreeItem<T>>): TreeItem<T> | un
 }
 
 export function getTreePath<T>(tree: Array<TreeItem<T>>, itemId: string): Array<TreeItem<T>> {
-    for (const item of tree){
-        if(item.id === itemId){
+    for (const item of tree) {
+        if (item.id === itemId) {
             return [item];
         } else {
             const branch = getTreePath(item.items || [], itemId);
-            if(branch.length > 0){
+            if (branch.length > 0) {
                 return [item, ...branch];
             }
         }
@@ -85,20 +89,22 @@ function updateProjectTree(tree: Array<TreeItem<Project>>, projects: Project[],
     return items;
 }
 
-const projectsReducer = (state: ProjectState = { items: [], currentItemId: "" }, action: ProjectAction) => {
+const initialState: ProjectState = {
+    items: [],
+    currentItemId: "",
+    creator: {
+        opened: false,
+        pending: false
+    }
+};
+
+
+const projectsReducer = (state: ProjectState = initialState, action: ProjectAction) => {
     return actions.match(action, {
-        CREATE_PROJECT: project => ({
-            ...state,
-            items: state.items.concat({
-                id: project.uuid,
-                open: false,
-                active: false,
-                status: TreeItemStatus.Loaded,
-                toggled: false,
-                items: [],
-                data: project
-            })
-        }),
+        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 } }),
         REMOVE_PROJECT: () => state,
         PROJECTS_REQUEST: itemId => {
             const items = _.cloneDeep(state.items);