1
0
mirror of https://github.com/bitwarden/browser.git synced 2024-09-24 03:32:51 +02:00
bitwarden-browser/libs/common/src/misc/serviceUtils.ts

73 lines
1.8 KiB
TypeScript
Raw Normal View History

import { ITreeNodeObject, TreeNode } from "../models/domain/tree-node";
export class ServiceUtils {
2021-12-16 13:36:21 +01:00
static nestedTraverse(
nodeTree: TreeNode<ITreeNodeObject>[],
partIndex: number,
parts: string[],
obj: ITreeNodeObject,
parent: ITreeNodeObject,
delimiter: string
) {
if (parts.length <= partIndex) {
return;
}
2021-12-16 13:36:21 +01:00
const end = partIndex === parts.length - 1;
const partName = parts[partIndex];
2021-12-16 13:36:21 +01:00
for (let i = 0; i < nodeTree.length; i++) {
if (nodeTree[i].node.name !== parts[partIndex]) {
continue;
}
if (end && nodeTree[i].node.id !== obj.id) {
// Another node with the same name.
nodeTree.push(new TreeNode(obj, partName, parent));
return;
}
ServiceUtils.nestedTraverse(
nodeTree[i].children,
partIndex + 1,
parts,
obj,
nodeTree[i].node,
delimiter
);
return;
}
2021-12-16 13:36:21 +01:00
if (nodeTree.filter((n) => n.node.name === partName).length === 0) {
if (end) {
nodeTree.push(new TreeNode(obj, partName, parent));
return;
}
const newPartName = parts[partIndex] + delimiter + parts[partIndex + 1];
ServiceUtils.nestedTraverse(
nodeTree,
0,
[newPartName, ...parts.slice(partIndex + 2)],
obj,
parent,
delimiter
);
}
2021-12-16 13:36:21 +01:00
}
2018-10-26 16:48:06 +02:00
2021-12-16 13:36:21 +01:00
static getTreeNodeObject(
nodeTree: TreeNode<ITreeNodeObject>[],
id: string
): TreeNode<ITreeNodeObject> {
for (let i = 0; i < nodeTree.length; i++) {
if (nodeTree[i].node.id === id) {
return nodeTree[i];
} else if (nodeTree[i].children != null) {
const node = ServiceUtils.getTreeNodeObject(nodeTree[i].children, id);
if (node !== null) {
return node;
2018-10-26 16:48:06 +02:00
}
2021-12-16 13:36:21 +01:00
}
2018-10-26 16:48:06 +02:00
}
2021-12-16 13:36:21 +01:00
return null;
}
}