X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/e4b54c3b5d99c99553e319ead28c3aa8dcd6eecc..95b86eb6b3184b787b570a906347ccaac32195c6:/src/models/tree.ts diff --git a/src/models/tree.ts b/src/models/tree.ts index fe52a97b..bec2f758 100644 --- a/src/models/tree.ts +++ b/src/models/tree.ts @@ -95,6 +95,12 @@ export const getNodeAncestorsIds = (id: string) => (tree: Tree): string[] export const getNodeDescendants = (id: string, limit = Infinity) => (tree: Tree) => mapIdsToNodes(getNodeDescendantsIds(id, limit)(tree))(tree); +export const countNodes = (tree: Tree) => + getNodeDescendantsIds('')(tree).length; + +export const countChildren = (id: string) => (tree: Tree) => + getNodeChildren('')(tree).length; + export const getNodeDescendantsIds = (id: string, limit = Infinity) => (tree: Tree): string[] => { const node = getNode(id)(tree); const children = node ? node.children : @@ -120,19 +126,19 @@ export const mapIdsToNodes = (ids: string[]) => (tree: Tree) => ids.map(id => getNode(id)(tree)).filter((node): node is TreeNode => node !== undefined); export const activateNode = (id: string) => (tree: Tree) => - mapTree(node => node.id === id ? { ...node, active: true } : { ...node, active: false })(tree); + mapTree((node: TreeNode) => node.id === id ? { ...node, active: true } : { ...node, active: false })(tree); export const deactivateNode = (tree: Tree) => - mapTree(node => node.active ? { ...node, active: false } : node)(tree); + mapTree((node: TreeNode) => node.active ? { ...node, active: false } : node)(tree); export const expandNode = (...ids: string[]) => (tree: Tree) => - mapTree(node => ids.some(id => id === node.id) ? { ...node, expanded: true } : node)(tree); + mapTree((node: TreeNode) => ids.some(id => id === node.id) ? { ...node, expanded: true } : node)(tree); export const collapseNode = (...ids: string[]) => (tree: Tree) => - mapTree(node => ids.some(id => id === node.id) ? { ...node, expanded: false } : node)(tree); + mapTree((node: TreeNode) => ids.some(id => id === node.id) ? { ...node, expanded: false } : node)(tree); export const toggleNodeCollapse = (...ids: string[]) => (tree: Tree) => - mapTree(node => ids.some(id => id === node.id) ? { ...node, expanded: !node.expanded } : node)(tree); + mapTree((node: TreeNode) => ids.some(id => id === node.id) ? { ...node, expanded: !node.expanded } : node)(tree); export const setNodeStatus = (id: string) => (status: TreeNodeStatus) => (tree: Tree) => { const node = getNode(id)(tree); @@ -175,6 +181,10 @@ export const deselectNodes = (id: string | string[]) => (tree: Tree) => { return ids.reduce((tree, id) => deselectNode(id)(tree), tree); }; +export const getSelectedNodes = (tree: Tree) => + getNodeDescendants('')(tree) + .filter(node => node.selected); + export const initTreeNode = (data: Pick, 'id' | 'value'> & { parent?: string }): TreeNode => ({ children: [], active: false,