From d4b3a16fd1196abd3134c23a9fa0b6c002790458 Mon Sep 17 00:00:00 2001 From: Kyle Spearrin Date: Fri, 26 Oct 2018 10:48:06 -0400 Subject: [PATCH] getNested tree object by node id --- src/abstractions/collection.service.ts | 1 + src/abstractions/folder.service.ts | 1 + src/angular/components/groupings.component.ts | 10 ++-------- src/misc/serviceUtils.ts | 18 ++++++++++++++++-- src/services/collection.service.ts | 5 +++++ src/services/folder.service.ts | 5 +++++ 6 files changed, 30 insertions(+), 10 deletions(-) diff --git a/src/abstractions/collection.service.ts b/src/abstractions/collection.service.ts index 4847a816f18..a20c313b4c4 100644 --- a/src/abstractions/collection.service.ts +++ b/src/abstractions/collection.service.ts @@ -15,6 +15,7 @@ export abstract class CollectionService { getAll: () => Promise; getAllDecrypted: () => Promise; getAllNested: (collections?: CollectionView[]) => Promise>>; + getNested: (id: string) => Promise>; upsert: (collection: CollectionData | CollectionData[]) => Promise; replace: (collections: { [id: string]: CollectionData; }) => Promise; clear: (userId: string) => Promise; diff --git a/src/abstractions/folder.service.ts b/src/abstractions/folder.service.ts index fa1c6809de7..9f7099988d1 100644 --- a/src/abstractions/folder.service.ts +++ b/src/abstractions/folder.service.ts @@ -15,6 +15,7 @@ export abstract class FolderService { getAll: () => Promise; getAllDecrypted: () => Promise; getAllNested: () => Promise>>; + getNested: (id: string) => Promise>; saveWithServer: (folder: Folder) => Promise; upsert: (folder: FolderData | FolderData[]) => Promise; replace: (folders: { [id: string]: FolderData; }) => Promise; diff --git a/src/angular/components/groupings.component.ts b/src/angular/components/groupings.component.ts index f5b7e7f4942..23381634e1e 100644 --- a/src/angular/components/groupings.component.ts +++ b/src/angular/components/groupings.component.ts @@ -16,9 +16,7 @@ import { FolderService } from '../../abstractions/folder.service'; export class GroupingsComponent { @Input() showFolders = true; - @Input() loadNestedFolders = false; @Input() showCollections = true; - @Input() loadNestedCollections = false; @Input() showFavorites = true; @Output() onAllClicked = new EventEmitter(); @@ -63,9 +61,7 @@ export class GroupingsComponent { } else { this.collections = collections; } - if (this.loadNestedCollections) { - this.nestedCollections = await this.collectionService.getAllNested(this.collections); - } + this.nestedCollections = await this.collectionService.getAllNested(this.collections); } async loadFolders() { @@ -73,9 +69,7 @@ export class GroupingsComponent { return; } this.folders = await this.folderService.getAllDecrypted(); - if (this.loadNestedFolders) { - this.nestedFolders = await this.folderService.getAllNested(); - } + this.nestedFolders = await this.folderService.getAllNested(); } selectAll() { diff --git a/src/misc/serviceUtils.ts b/src/misc/serviceUtils.ts index 550a4029251..d12f7b61f9f 100644 --- a/src/misc/serviceUtils.ts +++ b/src/misc/serviceUtils.ts @@ -20,7 +20,7 @@ export class ServiceUtils { nodeTree.push(new TreeNode(obj, partName)); return; } - this.nestedTraverse(nodeTree[i].children, partIndex + 1, parts, obj, delimiter); + ServiceUtils.nestedTraverse(nodeTree[i].children, partIndex + 1, parts, obj, delimiter); return; } } @@ -31,7 +31,21 @@ export class ServiceUtils { return; } const newPartName = parts[partIndex] + delimiter + parts[partIndex + 1]; - this.nestedTraverse(nodeTree, 0, [newPartName, ...parts.slice(partIndex + 2)], obj, delimiter); + ServiceUtils.nestedTraverse(nodeTree, 0, [newPartName, ...parts.slice(partIndex + 2)], obj, delimiter); } } + + static getTreeNodeObject(nodeTree: Array>, id: string): TreeNode { + 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; + } + } + } + return null; + } } diff --git a/src/services/collection.service.ts b/src/services/collection.service.ts index 42a0f483613..358e5408f15 100644 --- a/src/services/collection.service.ts +++ b/src/services/collection.service.ts @@ -111,6 +111,11 @@ export class CollectionService implements CollectionServiceAbstraction { return nodes; } + async getNested(id: string): Promise> { + const collections = await this.getAllNested(); + return ServiceUtils.getTreeNodeObject(collections, id) as TreeNode; + } + async upsert(collection: CollectionData | CollectionData[]): Promise { const userId = await this.userService.getUserId(); let collections = await this.storageService.get<{ [id: string]: CollectionData; }>( diff --git a/src/services/folder.service.ts b/src/services/folder.service.ts index 6ca6875de06..dc68a55d203 100644 --- a/src/services/folder.service.ts +++ b/src/services/folder.service.ts @@ -110,6 +110,11 @@ export class FolderService implements FolderServiceAbstraction { return nodes; } + async getNested(id: string): Promise> { + const folders = await this.getAllNested(); + return ServiceUtils.getTreeNodeObject(folders, id) as TreeNode; + } + async saveWithServer(folder: Folder): Promise { const request = new FolderRequest(folder);