X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/4157d0e93444cd1d2a631e7826f8cd831863b58a..a37c2265b5f60351bc1f50c22e74650a79110319:/src/store/tree-picker/tree-picker-reducer.ts?ds=sidebyside diff --git a/src/store/tree-picker/tree-picker-reducer.ts b/src/store/tree-picker/tree-picker-reducer.ts index 8eaada6f..b0d9bc94 100644 --- a/src/store/tree-picker/tree-picker-reducer.ts +++ b/src/store/tree-picker/tree-picker-reducer.ts @@ -7,6 +7,7 @@ import { TreePicker, TreePickerNode } from "./tree-picker"; import { treePickerActions, TreePickerAction } from "./tree-picker-actions"; import { TreeItemStatus } from "~/components/tree/tree"; import { compose } from "redux"; +import { getNode } from '../../models/tree'; export const treePickerReducer = (state: TreePicker = {}, action: TreePickerAction) => treePickerActions.match(action, { @@ -50,11 +51,19 @@ const toggleSelect = (nodeId: string) => (value: TreePickerNode): TreePickerNode ? ({ ...value, selected: !value.selected }) : ({ ...value, selected: false }); -const receiveNodes = (nodes: Array) => (parent: string) => (state: Tree) => - nodes.reduce((tree, node) => - setNode( - createTreeNode(parent)(node) - )(tree), state); +const receiveNodes = (nodes: Array) => (parent: string) => (state: Tree) => { + const parentNode = getNode(parent)(state); + let newState = state; + if (parentNode) { + newState = setNode({ ...parentNode, children: [] })(state); + } + return nodes.reduce((tree, node) => { + const oldNode = getNode(node.nodeId)(state) || { value: {} }; + const newNode = createTreeNode(parent)(node); + const value = { ...oldNode.value, ...newNode.value }; + return setNode({ ...newNode, value })(tree); + }, newState); +}; const createTreeNode = (parent: string) => (node: TreePickerNode): TreeNode => ({ children: [],