From e7e8cfe8da5cfd1e763dd2e5ab58b9d257047585 Mon Sep 17 00:00:00 2001 From: Kyle Spearrin Date: Mon, 7 May 2018 14:53:50 -0400 Subject: [PATCH] fix flatten --- src/services/sync.service.ts | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/src/services/sync.service.ts b/src/services/sync.service.ts index 57648543..6229d3a1 100644 --- a/src/services/sync.service.ts +++ b/src/services/sync.service.ts @@ -56,7 +56,7 @@ export class SyncService { let users = entries[1]; if (groups != null && groups.length > 0) { - this.flattenUsersToGroups(groups, null, groups); + this.flattenUsersToGroups(groups, groups); } if (test || groups == null || groups.length === 0 || users == null || users.length === 0) { @@ -105,18 +105,15 @@ export class SyncService { } } - private flattenUsersToGroups(currentGroups: GroupEntry[], currentGroupsUsers: string[], allGroups: GroupEntry[]) { - for (const group of currentGroups) { - const groupsInThisGroup = allGroups.filter((g) => group.groupMemberReferenceIds.has(g.referenceId)); - let usersInThisGroup = Array.from(group.userMemberExternalIds); - - if (currentGroupsUsers != null) { - currentGroupsUsers.forEach((id) => group.userMemberExternalIds.add(id)); - usersInThisGroup = usersInThisGroup.concat(currentGroupsUsers); - } - - this.flattenUsersToGroups(groupsInThisGroup, usersInThisGroup, allGroups); + private flattenUsersToGroups(levelGroups: GroupEntry[], allGroups: GroupEntry[]): Set { + let allUsers = new Set(); + for (const group of levelGroups) { + const childGroups = allGroups.filter((g) => group.groupMemberReferenceIds.has(g.referenceId)); + const childUsers = this.flattenUsersToGroups(childGroups, allGroups); + childUsers.forEach((id) => group.userMemberExternalIds.add(id)); + allUsers = new Set([...allUsers, ...group.userMemberExternalIds]); } + return allUsers; } private getDirectoryService(): DirectoryService {