Merge branch 'master' into 14566-admin-modal 14566-admin-modal
authorPawel Kowalczyk <pawel.kowalczyk@contractors.roche.com>
Tue, 11 Dec 2018 08:36:30 +0000 (09:36 +0100)
committerPawel Kowalczyk <pawel.kowalczyk@contractors.roche.com>
Tue, 11 Dec 2018 08:36:30 +0000 (09:36 +0100)
refs #14566

Arvados-DCO-1.1-Signed-off-by: Pawel Kowalczyk <pawel.kowalczyk@contractors.roche.com>

src/services/ancestors-service/ancestors-service.ts

index 44e4eef5c944b271eba16c558b43a4d700c4f886..23e7729f7d0324f019de00f529c3dcd4d8022bb9 100644 (file)
@@ -6,7 +6,7 @@ import { GroupsService } from "~/services/groups-service/groups-service";
 import { UserService } from '../user-service/user-service';
 import { GroupResource } from '~/models/group';
 import { UserResource } from '~/models/user';
-import { extractUuidObjectType, ResourceObjectType, TrashableResource } from "~/models/resource";
+import { extractUuidObjectType, ResourceObjectType } from "~/models/resource";
 
 export class AncestorService {
     constructor(
@@ -14,16 +14,25 @@ export class AncestorService {
         private userService: UserService
     ) { }
 
-    async ancestors(uuid: string, rootUuid: string): Promise<Array<UserResource | GroupResource>> {
-        const service = this.getService(extractUuidObjectType(uuid));
+    async ancestors(startUuid: string, endUuid: string): Promise<Array<UserResource | GroupResource>> {
+        return this._ancestors(startUuid, endUuid);
+    }
+
+    private async _ancestors(startUuid: string, endUuid: string, previousUuid = ''): Promise<Array<UserResource | GroupResource>> {
+
+        if (startUuid === previousUuid) {
+            return [];
+        }
+
+        const service = this.getService(extractUuidObjectType(startUuid));
         if (service) {
             try {
-                const resource = await service.get(uuid);
-                if (uuid === rootUuid) {
+                const resource = await service.get(startUuid);
+                if (startUuid === endUuid) {
                     return [resource];
                 } else {
                     return [
-                        ...await this.ancestors(resource.ownerUuid, rootUuid),
+                        ...await this._ancestors(resource.ownerUuid, endUuid, startUuid),
                         resource
                     ];
                 }