From 99db45e52285be31281beaa6dc5a906b1aa1d522 Mon Sep 17 00:00:00 2001 From: Stefan Zermatten Date: Thu, 20 Jun 2019 16:43:18 +0200 Subject: [PATCH] Added function to convert libraryNode lists into forest of object trees --- app/imports/api/library/LibraryNodes.js | 26 ++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/app/imports/api/library/LibraryNodes.js b/app/imports/api/library/LibraryNodes.js index 8afa472a..37426c1c 100644 --- a/app/imports/api/library/LibraryNodes.js +++ b/app/imports/api/library/LibraryNodes.js @@ -52,9 +52,6 @@ for (let key in librarySchemas){ }); } -export default LibraryNodes; -export { LibraryNodeSchema }; - function getLibrary(node){ if (!node) throw new Meteor.Error('No node provided'); return Libraries.findOne(node.ancestors[0].id); @@ -82,3 +79,26 @@ const updateNode = new ValidatedMethod({ return LibraryNodes.update(_id, update); }, }); + +function libraryNodesToTree(ancestorId){ + // Store a dict of all the nodes + let nodeIndex = {}; + LibraryNodes.find({'ancestors.id': ancestorId}).forEach( node => { + node.children = []; + nodeIndex[node._id] = node; + }); + // Create a forest of trees + let forest = []; + // Either the node is a child of another node, or in the forest as a root + nodeList.forEach(node => { + if (nodeIndex[node.parent.id]){ + nodeIndex[node.parent.id].children.push(node); + } else { + forest.push(node); + } + }); + return forest; +} + +export default LibraryNodes; +export { LibraryNodeSchema, updateNode };