Skip to content

Commit 6f5864d

Browse files
authored
Merge pull request #3826 from tdonohue/port_3105_to_7x
[Port dspace-7_x] Fix for User profile (/profile): only 20 group memberships shown instead of all
2 parents fbe4ce5 + 112bed7 commit 6f5864d

File tree

3 files changed

+55
-9
lines changed

3 files changed

+55
-9
lines changed

src/app/profile-page/profile-page.component.html

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,29 @@ <h1>{{'profile.title' | translate}}</h1>
3232
<button class="btn btn-primary" (click)="updateProfile()"><i class="fas fa-edit"></i> {{'profile.form.submit' | translate}}</button>
3333
</div>
3434

35-
<ng-container *ngVar="(groupsRD$ | async)?.payload?.page as groups">
36-
<div *ngIf="groups?.length > 0">
37-
<h2 class="mt-4">{{'profile.groups.head' | translate}}</h2>
38-
<ul class="list-group list-group-flush">
39-
<li *ngFor="let group of groups" class="list-group-item">{{ dsoNameService.getName(group) }}</li>
40-
</ul>
41-
</div>
35+
<ng-container *ngIf="(groupsRD$ | async) as groupsRD;">
36+
<ng-container *ngTemplateOutlet="groupsRD?.isLoading ? loader : content"></ng-container>
37+
<ng-template #content>
38+
<ds-pagination *ngIf="groupsRD?.payload"
39+
[hideGear]="true"
40+
[hidePagerWhenSinglePage]="true"
41+
[hidePaginationDetail]="true"
42+
[paginationOptions]="optionsGroupsPagination"
43+
[collectionSize]="groupsRD?.payload?.totalElements">
44+
<ng-container *ngIf="groupsRD?.payload?.page as groups">
45+
<div *ngIf="groups?.length > 0">
46+
<h2 class="mt-4">{{ 'profile.groups.head' | translate }}</h2>
47+
<ul class="list-group list-group-flush">
48+
<li *ngFor="let group of groups" class="list-group-item">{{ dsoNameService.getName(group) }}</li>
49+
</ul>
50+
</div>
51+
</ng-container>
52+
</ds-pagination>
53+
</ng-template>
54+
<ng-template #loader>
55+
<ds-loading [showMessage]="false"></ds-loading>
56+
</ng-template>
57+
<ds-error *ngIf="groupsRD?.hasFailed" message="{{ 'error.profile-groups' | translate }}"></ds-error>
4258
</ng-container>
4359

4460
<ng-container *ngVar="(specialGroupsRD$ | async)?.payload?.page as specialGroups">

src/app/profile-page/profile-page.component.ts

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,12 @@ import { RemoteData } from '../core/data/remote-data';
99
import { PaginatedList } from '../core/data/paginated-list.model';
1010
import { filter, switchMap, tap } from 'rxjs/operators';
1111
import { EPersonDataService } from '../core/eperson/eperson-data.service';
12-
import { getAllSucceededRemoteData, getFirstCompletedRemoteData, getRemoteDataPayload } from '../core/shared/operators';
12+
import {
13+
getAllCompletedRemoteData,
14+
getAllSucceededRemoteData,
15+
getFirstCompletedRemoteData,
16+
getRemoteDataPayload
17+
} from '../core/shared/operators';
1318
import { hasValue, isNotEmpty } from '../shared/empty.util';
1419
import { followLink } from '../shared/utils/follow-link-config.model';
1520
import { AuthService } from '../core/auth/auth.service';
@@ -19,6 +24,8 @@ import { FeatureID } from '../core/data/feature-authorization/feature-id';
1924
import { ConfigurationDataService } from '../core/data/configuration-data.service';
2025
import { ConfigurationProperty } from '../core/shared/configuration-property.model';
2126
import { DSONameService } from '../core/breadcrumbs/dso-name.service';
27+
import { PaginationService } from '../core/pagination/pagination.service';
28+
import { PaginationComponentOptions } from '../shared/pagination/pagination-component-options.model';
2229

2330
@Component({
2431
selector: 'ds-profile-page',
@@ -79,6 +86,15 @@ export class ProfilePageComponent implements OnInit {
7986
private currentUser: EPerson;
8087
canChangePassword$: Observable<boolean>;
8188

89+
/**
90+
* Default configuration for group pagination
91+
**/
92+
optionsGroupsPagination = Object.assign(new PaginationComponentOptions(),{
93+
id: 'page_groups',
94+
currentPage: 1,
95+
pageSize: 20,
96+
});
97+
8298
isResearcherProfileEnabled$: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);
8399

84100
constructor(private authService: AuthService,
@@ -88,6 +104,7 @@ export class ProfilePageComponent implements OnInit {
88104
private authorizationService: AuthorizationDataService,
89105
private configurationService: ConfigurationDataService,
90106
public dsoNameService: DSONameService,
107+
private paginationService: PaginationService,
91108
) {
92109
}
93110

@@ -99,7 +116,18 @@ export class ProfilePageComponent implements OnInit {
99116
getRemoteDataPayload(),
100117
tap((user: EPerson) => this.currentUser = user)
101118
);
102-
this.groupsRD$ = this.user$.pipe(switchMap((user: EPerson) => user.groups));
119+
this.groupsRD$ = this.paginationService.getCurrentPagination(this.optionsGroupsPagination.id, this.optionsGroupsPagination).pipe(
120+
switchMap((pageOptions: PaginationComponentOptions) => {
121+
return this.epersonService.findById(this.currentUser.id, true, true, followLink('groups',{
122+
findListOptions: {
123+
elementsPerPage: pageOptions.pageSize,
124+
currentPage: pageOptions.currentPage,
125+
} }));
126+
}),
127+
getAllCompletedRemoteData(),
128+
getRemoteDataPayload(),
129+
switchMap((user: EPerson) => user?.groups),
130+
);
103131
this.canChangePassword$ = this.user$.pipe(switchMap((user: EPerson) => this.authorizationService.isAuthorized(FeatureID.CanChangePassword, user._links.self.href)));
104132
this.specialGroupsRD$ = this.authService.getSpecialGroupsFromAuthStatus();
105133

src/assets/i18n/en.json5

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1622,6 +1622,8 @@
16221622

16231623
"error.recent-submissions": "Error fetching recent submissions",
16241624

1625+
"error.profile-groups": "Error retrieving profile groups",
1626+
16251627
"error.search-results": "Error fetching search results",
16261628

16271629
"error.invalid-search-query": "Search query is not valid. Please check <a href=\"https://solr.apache.org/guide/query-syntax-and-parsing.html\" target=\"_blank\">Solr query syntax</a> best practices for further information about this error.",

0 commit comments

Comments
 (0)