X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/486b76baf259d3b83bc551cd0f7dd0c9d4395961..3d93769b1906fd43bade1c053429541877a75cc9:/src/models/tree.ts diff --git a/src/models/tree.ts b/src/models/tree.ts index bdcd7309..de2f7b71 100644 --- a/src/models/tree.ts +++ b/src/models/tree.ts @@ -27,7 +27,8 @@ export enum TreeNodeStatus { export enum TreePickerId { PROJECTS = 'Projects', SHARED_WITH_ME = 'Shared with me', - FAVORITES = 'Favorites' + FAVORITES = 'Favorites', + PUBLIC_FAVORITES = 'Public Favorites' } export const createTree = (): Tree => ({}); @@ -95,6 +96,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 : @@ -175,6 +182,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, @@ -227,6 +238,9 @@ const getRootNodeChildrenIds = (tree: Tree) => const addChild = (parentId: string, childId: string) => (tree: Tree): Tree => { + if (childId === "") { + return tree; + } const node = getNode(parentId)(tree); if (node) { const children = node.children.some(id => id === childId)