Skip to content

Commit 1975c63

Browse files
Merge branch 'w2p-107155_Performance-re-request-embeds-7.6' into w2p-107155_Performance-re-request-embeds-main
# Conflicts: # src/app/collection-page/collection-page.component.ts # src/app/core/breadcrumbs/item-breadcrumb.resolver.ts # src/app/core/browse/browse.service.spec.ts # src/app/core/browse/browse.service.ts # src/app/core/data/relationship-data.service.spec.ts # src/app/core/data/relationship-data.service.ts # src/app/item-page/edit-item-page/abstract-item-update/abstract-item-update.component.ts # src/app/item-page/edit-item-page/item-relationships/edit-relationship-list/edit-relationship-list.component.spec.ts # src/app/item-page/edit-item-page/item-relationships/edit-relationship-list/edit-relationship-list.component.ts # src/app/item-page/item.resolver.ts # src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-container.component.ts # src/app/shared/utils/relation-query.utils.ts
2 parents ecb0de7 + b709ee0 commit 1975c63

File tree

13 files changed

+68
-53
lines changed

13 files changed

+68
-53
lines changed

src/app/core/breadcrumbs/item-breadcrumb.resolver.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import {
77
import { Observable } from 'rxjs';
88

99
import { BreadcrumbConfig } from '../../breadcrumbs/breadcrumb/breadcrumb-config.model';
10-
import { ITEM_PAGE_LINKS_TO_FOLLOW } from '../../item-page/item.resolver';
10+
import { getItemPageLinksToFollow } from '../../item-page/item.resolver';
1111
import { FollowLinkConfig } from '../../shared/utils/follow-link-config.model';
1212
import { ItemDataService } from '../data/item-data.service';
1313
import { DSpaceObject } from '../shared/dspace-object.model';
@@ -24,7 +24,7 @@ export const itemBreadcrumbResolver: ResolveFn<BreadcrumbConfig<Item>> = (
2424
breadcrumbService: DSOBreadcrumbsService = inject(DSOBreadcrumbsService),
2525
dataService: ItemDataService = inject(ItemDataService),
2626
): Observable<BreadcrumbConfig<Item>> => {
27-
const linksToFollow: FollowLinkConfig<DSpaceObject>[] = ITEM_PAGE_LINKS_TO_FOLLOW as FollowLinkConfig<DSpaceObject>[];
27+
const linksToFollow: FollowLinkConfig<DSpaceObject>[] = getItemPageLinksToFollow() as FollowLinkConfig<DSpaceObject>[];
2828
return DSOBreadcrumbResolver(
2929
route,
3030
state,

src/app/core/browse/browse.service.spec.ts

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import { of as observableOf } from 'rxjs';
77
import { TestScheduler } from 'rxjs/testing';
88

99
import { getMockHrefOnlyDataService } from '../../shared/mocks/href-only-data.service.mock';
10-
import { getMockRemoteDataBuildService } from '../../shared/mocks/remote-data-build.service.mock';
1110
import { getMockRequestService } from '../../shared/mocks/request.service.mock';
1211
import {
1312
createSuccessfulRemoteDataObject,
@@ -18,7 +17,6 @@ import {
1817
createPaginatedList,
1918
getFirstUsedArgumentOfSpyMethod,
2019
} from '../../shared/testing/utils.test';
21-
import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service';
2220
import { RequestService } from '../data/request.service';
2321
import { RequestEntry } from '../data/request-entry.model';
2422
import { FlatBrowseDefinition } from '../shared/flat-browse-definition.model';
@@ -31,7 +29,6 @@ describe('BrowseService', () => {
3129
let scheduler: TestScheduler;
3230
let service: BrowseService;
3331
let requestService: RequestService;
34-
let rdbService: RemoteDataBuildService;
3532

3633
const browsesEndpointURL = 'https://rest.api/browses';
3734
const halService: any = new HALEndpointServiceStub(browsesEndpointURL);
@@ -129,7 +126,6 @@ describe('BrowseService', () => {
129126
halService,
130127
browseDefinitionDataService,
131128
hrefOnlyDataService,
132-
rdbService,
133129
);
134130
}
135131

@@ -141,11 +137,9 @@ describe('BrowseService', () => {
141137

142138
beforeEach(() => {
143139
requestService = getMockRequestService(getRequestEntry$(true));
144-
rdbService = getMockRemoteDataBuildService();
145140
service = initTestService();
146141
spyOn(halService, 'getEndpoint').and
147142
.returnValue(hot('--a-', { a: browsesEndpointURL }));
148-
spyOn(rdbService, 'buildList').and.callThrough();
149143
});
150144

151145
it('should call BrowseDefinitionDataService to create the RemoteData Observable', () => {
@@ -162,9 +156,7 @@ describe('BrowseService', () => {
162156

163157
beforeEach(() => {
164158
requestService = getMockRequestService(getRequestEntry$(true));
165-
rdbService = getMockRemoteDataBuildService();
166159
service = initTestService();
167-
spyOn(rdbService, 'buildList').and.callThrough();
168160
});
169161

170162
describe('when getBrowseEntriesFor is called with a valid browse definition id', () => {
@@ -215,7 +207,6 @@ describe('BrowseService', () => {
215207
describe('if getBrowseDefinitions fires', () => {
216208
beforeEach(() => {
217209
requestService = getMockRequestService(getRequestEntry$(true));
218-
rdbService = getMockRemoteDataBuildService();
219210
service = initTestService();
220211
spyOn(service, 'getBrowseDefinitions').and
221212
.returnValue(hot('--a-', {
@@ -270,7 +261,6 @@ describe('BrowseService', () => {
270261
describe('if getBrowseDefinitions doesn\'t fire', () => {
271262
it('should return undefined', () => {
272263
requestService = getMockRequestService(getRequestEntry$(true));
273-
rdbService = getMockRemoteDataBuildService();
274264
service = initTestService();
275265
spyOn(service, 'getBrowseDefinitions').and
276266
.returnValue(hot('----'));
@@ -288,9 +278,7 @@ describe('BrowseService', () => {
288278
describe('getFirstItemFor', () => {
289279
beforeEach(() => {
290280
requestService = getMockRequestService();
291-
rdbService = getMockRemoteDataBuildService();
292281
service = initTestService();
293-
spyOn(rdbService, 'buildList').and.callThrough();
294282
});
295283

296284
describe('when getFirstItemFor is called with a valid browse definition id', () => {

src/app/core/browse/browse.service.ts

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import {
66
startWith,
77
} from 'rxjs/operators';
88

9+
import { environment } from '../../../environments/environment';
910
import {
1011
hasValue,
1112
hasValueOperator,
@@ -16,7 +17,6 @@ import {
1617
followLink,
1718
FollowLinkConfig,
1819
} from '../../shared/utils/follow-link-config.model';
19-
import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service';
2020
import { SortDirection } from '../cache/models/sort-options.model';
2121
import { HrefOnlyDataService } from '../data/href-only-data.service';
2222
import { PaginatedList } from '../data/paginated-list.model';
@@ -38,9 +38,15 @@ import { URLCombiner } from '../url-combiner/url-combiner';
3838
import { BrowseDefinitionDataService } from './browse-definition-data.service';
3939
import { BrowseEntrySearchOptions } from './browse-entry-search-options.model';
4040

41-
export const BROWSE_LINKS_TO_FOLLOW: FollowLinkConfig<BrowseEntry | Item>[] = [
42-
followLink('thumbnail'),
43-
];
41+
export function getBrowseLinksToFollow(): FollowLinkConfig<BrowseEntry | Item>[] {
42+
const followLinks = [
43+
followLink('thumbnail'),
44+
];
45+
if (environment.item.showAccessStatuses) {
46+
followLinks.push(followLink('accessStatus'));
47+
}
48+
return followLinks;
49+
}
4450

4551
/**
4652
* The service handling all browse requests
@@ -67,7 +73,6 @@ export class BrowseService {
6773
protected halService: HALEndpointService,
6874
private browseDefinitionDataService: BrowseDefinitionDataService,
6975
private hrefOnlyDataService: HrefOnlyDataService,
70-
private rdb: RemoteDataBuildService,
7176
) {
7277
}
7378

@@ -117,7 +122,7 @@ export class BrowseService {
117122
}),
118123
);
119124
if (options.fetchThumbnail ) {
120-
return this.hrefOnlyDataService.findListByHref<BrowseEntry>(href$, {}, undefined, undefined, ...BROWSE_LINKS_TO_FOLLOW);
125+
return this.hrefOnlyDataService.findListByHref<BrowseEntry>(href$, {}, undefined, undefined, ...getBrowseLinksToFollow());
121126
}
122127
return this.hrefOnlyDataService.findListByHref<BrowseEntry>(href$);
123128
}
@@ -165,7 +170,7 @@ export class BrowseService {
165170
}),
166171
);
167172
if (options.fetchThumbnail) {
168-
return this.hrefOnlyDataService.findListByHref<Item>(href$, {}, undefined, undefined, ...BROWSE_LINKS_TO_FOLLOW);
173+
return this.hrefOnlyDataService.findListByHref<Item>(href$, {}, undefined, undefined, ...getBrowseLinksToFollow());
169174
}
170175
return this.hrefOnlyDataService.findListByHref<Item>(href$);
171176
}

src/app/core/data/relationship-data.service.spec.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ import { Store } from '@ngrx/store';
33
import { provideMockStore } from '@ngrx/store/testing';
44
import { of as observableOf } from 'rxjs';
55

6+
import { APP_CONFIG } from '../../../config/app-config.interface';
7+
import { environment } from '../../../environments/environment.test';
68
import { PAGINATED_RELATIONS_TO_ITEMS_OPERATOR } from '../../item-page/simple/item-types/shared/item-relationships-utils';
79
import { getMockRemoteDataBuildServiceHrefMap } from '../../shared/mocks/remote-data-build.service.mock';
810
import { getMockRequestService } from '../../shared/mocks/request.service.mock';
@@ -150,14 +152,15 @@ describe('RelationshipDataService', () => {
150152
{ provide: RequestService, useValue: requestService },
151153
{ provide: PAGINATED_RELATIONS_TO_ITEMS_OPERATOR, useValue: jasmine.createSpy('paginatedRelationsToItems').and.returnValue((v) => v) },
152154
{ provide: Store, useValue: provideMockStore() },
155+
{ provide: APP_CONFIG, useValue: environment },
153156
RelationshipDataService,
154157
],
155158
});
156159
service = TestBed.inject(RelationshipDataService);
157160
});
158161

159162
describe('composition', () => {
160-
const initService = () => new RelationshipDataService(null, null, null, null, null, null, null, null);
163+
const initService = () => new RelationshipDataService(null, null, null, null, null, null, null, null, environment);
161164

162165
testSearchDataImplementation(initService);
163166
});

src/app/core/data/relationship-data.service.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@ import {
2424
tap,
2525
} from 'rxjs/operators';
2626

27+
import {
28+
APP_CONFIG,
29+
AppConfig,
30+
} from '../../../config/app-config.interface';
2731
import {
2832
AppState,
2933
keySelector,
@@ -133,6 +137,7 @@ export class RelationshipDataService extends IdentifiableDataService<Relationshi
133137
protected itemService: ItemDataService,
134138
protected appStore: Store<AppState>,
135139
@Inject(PAGINATED_RELATIONS_TO_ITEMS_OPERATOR) private paginatedRelationsToItems: (thisId: string) => (source: Observable<RemoteData<PaginatedList<Relationship>>>) => Observable<RemoteData<PaginatedList<Item>>>,
140+
@Inject(APP_CONFIG) private appConfig: AppConfig,
136141
) {
137142
super('relationships', requestService, rdbService, objectCache, halService, 15 * 60 * 1000);
138143

@@ -319,7 +324,7 @@ export class RelationshipDataService extends IdentifiableDataService<Relationshi
319324
* @param options
320325
*/
321326
getRelatedItemsByLabel(item: Item, label: string, options?: FindListOptions): Observable<RemoteData<PaginatedList<Item>>> {
322-
const linksToFollow: FollowLinkConfig<Relationship>[] = itemLinksToFollow(options.fetchThumbnail);
327+
const linksToFollow: FollowLinkConfig<Relationship>[] = itemLinksToFollow(options.fetchThumbnail, this.appConfig.item.showAccessStatuses);
323328
linksToFollow.push(followLink('relationshipType'));
324329

325330
return this.getItemRelationshipsByLabel(item, label, options, true, true, ...linksToFollow).pipe(this.paginatedRelationsToItems(item.uuid));

src/app/home-page/recent-item-list/recent-item-list.component.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,9 @@ export class RecentItemListComponent implements OnInit, OnDestroy {
9898
if (this.appConfig.browseBy.showThumbnails) {
9999
linksToFollow.push(followLink('thumbnail'));
100100
}
101+
if (this.appConfig.item.showAccessStatuses) {
102+
linksToFollow.push(followLink('accessStatus'));
103+
}
101104

102105
this.itemRD$ = this.searchService.search(
103106
new PaginatedSearchOptions({

src/app/item-page/edit-item-page/abstract-item-update/abstract-item-update.component.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ import { getAllSucceededRemoteData } from '../../../core/shared/operators';
3333
import { hasValue } from '../../../shared/empty.util';
3434
import { NotificationsService } from '../../../shared/notifications/notifications.service';
3535
import { AbstractTrackableComponent } from '../../../shared/trackable/abstract-trackable.component';
36-
import { ITEM_PAGE_LINKS_TO_FOLLOW } from '../../item.resolver';
36+
import { getItemPageLinksToFollow } from '../../item.resolver';
3737
import { getItemPageRoute } from '../../item-page-routing-paths';
3838

3939
@Component({
@@ -92,7 +92,7 @@ export class AbstractItemUpdateComponent extends AbstractTrackableComponent impl
9292
this.item = rd.payload;
9393
}),
9494
switchMap((rd: RemoteData<Item>) => {
95-
return this.itemService.findByHref(rd.payload._links.self.href, true, true, ...ITEM_PAGE_LINKS_TO_FOLLOW);
95+
return this.itemService.findByHref(rd.payload._links.self.href, true, true, ...getItemPageLinksToFollow());
9696
}),
9797
getAllSucceededRemoteData(),
9898
).subscribe((rd: RemoteData<Item>) => {

src/app/item-page/edit-item-page/item-delete/item-delete.component.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -320,8 +320,8 @@ export class ItemDeleteComponent
320320
this.linkService.resolveLinks(
321321
relationship,
322322
followLink('relationshipType'),
323-
followLink('leftItem'),
324-
followLink('rightItem'),
323+
followLink('leftItem', undefined, followLink<Item>('accessStatus')),
324+
followLink('rightItem', undefined, followLink<Item>('accessStatus')),
325325
);
326326
return relationship.relationshipType.pipe(
327327
getFirstSucceededRemoteData(),

src/app/item-page/edit-item-page/item-relationships/edit-relationship-list/edit-relationship-list.component.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -478,7 +478,7 @@ export class EditRelationshipListComponent implements OnInit, OnDestroy {
478478
);
479479

480480
// this adds thumbnail images when required by configuration
481-
const linksToFollow: FollowLinkConfig<Relationship>[] = itemLinksToFollow(this.fetchThumbnail);
481+
const linksToFollow: FollowLinkConfig<Relationship>[] = itemLinksToFollow(this.fetchThumbnail, this.appConfig.item.showAccessStatuses);
482482

483483
this.subs.push(
484484
observableCombineLatest([

src/app/item-page/item-page.resolver.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import { redirectOn4xx } from '../core/shared/authorized.operators';
1818
import { Item } from '../core/shared/item.model';
1919
import { getFirstCompletedRemoteData } from '../core/shared/operators';
2020
import { hasValue } from '../shared/empty.util';
21-
import { ITEM_PAGE_LINKS_TO_FOLLOW } from './item.resolver';
21+
import { getItemPageLinksToFollow } from './item.resolver';
2222
import { getItemPageRoute } from './item-page-routing-paths';
2323

2424
/**
@@ -44,7 +44,7 @@ export const itemPageResolver: ResolveFn<RemoteData<Item>> = (
4444
route.params.id,
4545
true,
4646
false,
47-
...ITEM_PAGE_LINKS_TO_FOLLOW,
47+
...getItemPageLinksToFollow(),
4848
).pipe(
4949
getFirstCompletedRemoteData(),
5050
redirectOn4xx(router, authService),

0 commit comments

Comments
 (0)