Files
dspace-angular/src/app/core/data/community-data.service.ts
2023-09-25 21:35:50 +02:00

63 lines
2.7 KiB
TypeScript

import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
import { filter, map, switchMap, take } from 'rxjs/operators';
import { NotificationsService } from '../../shared/notifications/notifications.service';
import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service';
import { ObjectCacheService } from '../cache/object-cache.service';
import { Community } from '../shared/community.model';
import { HALEndpointService } from '../shared/hal-endpoint.service';
import { ComColDataService } from './comcol-data.service';
import { DSOChangeAnalyzer } from './dso-change-analyzer.service';
import { PaginatedList } from './paginated-list.model';
import { RemoteData } from './remote-data';
import { RequestService } from './request.service';
import { BitstreamDataService } from './bitstream-data.service';
import { FollowLinkConfig } from '../../shared/utils/follow-link-config.model';
import { isNotEmpty } from '../../shared/empty.util';
import { FindListOptions } from './find-list-options.model';
@Injectable({ providedIn: 'root' })
export class CommunityDataService extends ComColDataService<Community> {
protected topLinkPath = 'search/top';
constructor(
protected requestService: RequestService,
protected rdbService: RemoteDataBuildService,
protected objectCache: ObjectCacheService,
protected halService: HALEndpointService,
protected comparator: DSOChangeAnalyzer<Community>,
protected notificationsService: NotificationsService,
protected bitstreamDataService: BitstreamDataService,
) {
super('communities', requestService, rdbService, objectCache, halService, comparator, notificationsService, bitstreamDataService);
}
// this method is overridden in order to make it public
getEndpoint() {
return this.halService.getEndpoint(this.linkPath);
}
findTop(options: FindListOptions = {}, ...linksToFollow: FollowLinkConfig<Community>[]): Observable<RemoteData<PaginatedList<Community>>> {
return this.getEndpoint().pipe(
map(href => `${href}/search/top`),
switchMap(href => this.findListByHref(href, options, true, true, ...linksToFollow))
);
}
protected getFindByParentHref(parentUUID: string): Observable<string> {
return this.halService.getEndpoint(this.linkPath).pipe(
switchMap((communityEndpointHref: string) =>
this.halService.getEndpoint('subcommunities', `${communityEndpointHref}/${parentUUID}`))
);
}
protected getScopeCommunityHref(options: FindListOptions) {
return this.getEndpoint().pipe(
map((endpoint: string) => this.getIDHref(endpoint, options.scopeID)),
filter((href: string) => isNotEmpty(href)),
take(1)
);
}
}