Skip to content

Commit 88a0b99

Browse files
committed
fix(profile): loading edge cases of Organizations and Groups pages
* Instant spinners were displayed for use cases when array of loaded vos/groups was empty - now the behavior is fixed also for cases when the user doesn't have any memberhip. * Also the bug of vos filter on Groups page was fixed (filter wasn't applied if there was no group membership under the selected vo).
1 parent 54347b1 commit 88a0b99

File tree

8 files changed

+27
-28
lines changed

8 files changed

+27
-28
lines changed

apps/user-profile/src/app/components/membership-list/membership-list.component.html

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,6 @@
6868
</perun-web-apps-table-wrapper>
6969
</div>
7070

71-
<perun-web-apps-alert
72-
*ngIf="!dataSource.filteredData.length"
73-
alert_type="warn"
74-
>{{'MEMBERSHIP_LIST.NO_MEMBERSHIPS' | customTranslate | translate}}</perun-web-apps-alert
75-
>
71+
<perun-web-apps-alert *ngIf="!dataSource.filteredData.length" alert_type="warn">
72+
{{ noMembershipFoundAlert | customTranslate | translate}}
73+
</perun-web-apps-alert>

apps/user-profile/src/app/components/membership-list/membership-list.component.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ export class MembershipListComponent implements OnChanges, AfterViewInit {
4444
];
4545
@Input() tableId: string;
4646
@Input() filterValue = '';
47+
@Input() noMembershipFoundAlert = '';
4748
@Output() extendMembership: EventEmitter<Membership> = new EventEmitter<Membership>();
4849
dataSource: MatTableDataSource<Membership>;
4950
pageSizeOptions = TABLE_ITEMS_COUNT_OPTIONS;

apps/user-profile/src/app/pages/groups-page/groups-page.component.html

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,26 +14,21 @@ <h1 class="page-title pt-2">{{'GROUPS.TITLE' | customTranslate | translate}}</h1
1414
[displayWith]="displayFn"
1515
(optionSelected)="filterByVo($event)">
1616
<mat-option value="all">{{'GROUPS.ALL' | customTranslate | translate}}</mat-option>
17-
<mat-option *ngFor="let vo of filteredVos | async" [value]="vo">
17+
<mat-option *ngFor="let vo of vos" [value]="vo">
1818
{{vo.name}}
1919
</mat-option>
2020
</mat-autocomplete>
2121
</mat-form-field>
2222

2323
<mat-spinner *ngIf="initialLoading" class="me-auto ms-auto"></mat-spinner>
2424

