From 06c6ed18a6ed6c32a04a066c58dc2bf55881a9ad Mon Sep 17 00:00:00 2001 From: Marie Verdonck <maria.verdonck@atmire.com> Date: Mon, 30 Mar 2020 11:49:07 +0200 Subject: [PATCH] [groups/epeople admin pages] No adding current active group itself as own subgroup: * Added message if trying to add current group (that is being edited) as own subgroup * Removed possible add/delete button from current group being edited in subgroups list, replace with message --- resources/i18n/en.json5 | 4 ++ .../subgroups-list.component.html | 6 ++- .../subgroup-list/subgroups-list.component.ts | 52 +++++++++++++------ 3 files changed, 45 insertions(+), 17 deletions(-) diff --git a/resources/i18n/en.json5 b/resources/i18n/en.json5 index e099f475b4..f4eab6329c 100644 --- a/resources/i18n/en.json5 +++ b/resources/i18n/en.json5 @@ -349,6 +349,8 @@ "admin.access-control.groups.form.subgroups-list.table.edit.buttons.add": "Add subgroup with name \"{{name}}\"", + "admin.access-control.groups.form.subgroups-list.table.edit.currentGroup": "Current group", + "admin.access-control.groups.form.subgroups-list.notification.success.addSubgroup": "Successfully added subgroup: \"{{name}}\"", "admin.access-control.groups.form.subgroups-list.notification.failure.addSubgroup": "Failed to add subgroup: \"{{name}}\"", @@ -359,6 +361,8 @@ "admin.access-control.groups.form.subgroups-list.notification.failure.noActiveGroup": "No current active group, submit a name first.", + "admin.access-control.groups.form.subgroups-list.notification.failure.subgroupToAddIsActiveGroup": "This is the current group, can't be added.", + "admin.access-control.groups.form.subgroups-list.no-items": "No groups found with this in their name or this as UUID", "admin.access-control.groups.form.subgroups-list.no-subgroups-yet": "No subgroups in group yet.", diff --git a/src/app/+admin/admin-access-control/group-registry/group-form/subgroup-list/subgroups-list.component.html b/src/app/+admin/admin-access-control/group-registry/group-form/subgroup-list/subgroups-list.component.html index 4901e4cfe0..9558b9da98 100644 --- a/src/app/+admin/admin-access-control/group-registry/group-form/subgroup-list/subgroups-list.component.html +++ b/src/app/+admin/admin-access-control/group-registry/group-form/subgroup-list/subgroups-list.component.html @@ -42,14 +42,16 @@ [routerLink]="[groupDataService.getGroupEditPageRouterLink(group)]">{{group.name}}</a></td> <td> <div class="btn-group edit-field"> - <button *ngIf="(isSubgroupOfGroup(group) | async)" + <button *ngIf="(isSubgroupOfGroup(group) | async) && !(isActiveGroup(group) | async)" (click)="deleteSubgroupFromGroup(group)" class="btn btn-outline-danger btn-sm deleteButton" title="{{messagePrefix + '.table.edit.buttons.remove' | translate: {name: group.name} }}"> <i class="fas fa-trash-alt fa-fw"></i> </button> - <button *ngIf="!(isSubgroupOfGroup(group) | async)" + <p *ngIf="(isActiveGroup(group) | async)">{{ messagePrefix + '.table.edit.currentGroup' | translate }}</p> + + <button *ngIf="!(isSubgroupOfGroup(group) | async) && !(isActiveGroup(group) | async)" (click)="addSubgroupToGroup(group)" class="btn btn-outline-primary btn-sm addButton" title="{{messagePrefix + '.table.edit.buttons.add' | translate: {name: group.name} }}"> diff --git a/src/app/+admin/admin-access-control/group-registry/group-form/subgroup-list/subgroups-list.component.ts b/src/app/+admin/admin-access-control/group-registry/group-form/subgroup-list/subgroups-list.component.ts index 09d38c7c3e..b7092dd5e2 100644 --- a/src/app/+admin/admin-access-control/group-registry/group-form/subgroup-list/subgroups-list.component.ts +++ b/src/app/+admin/admin-access-control/group-registry/group-form/subgroup-list/subgroups-list.component.ts @@ -115,23 +115,41 @@ export class SubgroupsListComponent implements OnInit, OnDestroy { */ isSubgroupOfGroup(possibleSubgroup: Group): Observable<boolean> { return this.groupDataService.getActiveGroup().pipe(take(1), - mergeMap((group: Group) => { - if (group != null) { - return this.groupDataService.findAllByHref(group._links.subgroups.href, { - currentPage: 0, - elementsPerPage: Number.MAX_SAFE_INTEGER - }) - .pipe( - getSucceededRemoteData(), - getRemoteDataPayload(), - map((listTotalGroups: PaginatedList<Group>) => listTotalGroups.page.filter((groupInList: Group) => groupInList.id === possibleSubgroup.id)), - map((groups: Group[]) => groups.length > 0)) - } else { + mergeMap((activeGroup: Group) => { + if (activeGroup != null) { + if (activeGroup.uuid === possibleSubgroup.uuid) { + return observableOf(false); + } else { + return this.groupDataService.findAllByHref(activeGroup._links.subgroups.href, { + currentPage: 0, + elementsPerPage: Number.MAX_SAFE_INTEGER + }) + .pipe( + getSucceededRemoteData(), + getRemoteDataPayload(), + map((listTotalGroups: PaginatedList<Group>) => listTotalGroups.page.filter((groupInList: Group) => groupInList.id === possibleSubgroup.id)), + map((groups: Group[]) => groups.length > 0)) + } + } else { return observableOf(false); } })); } + /** + * Whether or not the given group is the current group being edited + * @param group Group that is possibly the current group being edited + */ + isActiveGroup(group: Group): Observable<boolean> { + return this.groupDataService.getActiveGroup().pipe(take(1), + mergeMap((activeGroup: Group) => { + if (activeGroup != null && activeGroup.uuid === group.uuid) { + return observableOf(true); + } + return observableOf(false); + })); + } + /** * Deletes given subgroup from the group currently being edited * @param subgroup Group we want to delete from the subgroups of the group currently being edited @@ -155,9 +173,13 @@ export class SubgroupsListComponent implements OnInit, OnDestroy { addSubgroupToGroup(subgroup: Group) { this.groupDataService.getActiveGroup().pipe(take(1)).subscribe((activeGroup: Group) => { if (activeGroup != null) { - const response = this.groupDataService.addSubGroupToGroup(activeGroup, subgroup); - this.showNotifications('addSubgroup', response, subgroup.name, activeGroup); - this.forceUpdateGroups(activeGroup); + if (activeGroup.uuid !== subgroup.uuid) { + const response = this.groupDataService.addSubGroupToGroup(activeGroup, subgroup); + this.showNotifications('addSubgroup', response, subgroup.name, activeGroup); + this.forceUpdateGroups(activeGroup); + } else { + this.notificationsService.error(this.translateService.get(this.messagePrefix + '.notification.failure.subgroupToAddIsActiveGroup')); + } } else { this.notificationsService.error(this.translateService.get(this.messagePrefix + '.notification.failure.noActiveGroup')); } -- GitLab