Skip to content

Commit

Permalink
Initial fix for GetPrincipalsTotalRequest high number of users bug (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
reisfmb committed May 5, 2022
1 parent 41b4808 commit 854c399
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 19 deletions.
27 changes: 18 additions & 9 deletions src/main/resources/assets/js/app/browse/UserItemsTreeGrid.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ import {Body} from 'lib-admin-ui/dom/Body';
import {i18n} from 'lib-admin-ui/util/Messages';
import {ListPrincipalsKeysResult, ListPrincipalsNamesRequest} from '../../graphql/principal/ListPrincipalsNamesRequest';
import {DefaultErrorHandler} from 'lib-admin-ui/DefaultErrorHandler';
import {GetPrincipalsTotalRequest} from '../../graphql/principal/GetPrincipalsTotalRequest';
import {GetPrincipalsExistenceRequest} from '../../graphql/principal/GetPrincipalsExistenceRequest';

export class UserItemsTreeGrid
extends TreeGrid<UserTreeGridItem> {
Expand Down Expand Up @@ -288,24 +288,33 @@ export class UserItemsTreeGrid

private addUsersGroupsToIdProvider(parentItem: UserTreeGridItem): Q.Promise<UserTreeGridItem[]> {
const idProvider: IdProvider = parentItem.getIdProvider();
const promises: Q.Promise<number>[] = [];
const promises: Q.Promise<boolean>[] = [];

promises.push(this.getTotalPrincipals(idProvider.getKey(), PrincipalType.USER));
promises.push(this.getTotalPrincipals(idProvider.getKey(), PrincipalType.GROUP));

return Q.all(promises).spread((totalUsers: number, totalGroups: number) => {
return Q.all(promises).spread((hasUsers: boolean, hasGroups: boolean) => {
const userFolderItem: UserTreeGridItem =
new UserTreeGridItemBuilder().setIdProvider(idProvider).setType(UserTreeGridItemType.USERS).setHasChildren(
totalUsers > 0).build();
new UserTreeGridItemBuilder()
.setIdProvider(idProvider)
.setType(UserTreeGridItemType.USERS)
.setHasChildren(hasUsers)
.build();
const groupFolderItem: UserTreeGridItem =
new UserTreeGridItemBuilder().setIdProvider(idProvider).setType(UserTreeGridItemType.GROUPS).setHasChildren(
totalGroups > 0).build();
new UserTreeGridItemBuilder()
.setIdProvider(idProvider)
.setType(UserTreeGridItemType.GROUPS)
.setHasChildren(hasGroups)
.build();
return [userFolderItem, groupFolderItem];
});
}

private getTotalPrincipals(idProviderKey: IdProviderKey, type: PrincipalType): Q.Promise<number> {
return new GetPrincipalsTotalRequest().setIdProviderKey(idProviderKey).setTypes([type]).sendAndParse();
private getTotalPrincipals(idProviderKey: IdProviderKey, type: PrincipalType): Q.Promise<boolean> {
return new GetPrincipalsExistenceRequest()
.setIdProviderKey(idProviderKey)
.setTypes([type])
.sendAndParse();
}

private fetchPrincipals(parentNode: TreeNode<UserTreeGridItem>): Q.Promise<UserTreeGridItem[]> {
Expand Down
2 changes: 1 addition & 1 deletion src/main/resources/assets/js/graphql/ListGraphQlRequest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ export class ListGraphQlRequest<PARSED_TYPE>
if (this.start > 0) {
vars['start'] = this.start;
}
if (this.count > 0) {
if (this.count >= 0) {
vars['count'] = this.count;
}
if (!!this.sort) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,24 +3,29 @@ import {PrincipalType} from 'lib-admin-ui/security/PrincipalType';
import {IdProviderKey} from 'lib-admin-ui/security/IdProviderKey';
import {ListPrincipalsProperties} from './ListPrincipalsNamesRequest';

type GetPrincipalsTotalResult = {
type GetPrincipalsExistenceRequestResult = {
principalsConnection: {
totalCount: number
}
};

export class GetPrincipalsTotalRequest
extends ListGraphQlRequest<number> {
export class GetPrincipalsExistenceRequest
extends ListGraphQlRequest<boolean> {

private types: PrincipalType[];
private idProviderKey: IdProviderKey;

setTypes(types: PrincipalType[]): GetPrincipalsTotalRequest {
constructor() {
super();
this.setCount(0);
}

setTypes(types: PrincipalType[]): GetPrincipalsExistenceRequest {
this.types = types;
return this;
}

setIdProviderKey(key: IdProviderKey): GetPrincipalsTotalRequest {
setIdProviderKey(key: IdProviderKey): GetPrincipalsExistenceRequest {
this.idProviderKey = key;
return this;
}
Expand All @@ -45,10 +50,9 @@ export class GetPrincipalsTotalRequest
}`;
}

sendAndParse(): Q.Promise<number> {
return this.query().then((response: GetPrincipalsTotalResult) => {
const data = response.principalsConnection;
return data.totalCount;
sendAndParse(): Q.Promise<boolean> {
return this.query().then((response: GetPrincipalsExistenceRequestResult) => {
return response.principalsConnection.totalCount > 0;
});
}
}

0 comments on commit 854c399

Please sign in to comment.