X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/a0e9ecd6a913a6465b500f642412daf1e1a6420b..e7af5ee5ca402f7c637586831d611e5648cbc5b9:/src/models/tree.ts diff --git a/src/models/tree.ts b/src/models/tree.ts index cce27b12..61360110 100644 --- a/src/models/tree.ts +++ b/src/models/tree.ts @@ -86,7 +86,7 @@ export const getNodeDescendantsIds = (id: string, limit = Infinity) => (tree: const node = getNode(id)(tree); const children = node ? node.children : id === TREE_ROOT_ID - ? getRootNodeChildren(tree) + ? getRootNodeChildrenIds(tree) : []; return children @@ -139,7 +139,30 @@ export const toggleNodeSelection = (id: string) => (tree: Tree) => { }; -export const initTreeNode = (data: Pick, 'id' | 'value'> & {parent?: string}): TreeNode => ({ +export const selectNode = (id: string) => (tree: Tree) => { + const node = getNode(id)(tree); + return node && node.selected + ? tree + : toggleNodeSelection(id)(tree); +}; + +export const selectNodes = (id: string | string[]) => (tree: Tree) => { + const ids = typeof id === 'string' ? [id] : id; + return ids.reduce((tree, id) => selectNode(id)(tree), tree); +}; +export const deselectNode = (id: string) => (tree: Tree) => { + const node = getNode(id)(tree); + return node && node.selected + ? toggleNodeSelection(id)(tree) + : tree; +}; + +export const deselectNodes = (id: string | string[]) => (tree: Tree) => { + const ids = typeof id === 'string' ? [id] : id; + return ids.reduce((tree, id) => deselectNode(id)(tree), tree); +}; + +export const initTreeNode = (data: Pick, 'id' | 'value'> & { parent?: string }): TreeNode => ({ children: [], active: false, selected: false, @@ -184,11 +207,12 @@ const toggleParentNodeSelection = (id: string) => (tree: Tree) => { const mapNodeValue = (mapFn: (value: T) => R) => (node: TreeNode): TreeNode => ({ ...node, value: mapFn(node.value) }); -const getRootNodeChildren = (tree: Tree) => +const getRootNodeChildrenIds = (tree: Tree) => Object .keys(tree) .filter(id => getNode(id)(tree)!.parent === TREE_ROOT_ID); + const addChild = (parentId: string, childId: string) => (tree: Tree): Tree => { const node = getNode(parentId)(tree); if (node) {