nope/resources/ui/graph/helpers/sort.nodes.ts

50 lines
1.4 KiB
TypeScript
Raw Normal View History

2020-10-25 20:14:51 +00:00
/**
* @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<N extends IBaseNodeOptions>(
nodes: Array<N | IBaseNodeOptions>,
ret = new Array<N | IBaseNodeOptions>(),
parentIds = new Array<string>()
){
const indexesToRemove = new Array<number>();
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<N extends IBaseNodeOptions>(nodes: Array<N | IBaseNodeOptions>){
return recursiveExport(deepClone(nodes));
}