diff --git a/src/app/shared/resource-policies/resolvers/resource-policy-target.resolver.ts b/src/app/shared/resource-policies/resolvers/resource-policy-target.resolver.ts index 1daac76462..5d79ec2125 100644 --- a/src/app/shared/resource-policies/resolvers/resource-policy-target.resolver.ts +++ b/src/app/shared/resource-policies/resolvers/resource-policy-target.resolver.ts @@ -1,5 +1,7 @@ import { + Inject, Injectable, + InjectionToken, Injector, } from '@angular/core'; import { @@ -9,10 +11,15 @@ import { RouterStateSnapshot, } from '@angular/router'; import { Observable } from 'rxjs'; +import { switchMap } from 'rxjs/operators'; -import { getDataServiceFor } from '../../../core/data/base/data-service.decorator'; +import { + APP_DATA_SERVICES_MAP, + LazyDataServicesMap, +} from '../../../../config/app-config.interface'; import { IdentifiableDataService } from '../../../core/data/base/identifiable-data.service'; import { RemoteData } from '../../../core/data/remote-data'; +import { lazyService } from '../../../core/lazy-service'; import { DSpaceObject } from '../../../core/shared/dspace-object.model'; import { getFirstCompletedRemoteData } from '../../../core/shared/operators'; import { ResourceType } from '../../../core/shared/resource-type'; @@ -23,12 +30,11 @@ import { isEmpty } from '../../empty.util'; */ @Injectable({ providedIn: 'root' }) export class ResourcePolicyTargetResolver implements Resolve> { - /** - * The data service used to make request. - */ - private dataService: IdentifiableDataService; - constructor(private parentInjector: Injector, private router: Router) { + constructor( + private parentInjector: Injector, + private router: Router, + @Inject(APP_DATA_SERVICES_MAP) private dataServiceMap: InjectionToken) { } /** @@ -46,13 +52,13 @@ export class ResourcePolicyTargetResolver implements Resolve> = lazyService(this.dataServiceMap[resourceType.value], this.parentInjector); - return this.dataService.findById(policyTargetId).pipe( + return lazyProvider$.pipe( + switchMap((dataService: IdentifiableDataService) => { + return dataService.findById(policyTargetId); + }), getFirstCompletedRemoteData(), ); }