25-
<perun-web-apps-alert
26-
alert_type="warn"
27-
*ngIf="!userMemberships.length && !adminMemberships.length && !loading"
28-
>{{'GROUPS.NO_GROUPS'| customTranslate | translate}}</perun-web-apps-alert
29-
>
30-
3125
<h4 class="page-subtitle">{{'GROUPS.MEMBER_GROUPS' | customTranslate | translate}}</h4>
3226
<div class="position-relative">
3327
<perun-web-apps-membership-list
3428
*perunWebAppsLoader="loading; indicator: spinner"
3529
[members]="userMemberships"
3630
[selection]="selection"
31+
[noMembershipFoundAlert]="'GROUPS.NO_GROUPS'"
3732
[displayedColumns]="['name', 'description', 'expirationAttribute', 'extend']"
3833
(extendMembership)="extendMembership($event)"></perun-web-apps-membership-list>
3934
</div>
@@ -43,6 +38,7 @@ <h4 class="page-subtitle mt-5">{{'GROUPS.ADMINS_GROUPS' | customTranslate | tran
4338
<perun-web-apps-membership-list
4439
*perunWebAppsLoader="loading; indicator: spinner"
4540
[members]="adminMemberships"
41+
[noMembershipFoundAlert]="'GROUPS.NO_GROUPS'"
4642
[displayedColumns]="['name', 'description']"></perun-web-apps-membership-list>
4743
</div>
4844

apps/user-profile/src/app/pages/groups-page/groups-page.component.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,14 +68,23 @@ export class GroupsPageComponent implements OnInit {
6868
this.userMembershipsTemp = [];
6969
this.adminMembershipsTemp = [];
7070
const allMemberIds = this.store.getPerunPrincipal().roles['SELF']['Member'];
71-
if (!allMemberIds.length) {
71+
// finish when the user has no membership
72+
if (allMemberIds === undefined || !allMemberIds.length) {
7273
this.loading = false;
74+
this.initialLoading = false;
75+
return;
7376
} else {
7477
j = allMemberIds.length;
7578
}
7679
allMemberIds.forEach((memberId) => {
7780
j--;
7881
this.groupService.getMemberGroups(memberId).subscribe((groups) => {
82+
// finish when the user has no group membership
83+
if (groups.length === 0) {
84+
this.initialLoading = false;
85+
this.loading = false;
86+
return;
87+
}
7988
i += groups.length;
8089
groups.forEach((group) => {
8190
this.attributesManagerService
@@ -119,6 +128,10 @@ export class GroupsPageComponent implements OnInit {
119128
const vo: Vo = event.option.value as Vo;
120129
this.memberService.getMemberByUser(vo.id, this.userId).subscribe((member) => {
121130
this.groupService.getMemberGroups(member.id).subscribe((groups) => {
131+
// refresh displayed data for vo where user has no group membership
132+
if (groups.length === 0) {
133+
this.addToLists();
134+
}
122135
let i = groups.length;
123136
this.loading = i !== 0;
124137
groups.forEach((group) => {

apps/user-profile/src/app/pages/vos-page/vos-page.component.html

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,34 +6,26 @@ <h1 class="page-title mt-2">{{'ORGANIZATIONS.TITLE' | customTranslate | translat
66

77
<div class="mt-5">
88
<h1 class="page-subtitle">{{'ORGANIZATIONS.IS_MEMBER' | customTranslate | translate}}</h1>
9-
<div class="position-relative" *ngIf="userMemberships.length || loading">
9+
<div class="position-relative">
1010
<perun-web-apps-membership-list
1111
*perunWebAppsLoader="loading; indicator: spinner"
1212
[members]="userMemberships"
1313
[filterValue]="filterValue"
14+
[noMembershipFoundAlert]="'ORGANIZATIONS.NO_VOS_ALERT'"
1415
[displayedColumns]="['name', 'expirationAttribute', 'extend']"
1516
(extendMembership)="extendMembership($event)">
1617
</perun-web-apps-membership-list>
1718
</div>
18-
<perun-web-apps-alert
19-
alert_type="warn"
20-
*ngIf="userMemberships.length === 0 && !loading"
21-
>{{'ORGANIZATIONS.NO_VOS_ALERT' | customTranslate | translate}}</perun-web-apps-alert
22-
>
2319
</div>
2420

2521
<div class="mt-5">
2622
<h1 class="page-subtitle">{{'ORGANIZATIONS.IS_ADMIN' | customTranslate | translate}}</h1>
27-
<perun-web-apps-alert
28-
*ngIf="!adminMemberships.length && !loading"
29-
alert_type="warn"
30-
>{{'ORGANIZATIONS.NO_VOS_ALERT' | customTranslate | translate}}</perun-web-apps-alert
31-
>
32-
<div class="position-relative" *ngIf="adminMemberships.length || loading">
23+
<div class="position-relative">
3324
<perun-web-apps-membership-list
3425
*perunWebAppsLoader="loading; indicator: spinner"
3526
[members]="adminMemberships"
3627
[filterValue]="filterValue"
28+
[noMembershipFoundAlert]="'ORGANIZATIONS.NO_VOS_ALERT'"
3729
[displayedColumns]="['name']">
3830
</perun-web-apps-membership-list>
3931
</div>

apps/user-profile/src/app/pages/vos-page/vos-page.component.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ export class VosPageComponent implements OnInit {
7070

7171
private fillMemberships(vos: Array<Vo>, memberships: Membership[]): void {
7272
this.membersService.getMembersByUser(this.userId).subscribe((members) => {
73+
if (vos.length === 0) this.loading = false;
7374
vos.forEach((vo) => {
7475
const member = members.find((mem) => mem.voId === vo.id);
7576
if (!member) {

apps/user-profile/src/assets/i18n/cs.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
"FILTER": "Filtrovat dle jména",
4141
"MEMBER_GROUPS": "Skupiny ve kterých jste členem",
4242
"ADMINS_GROUPS": "Skupiny ve kterých jste administrátorem",
43-
"NO_GROUPS": "Nenalezeny žádné skupiny."
43+
"NO_GROUPS": "Nebyly nalezeny žádné skupiny."
4444
},
4545
"SERVICES": {
4646
"TITLE": "Moje služby",
@@ -95,7 +95,6 @@
9595
"NAME": "Jméno",
9696
"DESCRIPTION": "Popis",
9797
"EXPIRATION": "Expirace členství",
98-
"NO_MEMBERSHIPS": "Žádné výsledky nesplňují zadané vyhledávací parametry.",
9998
"EXTEND": "Prodloužit členství"
10099
},
101100
"SAMBA_PASSWORD": {

apps/user-profile/src/assets/i18n/en.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,6 @@
9595
"NAME": "Name",
9696
"DESCRIPTION": "Description",
9797
"EXPIRATION": "Expiration",
98-
"NO_MEMBERSHIPS": "No results match current filter",
9998
"EXTEND": "Extend"
10099
},
101100
"SAMBA_PASSWORD": {

0 commit comments

Comments
 (0)