X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/e50ea86d3df3312a2d61ab7c674a2562901141e0..e92207c912aed73a07340b5fb2a9e2cb23e1da5f:/src/models/tree.ts diff --git a/src/models/tree.ts b/src/models/tree.ts index bec2f758..69224059 100644 --- a/src/models/tree.ts +++ b/src/models/tree.ts @@ -16,6 +16,7 @@ export interface TreeNode { selected: boolean; expanded: boolean; status: TreeNodeStatus; + level?: number; } export enum TreeNodeStatus { @@ -27,7 +28,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 => ({}); @@ -42,12 +44,13 @@ export const appendSubtree = (id: string, subtree: Tree) => (tree: Tree )(subtree) as Tree; export const setNode = (node: TreeNode) => (tree: Tree): Tree => { - return pipe( - (tree: Tree) => getNode(node.id)(tree) === node - ? tree - : { ...tree, [node.id]: node }, - addChild(node.parent, node.id) - )(tree); + if (tree[node.id] && tree[node.id] === node) { return tree; } + + tree[node.id] = node; + if (tree[node.parent]) { + tree[node.parent].children = Array.from(new Set([...tree[node.parent].children, node.id])); + } + return tree; }; export const getNodeValue = (id: string) => (tree: Tree) => { @@ -155,7 +158,6 @@ export const toggleNodeSelection = (id: string) => (tree: Tree) => { toggleAncestorsSelection(id), toggleDescendantsSelection(id))(tree) : tree; - }; export const selectNode = (id: string) => (tree: Tree) => { @@ -192,6 +194,7 @@ export const initTreeNode = (data: Pick, 'id' | 'value'> & { pare expanded: false, status: TreeNodeStatus.INITIAL, parent: '', + level: 0, ...data, }); @@ -234,20 +237,3 @@ 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) { - const children = node.children.some(id => id === childId) - ? node.children - : [...node.children, childId]; - - const newNode = children === node.children - ? node - : { ...node, children }; - - return setNode(newNode)(tree); - } - return tree; -};