Merge branch 'master'
[arvados-workbench2.git] / src / store / tree-picker / tree-picker-reducer.ts
index 6a87fb4c77b17ac3d1ad8c2e898c3468e38c7e85..8eaada6fc3e092e477c042db44c36ade006df9f5 100644 (file)
@@ -12,12 +12,16 @@ export const treePickerReducer = (state: TreePicker = {}, action: TreePickerActi
     treePickerActions.match(action, {
         LOAD_TREE_PICKER_NODE: ({ nodeId, pickerId }) =>
             updateOrCreatePicker(state, pickerId, setNodeValueWith(setPending)(nodeId)),
-        LOAD_TREE_PICKER_NODE_SUCCESS: ({ nodeId, nodes, pickerId }) => 
-            updateOrCreatePicker(state, pickerId, compose(receiveNodes(nodes)(nodeId),setNodeValueWith(setLoaded)(nodeId))),
-        TOGGLE_TREE_PICKER_NODE_COLLAPSE: ({ nodeId, pickerId }) => 
+        LOAD_TREE_PICKER_NODE_SUCCESS: ({ nodeId, nodes, pickerId }) =>
+            updateOrCreatePicker(state, pickerId, compose(receiveNodes(nodes)(nodeId), setNodeValueWith(setLoaded)(nodeId))),
+        TOGGLE_TREE_PICKER_NODE_COLLAPSE: ({ nodeId, pickerId }) =>
             updateOrCreatePicker(state, pickerId, setNodeValueWith(toggleCollapse)(nodeId)),
-        TOGGLE_TREE_PICKER_NODE_SELECT: ({ nodeId, pickerId }) => 
+        TOGGLE_TREE_PICKER_NODE_SELECT: ({ nodeId, pickerId }) =>
             updateOrCreatePicker(state, pickerId, mapTreeValues(toggleSelect(nodeId))),
+        RESET_TREE_PICKER: ({ pickerId }) =>
+            updateOrCreatePicker(state, pickerId, createTree),
+        EXPAND_TREE_PICKER_NODES: ({ pickerId, nodeIds }) =>
+            updateOrCreatePicker(state, pickerId, mapTreeValues(expand(nodeIds))),
         default: () => state
     });
 
@@ -27,6 +31,11 @@ const updateOrCreatePicker = (state: TreePicker, pickerId: string, func: (value:
     return { ...state, [pickerId]: updatedPicker };
 };
 
+const expand = (ids: string[]) => (node: TreePickerNode): TreePickerNode =>
+    ids.some(id => id === node.nodeId)
+        ? { ...node, collapsed: false }
+        : node;
+
 const setPending = (value: TreePickerNode): TreePickerNode =>
     ({ ...value, status: TreeItemStatus.PENDING });