Skip to content

Commit

Permalink
Add selection of Role in the User Group wizard #5285
Browse files Browse the repository at this point in the history
Added roles rendering, when displaying item in Item statistics panel.
  • Loading branch information
edloidas committed Aug 8, 2017
1 parent bc358c6 commit bacd3aa
Show file tree
Hide file tree
Showing 2 changed files with 75 additions and 17 deletions.
Expand Up @@ -68,10 +68,12 @@
}
}

&.group-and-role .data-list li {

&.list-header {
min-height: 20px;
&.group,
&.role {
.data-list li {
&.list-header {
min-height: 20px;
}
}
}

Expand All @@ -86,4 +88,4 @@

}
}
}
}
Expand Up @@ -46,10 +46,10 @@ export class UserItemStatisticsPanel extends ItemStatisticsPanel<UserTreeGridIte
this.appendUserMetadata(item);
break;
case PrincipalType.GROUP:
this.appendGroupRoleMetadata(item);
this.appendGroupMetadata(item);
break;
case PrincipalType.ROLE:
this.appendGroupRoleMetadata(item);
this.appendRoleMetadata(item);
break;
}
}
Expand Down Expand Up @@ -108,14 +108,72 @@ export class UserItemStatisticsPanel extends ItemStatisticsPanel<UserTreeGridIte
}).done();
}

private appendGroupRoleMetadata(item: ViewItem<UserTreeGridItem>) {
private appendGroupMetadata(item: ViewItem<UserTreeGridItem>) {
// Insert an empty data first to avoid blinking, after full data is loaded.
const type = PrincipalType[item.getModel().getPrincipal().getType()];
const name = type.charAt(0) + type.slice(1).toLowerCase();

const groupAndRoleGroup = new ItemDataGroup(name, 'group-and-role');
groupAndRoleGroup.appendChild(new api.dom.DivEl('description').setHtml(item.getModel().getPrincipal().getDescription()));
this.userDataContainer.appendChild(groupAndRoleGroup);
const groupGroup = new ItemDataGroup(name, 'group');
groupGroup.appendChild(new api.dom.DivEl('description').setHtml(item.getModel().getPrincipal().getDescription()));
this.userDataContainer.appendChild(groupGroup);

const rolesGroup = new ItemDataGroup(i18n('field.roles'), 'roles');
rolesGroup.addDataArray(i18n('field.roles'), []);
this.userDataContainer.appendChild(rolesGroup);

const membersGroup = new ItemDataGroup(i18n('field.members'), 'members');
membersGroup.addDataArray(i18n('field.members'), []);
this.userDataContainer.appendChild(membersGroup);

new GetPrincipalByKeyRequest(item.getModel().getPrincipal().getKey())
.setIncludeMemberships(true)
.sendAndParse()
.then((principal: Principal) => {

const group = principal.asGroup();

const newRolesGroup = new ItemDataGroup(i18n('field.roles'), 'roles');
newRolesGroup.addDataElements(null, group.getMemberships().map((el) => {
const viewer = new PrincipalViewer();
viewer.setObject(el);
return viewer;
}));

const membersPromises = group.getMembers().map((el) => {
return new GetPrincipalByKeyRequest(el).sendAndParse();
});

wemQ.all(membersPromises).then((results: Principal[]) => {

const newMembersGroup = new ItemDataGroup(i18n('field.members'), 'members');

newMembersGroup.addDataElements(null, results.map((el) => {
const viewer = new PrincipalViewer();
viewer.setObject(el);
return viewer;
}));

this.userDataContainer.removeChildren();
this.userDataContainer.appendChild(groupGroup);
this.userDataContainer.appendChild(newRolesGroup);
this.userDataContainer.appendChild(newMembersGroup);
}).catch((reason: any) => {
api.DefaultErrorHandler.handle(reason);
}).done();

}).catch((reason: any) => {
api.DefaultErrorHandler.handle(reason);
}).done();
}

private appendRoleMetadata(item: ViewItem<UserTreeGridItem>) {
// Insert an empty data first to avoid blinking, after full data is loaded.
const type = PrincipalType[item.getModel().getPrincipal().getType()];
const name = type.charAt(0) + type.slice(1).toLowerCase();

const roleGroup = new ItemDataGroup(name, 'role');
roleGroup.appendChild(new api.dom.DivEl('description').setHtml(item.getModel().getPrincipal().getDescription()));
this.userDataContainer.appendChild(roleGroup);

const membersGroup = new ItemDataGroup(i18n('field.members'), 'members');
membersGroup.addDataArray(i18n('field.members'), []);
Expand All @@ -126,11 +184,9 @@ export class UserItemStatisticsPanel extends ItemStatisticsPanel<UserTreeGridIte
.sendAndParse()
.then((principal: Principal) => {

const membersPromises =
(principal.isGroup() ? principal.asGroup().getMembers() : principal.asRole().getMembers())
.map((el) => {
return new GetPrincipalByKeyRequest(el).sendAndParse();
});
const membersPromises = principal.asRole().getMembers().map((el) => {
return new GetPrincipalByKeyRequest(el).sendAndParse();
});

wemQ.all(membersPromises).then((results: Principal[]) => {

Expand All @@ -143,7 +199,7 @@ export class UserItemStatisticsPanel extends ItemStatisticsPanel<UserTreeGridIte
}));

this.userDataContainer.removeChildren();
this.userDataContainer.appendChild(groupAndRoleGroup);
this.userDataContainer.appendChild(roleGroup);
this.userDataContainer.appendChild(newMembersGroup);
}).catch((reason: any) => {
api.DefaultErrorHandler.handle(reason);
Expand Down

0 comments on commit bacd3aa

Please sign in to comment.