Skip to content

Commit 71fd35c

Browse files
[DURACOM-413] add new findByIdOrCustomUrl method to item-data.service, adapt code to use new method
1 parent 156a599 commit 71fd35c

10 files changed

Lines changed: 31 additions & 12 deletions

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { Observable } from 'rxjs';
77
import { map } from 'rxjs/operators';
88

99
import { IdentifiableDataService } from '../data/base/identifiable-data.service';
10+
import { ItemDataService } from '../data/item-data.service';
1011
import { getDSORoute } from '../router/utils/dso-route.utils';
1112
import { DSpaceObject } from '../shared/dspace-object.model';
1213
import { FollowLinkConfig } from '../shared/follow-link-config.model';
@@ -55,7 +56,9 @@ export const DSOBreadcrumbResolverByUuid: (route: ActivatedRouteSnapshot, state:
5556
dataService: IdentifiableDataService<DSpaceObject>,
5657
...linksToFollow: FollowLinkConfig<DSpaceObject>[]
5758
): Observable<BreadcrumbConfig<DSpaceObject>> => {
58-
return dataService.findById(uuid, true, false, ...linksToFollow).pipe(
59+
const isItemDataService = dataService instanceof ItemDataService;
60+
const findMethod = isItemDataService ? dataService.findByIdOrCustomUrl.bind(dataService) : dataService.findById.bind(dataService);
61+
return findMethod(uuid, true, false, ...linksToFollow).pipe(
5962
getFirstCompletedRemoteData(),
6063
getRemoteDataPayload(),
6164
map((object: DSpaceObject) => {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -292,7 +292,7 @@ describe('ItemDataService', () => {
292292

293293
it('should call findByCustomUrl when given a non-UUID id', () => {
294294
const nonUuid = 'custom-url';
295-
itemDataService.findById(nonUuid).subscribe();
295+
itemDataService.findByIdOrCustomUrl(nonUuid).subscribe();
296296

297297
expect(itemDataService.findByCustomUrl).toHaveBeenCalledWith(nonUuid, true, true, []);
298298
expect(itemDataService.findByHref).not.toHaveBeenCalled();

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

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -472,17 +472,33 @@ export abstract class BaseItemDataService extends IdentifiableDataService<Item>
472472
* {@link HALLink}s should be automatically resolved
473473
*/
474474
public findById(id: string, useCachedVersionIfAvailable = true, reRequestOnStale = true, ...linksToFollow: FollowLinkConfig<Item>[]): Observable<RemoteData<Item>> {
475+
const href$ = this.getIDHrefObs(encodeURIComponent(id), ...linksToFollow);
476+
return this.findByHref(href$, useCachedVersionIfAvailable, reRequestOnStale, ...linksToFollow);
477+
}
475478

479+
/**
480+
* Returns an observable of {@link RemoteData} of an object, based on its ID or custom URL if the parameter is not a valid id/uuid, with a list of
481+
* {@link FollowLinkConfig}, to automatically resolve {@link HALLink}s of the object
482+
* @param id ID of object we want to retrieve
483+
* @param useCachedVersionIfAvailable If this is true, the request will only be sent if there's
484+
* no valid cached version. Defaults to true
485+
* @param reRequestOnStale Whether or not the request should automatically be re-
486+
* requested after the response becomes stale
487+
* @param linksToFollow List of {@link FollowLinkConfig} that indicate which
488+
* {@link HALLink}s should be automatically resolved
489+
*/
490+
public findByIdOrCustomUrl(id: string, useCachedVersionIfAvailable = true, reRequestOnStale = true, ...linksToFollow: FollowLinkConfig<Item>[]): Observable<RemoteData<Item>> {
476491
if (uuidValidate(id)) {
477-
const href$ = this.getIDHrefObs(encodeURIComponent(id), ...linksToFollow);
478-
return this.findByHref(href$, useCachedVersionIfAvailable, reRequestOnStale, ...linksToFollow);
492+
return this.findById(id, useCachedVersionIfAvailable, reRequestOnStale, ...linksToFollow);
479493
} else {
480494
return this.findByCustomUrl(id, useCachedVersionIfAvailable, reRequestOnStale, linksToFollow);
481495
}
482496
}
483497

484498
}
485499

500+
501+
486502
/**
487503
* A service for CRUD operations on Items
488504
*/

src/app/item-page/edit-item-page/item-page-delete.guard.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ describe('itemPageDeleteGuard', () => {
6161
item = new Item();
6262
item.uuid = uuid;
6363
item._links = { self: { href: itemSelfLink } } as any;
64-
itemService = jasmine.createSpyObj('itemService', { findById: createSuccessfulRemoteDataObject$(item) });
64+
itemService = jasmine.createSpyObj('itemService', { findByIdOrCustomUrl: createSuccessfulRemoteDataObject$(item) });
6565

6666
TestBed.configureTestingModule({
6767
providers: [

src/app/item-page/edit-item-page/item-page-edit-authorizations.guard.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ describe('itemPageEditAuthorizationsGuard', () => {
6161
item = new Item();
6262
item.uuid = uuid;
6363
item._links = { self: { href: itemSelfLink } } as any;
64-
itemService = jasmine.createSpyObj('itemService', { findById: createSuccessfulRemoteDataObject$(item) });
64+
itemService = jasmine.createSpyObj('itemService', { findByIdOrCustomUrl: createSuccessfulRemoteDataObject$(item) });
6565

6666
TestBed.configureTestingModule({
6767
providers: [

src/app/item-page/edit-item-page/item-page-move.guard.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ describe('itemPageMoveGuard', () => {
6161
item = new Item();
6262
item.uuid = uuid;
6363
item._links = { self: { href: itemSelfLink } } as any;
64-
itemService = jasmine.createSpyObj('itemService', { findById: createSuccessfulRemoteDataObject$(item) });
64+
itemService = jasmine.createSpyObj('itemService', { findByIdOrCustomUrl: createSuccessfulRemoteDataObject$(item) });
6565

6666
TestBed.configureTestingModule({
6767
providers: [

src/app/item-page/edit-item-page/item-page-private.guard.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ describe('itemPagePrivateGuard', () => {
6161
item = new Item();
6262
item.uuid = uuid;
6363
item._links = { self: { href: itemSelfLink } } as any;
64-
itemService = jasmine.createSpyObj('itemService', { findById: createSuccessfulRemoteDataObject$(item) });
64+
itemService = jasmine.createSpyObj('itemService', { findByIdOrCustomUrl: createSuccessfulRemoteDataObject$(item) });
6565

6666
TestBed.configureTestingModule({
6767
providers: [

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ describe('itemPageResolver', () => {
4141
},
4242
});
4343
itemService = {
44-
findById: (_id: string) => createSuccessfulRemoteDataObject$(item),
44+
findByIdOrCustomUrl: (_id: string) => createSuccessfulRemoteDataObject$(item),
4545
};
4646
store = jasmine.createSpyObj('store', {
4747
dispatch: {},
@@ -130,7 +130,7 @@ describe('itemPageResolver', () => {
130130
},
131131
});
132132
itemService = {
133-
findById: (_id: string) => createSuccessfulRemoteDataObject$(item),
133+
findByIdOrCustomUrl: (_id: string) => createSuccessfulRemoteDataObject$(item),
134134
};
135135
store = jasmine.createSpyObj('store', {
136136
dispatch: {},

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ export const itemPageResolver: ResolveFn<RemoteData<Item>> = (
4242
store: Store<AppState> = inject(Store<AppState>),
4343
authService: AuthService = inject(AuthService),
4444
): Observable<RemoteData<Item>> => {
45-
const itemRD$ = itemService.findById(
45+
const itemRD$ = itemService.findByIdOrCustomUrl(
4646
route.params.id,
4747
true,
4848
false,

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ export const itemResolver: ResolveFn<RemoteData<Item>> = (
2323
itemService: ItemDataService = inject(ItemDataService),
2424
store: Store<AppState> = inject(Store<AppState>),
2525
): Observable<RemoteData<Item>> => {
26-
const itemRD$ = itemService.findById(
26+
const itemRD$ = itemService.findByIdOrCustomUrl(
2727
route.params.id,
2828
true,
2929
false,

0 commit comments

Comments
 (0)