1
0
mirror of https://github.com/bitwarden/browser synced 2025-12-19 09:43:23 +00:00

getAllNested for collections too. added treenodeobject interface

This commit is contained in:
Kyle Spearrin
2018-10-25 12:09:22 -04:00
parent 6aba4550a4
commit 59f0549072
7 changed files with 70 additions and 39 deletions

37
src/misc/serviceUtils.ts Normal file
View File

@@ -0,0 +1,37 @@
import {
ITreeNodeObject,
TreeNode,
} from '../models/domain/treeNode';
export class ServiceUtils {
static nestedTraverse(nodeTree: Array<TreeNode<ITreeNodeObject>>, partIndex: number, parts: string[],
obj: ITreeNodeObject, delimiter: string) {
if (parts.length <= partIndex) {
return;
}
const end = partIndex === parts.length - 1;
const partName = parts[partIndex];
for (let i = 0; i < nodeTree.length; i++) {
if (nodeTree[i].node.name === parts[partIndex]) {
if (end && nodeTree[i].node.id !== obj.id) {
// Another node with the same name.
nodeTree.push(new TreeNode(obj, partName));
return;
}
this.nestedTraverse(nodeTree[i].children, partIndex + 1, parts, obj, delimiter);
return;
}
}
if (nodeTree.filter((n) => n.node.name === partName).length === 0) {
if (end) {
nodeTree.push(new TreeNode(obj, partName));
return;
}
const newPartName = parts[partIndex] + delimiter + parts[partIndex + 1];
this.nestedTraverse(nodeTree, 0, [newPartName, ...parts.slice(partIndex + 2)], obj, delimiter);
}
}
}