/** * @author Martin Karkowski * @email m.karkowski@zema.de * @create date 2020-03-12 14:20:59 * @modify date 2020-04-09 09:07:38 * @desc [description] */ import { deepClone } from '../../../../lib/helpers/objectMethods'; import { IBaseNodeOptions } from '../interfaces/IBaseNodeOptions'; function recursiveExport( nodes: Array, ret = new Array(), parentIds = new Array() ){ const indexesToRemove = new Array(); nodes.map((node,idx) => { if (parentIds.length == 0 && !node.parent){ indexesToRemove.push(idx); ret.push(node) } else if (parentIds.length > 0 && parentIds.includes(node.parent)) { indexesToRemove.push(idx); ret.push(node) } }); let removedElements = 0; indexesToRemove.forEach(idx => { const removed = nodes.splice(idx - removedElements, 1)[0]; removedElements += 1; if (removed){ parentIds.push(removed.id); } }); if (nodes.length > 0){ recursiveExport(nodes, ret, parentIds) } return ret; } export function sortNodes(nodes: Array){ return recursiveExport(deepClone(nodes)); }