Skip to content

Commit 7b61259

Browse files
committed
feat(useVaultTreeStore): add isNodeInSubtree function
1 parent 9f80527 commit 7b61259

1 file changed

Lines changed: 33 additions & 0 deletions

File tree

resources/js/stores/vaultTree.ts

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,38 @@ export const useVaultTreeStore = defineStore('vaultTree', () => {
9090
return getActiveTree().loadingNodeIds.has(id) ?? false;
9191
}
9292

93+
function isNodeInSubtree(nodeId: number, rootNodeId: number): boolean {
94+
if (rootNodeId === nodeId) {
95+
return true;
96+
}
97+
98+
const tree = getActiveTree();
99+
100+
if (!tree.loadedFolderIds.has(rootNodeId)) {
101+
return false;
102+
}
103+
104+
const stack: number[] = [...(tree.childrenByParentId[rootNodeId] ?? [])];
105+
106+
while (stack.length > 0) {
107+
const currentId = stack.pop()!;
108+
109+
if (currentId === nodeId) {
110+
return true;
111+
}
112+
113+
if (tree.loadedFolderIds.has(currentId)) {
114+
const children = tree.childrenByParentId[currentId];
115+
116+
if (children) {
117+
stack.push(...children);
118+
}
119+
}
120+
}
121+
122+
return false;
123+
}
124+
93125
function startLoadingFolder(id: number): void {
94126
getActiveTree().loadingNodeIds.add(id);
95127
}
@@ -308,6 +340,7 @@ export const useVaultTreeStore = defineStore('vaultTree', () => {
308340
isFolderExpanded,
309341
isFolderLoaded,
310342
isFolderLoading,
343+
isNodeInSubtree,
311344
startLoadingFolder,
312345
finishLoadingFolder,
313346
setLoadedFolder,

0 commit comments

Comments
 (0)