X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/d1af457494186adb375ce2c012cb58685e0556e3..ceca6c57cc7d0357ab74abd47b80633a885ec575:/src/models/tree.ts diff --git a/src/models/tree.ts b/src/models/tree.ts index b649a40f..f0b53b46 100644 --- a/src/models/tree.ts +++ b/src/models/tree.ts @@ -29,13 +29,12 @@ export const createTree = (): Tree => ({}); export const getNode = (id: string) => (tree: Tree): TreeNode | undefined => tree[id]; export const setNode = (node: TreeNode) => (tree: Tree): Tree => { - console.log(node); - const [newTree] = [tree] - .map(tree => getNode(node.id)(tree) === node + return pipe( + (tree: Tree) => getNode(node.id)(tree) === node ? tree - : { ...tree, [node.id]: node }) - .map(addChild(node.parent, node.id)); - return newTree; + : { ...tree, [node.id]: node }, + addChild(node.parent, node.id) + )(tree); }; export const getNodeValue = (id: string) => (tree: Tree) => { @@ -110,6 +109,8 @@ export const mapIdsToNodes = (ids: string[]) => (tree: Tree) => export const activateNode = (id: string) => (tree: Tree) => mapTree(node => node.id === id ? { ...node, active: true } : { ...node, active: false })(tree); +export const deactivateNode = (tree: Tree) => + mapTree(node => 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); @@ -138,7 +139,30 @@ export const toggleNodeSelection = (id: string) => (tree: Tree) => { }; -export const initTreeNode = (data: Pick, 'id' | 'value'>): 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,