diff --git a/src/app/+admin/admin-registries/admin-registries.module.ts b/src/app/+admin/admin-registries/admin-registries.module.ts index fb9dcdaa63..8ff42646ac 100644 --- a/src/app/+admin/admin-registries/admin-registries.module.ts +++ b/src/app/+admin/admin-registries/admin-registries.module.ts @@ -6,10 +6,12 @@ import { MetadataSchemaComponent } from './metadata-schema/metadata-schema.compo import { RouterModule } from '@angular/router'; import { TranslateModule } from '@ngx-translate/core'; import { BitstreamFormatsComponent } from './bitstream-formats/bitstream-formats.component'; +import { SharedModule } from '../../shared/shared.module'; @NgModule({ imports: [ CommonModule, + SharedModule, RouterModule, TranslateModule, AdminRegistriesRoutingModule diff --git a/src/app/+admin/admin-registries/bitstream-formats/bitstream-formats.component.html b/src/app/+admin/admin-registries/bitstream-formats/bitstream-formats.component.html index 87b3ba85eb..f3d6e47331 100644 --- a/src/app/+admin/admin-registries/bitstream-formats/bitstream-formats.component.html +++ b/src/app/+admin/admin-registries/bitstream-formats/bitstream-formats.component.html @@ -6,24 +6,33 @@

{{'admin.registries.bitstream-formats.description' | translate}}

-
- - - - - - - - - - - - - - - -
{{'admin.registries.bitstream-formats.formats.table.name' | translate}}{{'admin.registries.bitstream-formats.formats.table.mimetype' | translate}}{{'admin.registries.bitstream-formats.formats.table.supportLevel.head' | translate}}
{{bitstreamFormat.shortDescription}}{{bitstreamFormat.mimetype}} ({{'admin.registries.bitstream-formats.formats.table.internal' | translate}}){{'admin.registries.bitstream-formats.formats.table.supportLevel.'+bitstreamFormat.supportLevel | translate}}
-
+ +
+ + + + + + + + + + + + + + + +
{{'admin.registries.bitstream-formats.formats.table.name' | translate}}{{'admin.registries.bitstream-formats.formats.table.mimetype' | translate}}{{'admin.registries.bitstream-formats.formats.table.supportLevel.head' | translate}}
{{bitstreamFormat.shortDescription}}{{bitstreamFormat.mimetype}} ({{'admin.registries.bitstream-formats.formats.table.internal' | translate}}){{'admin.registries.bitstream-formats.formats.table.supportLevel.'+bitstreamFormat.supportLevel | translate}}
+
+
diff --git a/src/app/+admin/admin-registries/bitstream-formats/bitstream-formats.component.ts b/src/app/+admin/admin-registries/bitstream-formats/bitstream-formats.component.ts index d64b48d4c5..d54d2c5e96 100644 --- a/src/app/+admin/admin-registries/bitstream-formats/bitstream-formats.component.ts +++ b/src/app/+admin/admin-registries/bitstream-formats/bitstream-formats.component.ts @@ -4,6 +4,7 @@ import { Observable } from 'rxjs/Observable'; import { RemoteData } from '../../../core/data/remote-data'; import { PaginatedList } from '../../../core/data/paginated-list'; import { BitstreamFormat } from '../../../core/registry/mock-bitstream-format.model'; +import { PaginationComponentOptions } from '../../../shared/pagination/pagination-component-options.model'; @Component({ selector: 'ds-bitstream-formats', @@ -12,8 +13,21 @@ import { BitstreamFormat } from '../../../core/registry/mock-bitstream-format.mo export class BitstreamFormatsComponent { bitstreamFormats: Observable>>; + config: PaginationComponentOptions = Object.assign(new PaginationComponentOptions(), { + id: 'registry-bitstreamformats-pagination', + pageSize: 20 + }); - constructor(registryService: RegistryService) { - this.bitstreamFormats = registryService.getBitstreamFormats(); + constructor(private registryService: RegistryService) { + this.updateFormats(); + } + + onPageChange(event) { + this.config.currentPage = event; + this.updateFormats(); + } + + private updateFormats() { + this.bitstreamFormats = this.registryService.getBitstreamFormats(this.config); } } diff --git a/src/app/+admin/admin-registries/metadata-registry/metadata-registry.component.html b/src/app/+admin/admin-registries/metadata-registry/metadata-registry.component.html index 27f761581c..67cfa52601 100644 --- a/src/app/+admin/admin-registries/metadata-registry/metadata-registry.component.html +++ b/src/app/+admin/admin-registries/metadata-registry/metadata-registry.component.html @@ -6,24 +6,33 @@

{{'admin.registries.metadata.description' | translate}}

-
- - - - - - - - - - - - - - - -
{{'admin.registries.metadata.schemas.table.id' | translate}}{{'admin.registries.metadata.schemas.table.namespace' | translate}}{{'admin.registries.metadata.schemas.table.name' | translate}}
{{schema.id}}{{schema.namespace}}{{schema.prefix}}
-
+ +
+ + + + + + + + + + + + + + + +
{{'admin.registries.metadata.schemas.table.id' | translate}}{{'admin.registries.metadata.schemas.table.namespace' | translate}}{{'admin.registries.metadata.schemas.table.name' | translate}}
{{schema.id}}{{schema.namespace}}{{schema.prefix}}
+
+
diff --git a/src/app/+admin/admin-registries/metadata-registry/metadata-registry.component.ts b/src/app/+admin/admin-registries/metadata-registry/metadata-registry.component.ts index 3158c4bb46..2baed2ef6e 100644 --- a/src/app/+admin/admin-registries/metadata-registry/metadata-registry.component.ts +++ b/src/app/+admin/admin-registries/metadata-registry/metadata-registry.component.ts @@ -4,6 +4,7 @@ import { Observable } from 'rxjs/Observable'; import { RemoteData } from '../../../core/data/remote-data'; import { PaginatedList } from '../../../core/data/paginated-list'; import { MetadataSchema } from '../../../core/metadata/metadataschema.model'; +import { PaginationComponentOptions } from '../../../shared/pagination/pagination-component-options.model'; @Component({ selector: 'ds-metadata-registry', @@ -12,9 +13,22 @@ import { MetadataSchema } from '../../../core/metadata/metadataschema.model'; export class MetadataRegistryComponent { metadataSchemas: Observable>>; + config: PaginationComponentOptions = Object.assign(new PaginationComponentOptions(), { + id: 'registry-metadataschemas-pagination', + pageSize: 10 + }); constructor(private registryService: RegistryService) { - this.metadataSchemas = this.registryService.getMetadataSchemas(); + this.updateSchemas(); + } + + onPageChange(event) { + this.config.currentPage = event; + this.updateSchemas(); + } + + private updateSchemas() { + this.metadataSchemas = this.registryService.getMetadataSchemas(this.config); } } diff --git a/src/app/+admin/admin-registries/metadata-schema/metadata-schema.component.html b/src/app/+admin/admin-registries/metadata-schema/metadata-schema.component.html index f07a6cc670..f9e460e717 100644 --- a/src/app/+admin/admin-registries/metadata-schema/metadata-schema.component.html +++ b/src/app/+admin/admin-registries/metadata-schema/metadata-schema.component.html @@ -7,22 +7,31 @@

{{'admin.registries.schema.description' | translate:namespace }}

{{'admin.registries.schema.fields.head' | translate}}

-
- - - - - - - - - - - - - -
{{'admin.registries.schema.fields.table.field' | translate}}{{'admin.registries.schema.fields.table.scopenote' | translate}}
{{(metadataSchema | async)?.payload?.prefix}}.{{field.element}}{{field.qualifier}}{{field.scopenote}}
-
+ +
+ + + + + + + + + + + + + +
{{'admin.registries.schema.fields.table.field' | translate}}{{'admin.registries.schema.fields.table.scopenote' | translate}}
{{(metadataSchema | async)?.payload?.prefix}}.{{field.element}}{{field.qualifier}}{{field.scopeNote}}
+
+
diff --git a/src/app/+admin/admin-registries/metadata-schema/metadata-schema.component.ts b/src/app/+admin/admin-registries/metadata-schema/metadata-schema.component.ts index 7e6085a091..6b0e4b16c6 100644 --- a/src/app/+admin/admin-registries/metadata-schema/metadata-schema.component.ts +++ b/src/app/+admin/admin-registries/metadata-schema/metadata-schema.component.ts @@ -6,6 +6,8 @@ import { RemoteData } from '../../../core/data/remote-data'; import { PaginatedList } from '../../../core/data/paginated-list'; import { MetadataField } from '../../../core/metadata/metadatafield.model'; import { MetadataSchema } from '../../../core/metadata/metadataschema.model'; +import { PaginationComponentOptions } from '../../../shared/pagination/pagination-component-options.model'; +import { SortOptions } from '../../../core/cache/models/sort-options.model'; @Component({ selector: 'ds-metadata-schema', @@ -17,6 +19,10 @@ export class MetadataSchemaComponent implements OnInit { metadataSchema: Observable>; metadataFields: Observable>>; + config: PaginationComponentOptions = Object.assign(new PaginationComponentOptions(), { + id: 'registry-metadatafields-pagination', + pageSize: 20 + }); constructor(private registryService: RegistryService, private route: ActivatedRoute) { @@ -30,10 +36,19 @@ export class MetadataSchemaComponent implements OnInit { initialize(params) { this.metadataSchema = this.registryService.getMetadataSchemaByName(params.schemaName); - this.metadataSchema.subscribe((value) => { - const schema = value.payload; - // this.metadataFields = this.registryService.getMetadataFieldsBySchema(schema); - this.namespace = { namespace: value.payload.namespace }; + this.updateFields(); + } + + onPageChange(event) { + this.config.currentPage = event; + this.updateFields(); + } + + private updateFields() { + this.metadataSchema.subscribe((schemaData) => { + const schema = schemaData.payload; + this.metadataFields = this.registryService.getMetadataFieldsBySchema(schema, this.config); + this.namespace = { namespace: schemaData.payload.namespace }; }); } diff --git a/src/app/core/cache/response-cache.models.ts b/src/app/core/cache/response-cache.models.ts index 94c0ccc58c..13987cdf4a 100644 --- a/src/app/core/cache/response-cache.models.ts +++ b/src/app/core/cache/response-cache.models.ts @@ -7,6 +7,8 @@ import { FacetValue } from '../../+search-page/search-service/facet-value.model' import { SearchFilterConfig } from '../../+search-page/search-service/search-filter-config.model'; import { RegistryMetadataschemasResponse } from '../registry/registry-metadataschemas-response.model'; import { MetadataSchema } from '../metadata/metadataschema.model'; +import { RegistryMetadatafieldsResponse } from '../registry/registry-metadatafields-response.model'; +import { RegistryBitstreamformatsResponse } from '../registry/registry-bitstreamformats-response.model'; /* tslint:disable:max-classes-per-file */ export class RestResponse { @@ -36,6 +38,26 @@ export class RegistryMetadataschemasSuccessResponse extends RestResponse { } } +export class RegistryMetadatafieldsSuccessResponse extends RestResponse { + constructor( + public metadatafieldsResponse: RegistryMetadatafieldsResponse, + public statusCode: string, + public pageInfo?: PageInfo + ) { + super(true, statusCode); + } +} + +export class RegistryBitstreamformatsSuccessResponse extends RestResponse { + constructor( + public bitstreamformatsResponse: RegistryBitstreamformatsResponse, + public statusCode: string, + public pageInfo?: PageInfo + ) { + super(true, statusCode); + } +} + export class MetadataschemaSuccessResponse extends RestResponse { constructor( public metadataschema: MetadataSchema, diff --git a/src/app/core/core.module.ts b/src/app/core/core.module.ts index 82307921ef..4e99bcdeeb 100644 --- a/src/app/core/core.module.ts +++ b/src/app/core/core.module.ts @@ -47,6 +47,8 @@ import { FacetConfigResponseParsingService } from './data/facet-config-response- import { RegistryService } from './registry/registry.service'; import { RegistryMetadataschemasResponseParsingService } from './data/registry-metadataschemas-response-parsing.service'; import { MetadataschemaParsingService } from './data/metadataschema-parsing.service'; +import { RegistryMetadatafieldsResponseParsingService } from './data/registry-metadatafields-response-parsing.service'; +import { RegistryBitstreamformatsResponseParsingService } from './data/registry-bitstreamformats-response-parsing.service'; const IMPORTS = [ CommonModule, @@ -83,6 +85,8 @@ const PROVIDERS = [ FacetValueMapResponseParsingService, FacetConfigResponseParsingService, RegistryMetadataschemasResponseParsingService, + RegistryMetadatafieldsResponseParsingService, + RegistryBitstreamformatsResponseParsingService, MetadataschemaParsingService, DebugResponseParsingService, SearchResponseParsingService, diff --git a/src/app/core/data/registry-bitstreamformats-response-parsing.service.ts b/src/app/core/data/registry-bitstreamformats-response-parsing.service.ts new file mode 100644 index 0000000000..d981a12719 --- /dev/null +++ b/src/app/core/data/registry-bitstreamformats-response-parsing.service.ts @@ -0,0 +1,25 @@ +import { RegistryBitstreamformatsSuccessResponse, RestResponse } from '../cache/response-cache.models'; +import { RegistryBitstreamformatsResponse } from '../registry/registry-bitstreamformats-response.model'; +import { DSpaceRESTv2Serializer } from '../dspace-rest-v2/dspace-rest-v2.serializer'; +import { DSpaceRESTV2Response } from '../dspace-rest-v2/dspace-rest-v2-response.model'; +import { RestRequest } from './request.models'; +import { DSOResponseParsingService } from './dso-response-parsing.service'; +import { ResponseParsingService } from './parsing.service'; +import { Injectable } from '@angular/core'; + +@Injectable() +export class RegistryBitstreamformatsResponseParsingService implements ResponseParsingService { + constructor(private dsoParser: DSOResponseParsingService) { + } + + parse(request: RestRequest, data: DSpaceRESTV2Response): RestResponse { + const payload = data.payload; + + const bitstreamformats = payload._embedded.bitstreamformats; + payload.bitstreamformats = bitstreamformats; + + const deserialized = new DSpaceRESTv2Serializer(RegistryBitstreamformatsResponse).deserialize(payload); + return new RegistryBitstreamformatsSuccessResponse(deserialized, data.statusCode, this.dsoParser.processPageInfo(data.payload.page)); + } + +} diff --git a/src/app/core/data/registry-metadatafields-response-parsing.service.ts b/src/app/core/data/registry-metadatafields-response-parsing.service.ts new file mode 100644 index 0000000000..2620916070 --- /dev/null +++ b/src/app/core/data/registry-metadatafields-response-parsing.service.ts @@ -0,0 +1,34 @@ +import { + RegistryMetadatafieldsSuccessResponse, RegistryMetadataschemasSuccessResponse, + RestResponse +} from '../cache/response-cache.models'; +import { DSpaceRESTV2Response } from '../dspace-rest-v2/dspace-rest-v2-response.model'; +import { RestRequest } from './request.models'; +import { ResponseParsingService } from './parsing.service'; +import { RegistryMetadataschemasResponse } from '../registry/registry-metadataschemas-response.model'; +import { DSpaceRESTv2Serializer } from '../dspace-rest-v2/dspace-rest-v2.serializer'; +import { DSOResponseParsingService } from './dso-response-parsing.service'; +import { Injectable } from '@angular/core'; +import { forEach } from '@angular/router/src/utils/collection'; +import { RegistryMetadatafieldsResponse } from '../registry/registry-metadatafields-response.model'; + +@Injectable() +export class RegistryMetadatafieldsResponseParsingService implements ResponseParsingService { + constructor(private dsoParser: DSOResponseParsingService) { + } + + parse(request: RestRequest, data: DSpaceRESTV2Response): RestResponse { + const payload = data.payload; + + const metadatafields = payload._embedded.metadatafields; + metadatafields.forEach((field) => { + field.schema = field._embedded.schema; + }); + + payload.metadatafields = metadatafields; + + const deserialized = new DSpaceRESTv2Serializer(RegistryMetadatafieldsResponse).deserialize(payload); + return new RegistryMetadatafieldsSuccessResponse(deserialized, data.statusCode, this.dsoParser.processPageInfo(data.payload.page)); + } + +} diff --git a/src/app/core/metadata/metadatafield.model.ts b/src/app/core/metadata/metadatafield.model.ts index bf9921a1ce..77cecb927e 100644 --- a/src/app/core/metadata/metadatafield.model.ts +++ b/src/app/core/metadata/metadatafield.model.ts @@ -1,9 +1,20 @@ import { MetadataSchema } from './metadataschema.model'; +import { autoserialize } from 'cerialize'; +import { ListableObject } from '../../shared/object-collection/shared/listable-object.model'; -export class MetadataField { +export class MetadataField implements ListableObject { + @autoserialize self: string; + + @autoserialize element: string; + + @autoserialize qualifier: string; - scopenote: string; + + @autoserialize + scopeNote: string; + + @autoserialize schema: MetadataSchema; } diff --git a/src/app/core/registry/registry-bitstreamformats-response.model.ts b/src/app/core/registry/registry-bitstreamformats-response.model.ts new file mode 100644 index 0000000000..81de379e9e --- /dev/null +++ b/src/app/core/registry/registry-bitstreamformats-response.model.ts @@ -0,0 +1,14 @@ +import { autoserialize, autoserializeAs } from 'cerialize'; +import { PageInfo } from '../shared/page-info.model'; +import { BitstreamFormat } from '../shared/bitstream-format.model'; + +export class RegistryBitstreamformatsResponse { + @autoserializeAs(BitstreamFormat) + bitstreamformats: BitstreamFormat[]; + + @autoserialize + page: PageInfo; + + @autoserialize + self: string; +} diff --git a/src/app/core/registry/registry-metadatafields-response.model.ts b/src/app/core/registry/registry-metadatafields-response.model.ts new file mode 100644 index 0000000000..19ec537dfb --- /dev/null +++ b/src/app/core/registry/registry-metadatafields-response.model.ts @@ -0,0 +1,14 @@ +import { PageInfo } from '../shared/page-info.model'; +import { autoserialize, autoserializeAs } from 'cerialize'; +import { MetadataField } from '../metadata/metadatafield.model'; + +export class RegistryMetadatafieldsResponse { + @autoserializeAs(MetadataField) + metadatafields: MetadataField[]; + + @autoserialize + page: PageInfo; + + @autoserialize + self: string; +} diff --git a/src/app/core/registry/registry.service.ts b/src/app/core/registry/registry.service.ts index 0c9ece4a71..4359284158 100644 --- a/src/app/core/registry/registry.service.ts +++ b/src/app/core/registry/registry.service.ts @@ -16,18 +16,27 @@ import { RequestService } from '../data/request.service'; import { ResponseCacheService } from '../cache/response-cache.service'; import { RegistryMetadataschemasResponse } from './registry-metadataschemas-response.model'; import { ResponseCacheEntry } from '../cache/response-cache.reducer'; -import { MetadataschemaSuccessResponse, RegistryMetadataschemasSuccessResponse } from '../cache/response-cache.models'; +import { + MetadataschemaSuccessResponse, RegistryBitstreamformatsSuccessResponse, RegistryMetadatafieldsSuccessResponse, + RegistryMetadataschemasSuccessResponse +} from '../cache/response-cache.models'; import { HALEndpointService } from '../shared/hal-endpoint.service'; import { MetadataschemaParsingService } from '../data/metadataschema-parsing.service'; +import { Res } from 'awesome-typescript-loader/dist/checker/protocol'; +import { RegistryMetadatafieldsResponseParsingService } from '../data/registry-metadatafields-response-parsing.service'; +import { RegistryMetadatafieldsResponse } from './registry-metadatafields-response.model'; +import { isNotEmpty } from '../../shared/empty.util'; +import { URLCombiner } from '../url-combiner/url-combiner'; +import { PaginationComponentOptions } from '../../shared/pagination/pagination-component-options.model'; +import { RegistryBitstreamformatsResponseParsingService } from '../data/registry-bitstreamformats-response-parsing.service'; +import { RegistryBitstreamformatsResponse } from './registry-bitstreamformats-response.model'; @Injectable() export class RegistryService { private metadataSchemasPath = 'metadataschemas'; - - metadataSchemas: MetadataSchema[]; - metadataFields: MetadataField[]; - bitstreamFormats: BitstreamFormat[]; + private metadataFieldsPath = 'metadatafields'; + private bitstreamFormatsPath = 'bitstreamformats'; constructor(protected responseCache: ResponseCacheService, protected requestService: RequestService, @@ -36,18 +45,8 @@ export class RegistryService { } - public getMetadataSchemas(): Observable>> { - const requestObs = this.halService.getEndpoint(this.metadataSchemasPath).pipe( - map((url: string) => { - const request = new GetRequest(this.requestService.generateRequestId(), url); - return Object.assign(request, { - getResponseParser(): GenericConstructor { - return RegistryMetadataschemasResponseParsingService; - } - }); - }), - tap((request: RestRequest) => this.requestService.configure(request)), - ); + public getMetadataSchemas(pagination: PaginationComponentOptions): Observable>> { + const requestObs = this.getMetadataSchemasRequestObs(pagination); const requestEntryObs = requestObs.pipe( flatMap((request: RestRequest) => this.requestService.getByHref(request.href)) @@ -79,17 +78,12 @@ export class RegistryService { } public getMetadataSchemaByName(schemaName: string): Observable> { - const requestObs = this.halService.getEndpoint(this.metadataSchemasPath).pipe( - map((url: string) => { - const request = new GetRequest(this.requestService.generateRequestId(), url); - return Object.assign(request, { - getResponseParser(): GenericConstructor { - return RegistryMetadataschemasResponseParsingService; - } - }); - }), - tap((request: RestRequest) => this.requestService.configure(request)), - ); + // Temporary pagination to get ALL metadataschemas until there's a rest api endpoint for fetching a specific schema + const pagination: PaginationComponentOptions = Object.assign(new PaginationComponentOptions(), { + id: 'all-metadatafields-pagination', + pageSize: 10000 + }); + const requestObs = this.getMetadataSchemasRequestObs(pagination); const requestEntryObs = requestObs.pipe( flatMap((request: RestRequest) => this.requestService.getByHref(request.href)) @@ -112,24 +106,129 @@ export class RegistryService { return this.rdb.toRemoteDataObservable(requestEntryObs, responseCacheObs, metadataschemaObs); } - public getMetadataFieldsBySchema(schema: MetadataSchema): Observable>> { - const pageInfo = new PageInfo(); - pageInfo.elementsPerPage = 10; - pageInfo.currentPage = 1; + public getMetadataFieldsBySchema(schema: MetadataSchema, pagination: PaginationComponentOptions): Observable>> { + const requestObs = this.getMetadataFieldsRequestObs(pagination); - const payload = new PaginatedList(pageInfo, this.metadataFields.filter((value) => value.schema === schema)); - const remoteData = new RemoteData(false, false, true, undefined, payload); - return Observable.of(remoteData); + const requestEntryObs = requestObs.pipe( + flatMap((request: RestRequest) => this.requestService.getByHref(request.href)) + ); + + const responseCacheObs = requestObs.pipe( + flatMap((request: RestRequest) => this.responseCache.get(request.href)) + ); + + const rmrObs: Observable = responseCacheObs.pipe( + map((entry: ResponseCacheEntry) => entry.response), + map((response: RegistryMetadatafieldsSuccessResponse) => response.metadatafieldsResponse) + ); + + const metadatafieldsObs: Observable = rmrObs.pipe( + map((rmr: RegistryMetadatafieldsResponse) => rmr.metadatafields), + map((metadataFields: MetadataField[]) => metadataFields.filter((field) => field.schema.id === schema.id)) + ); + + const pageInfoObs: Observable = responseCacheObs.pipe( + map((entry: ResponseCacheEntry) => entry.response), + map((response: RegistryMetadatafieldsSuccessResponse) => response.pageInfo) + ); + + const payloadObs = Observable.combineLatest(metadatafieldsObs, pageInfoObs, (metadatafields, pageInfo) => { + return new PaginatedList(pageInfo, metadatafields); + }); + + return this.rdb.toRemoteDataObservable(requestEntryObs, responseCacheObs, payloadObs); } - public getBitstreamFormats(): Observable>> { - const pageInfo = new PageInfo(); - pageInfo.elementsPerPage = 10; - pageInfo.currentPage = 1; + public getBitstreamFormats(pagination: PaginationComponentOptions): Observable>> { + const requestObs = this.getBitstreamFormatsRequestObs(pagination); - const payload = new PaginatedList(pageInfo, this.bitstreamFormats); - const remoteData = new RemoteData(false, false, true, undefined, payload); - return Observable.of(remoteData); + const requestEntryObs = requestObs.pipe( + flatMap((request: RestRequest) => this.requestService.getByHref(request.href)) + ); + + const responseCacheObs = requestObs.pipe( + flatMap((request: RestRequest) => this.responseCache.get(request.href)) + ); + + const rbrObs: Observable = responseCacheObs.pipe( + map((entry: ResponseCacheEntry) => entry.response), + map((response: RegistryBitstreamformatsSuccessResponse) => response.bitstreamformatsResponse) + ); + + const bitstreamformatsObs: Observable = rbrObs.pipe( + map((rbr: RegistryBitstreamformatsResponse) => rbr.bitstreamformats) + ); + + const pageInfoObs: Observable = responseCacheObs.pipe( + map((entry: ResponseCacheEntry) => entry.response), + map((response: RegistryBitstreamformatsSuccessResponse) => response.pageInfo) + ); + + const payloadObs = Observable.combineLatest(bitstreamformatsObs, pageInfoObs, (bitstreamformats, pageInfo) => { + return new PaginatedList(pageInfo, bitstreamformats); + }); + + return this.rdb.toRemoteDataObservable(requestEntryObs, responseCacheObs, payloadObs); + } + + private getMetadataSchemasRequestObs(pagination: PaginationComponentOptions): Observable { + return this.halService.getEndpoint(this.metadataSchemasPath).pipe( + map((url: string) => { + const args: string[] = []; + args.push(`size=${pagination.pageSize}`); + args.push(`page=${pagination.currentPage - 1}`); + if (isNotEmpty(args)) { + url = new URLCombiner(url, `?${args.join('&')}`).toString(); + } + const request = new GetRequest(this.requestService.generateRequestId(), url); + return Object.assign(request, { + getResponseParser(): GenericConstructor { + return RegistryMetadataschemasResponseParsingService; + } + }); + }), + tap((request: RestRequest) => this.requestService.configure(request)), + ); + } + + private getMetadataFieldsRequestObs(pagination: PaginationComponentOptions): Observable { + return this.halService.getEndpoint(this.metadataFieldsPath).pipe( + map((url: string) => { + const args: string[] = []; + args.push(`size=${pagination.pageSize}`); + args.push(`page=${pagination.currentPage - 1}`); + if (isNotEmpty(args)) { + url = new URLCombiner(url, `?${args.join('&')}`).toString(); + } + const request = new GetRequest(this.requestService.generateRequestId(), url); + return Object.assign(request, { + getResponseParser(): GenericConstructor { + return RegistryMetadatafieldsResponseParsingService; + } + }); + }), + tap((request: RestRequest) => this.requestService.configure(request)), + ); + } + + private getBitstreamFormatsRequestObs(pagination: PaginationComponentOptions): Observable { + return this.halService.getEndpoint(this.bitstreamFormatsPath).pipe( + map((url: string) => { + const args: string[] = []; + args.push(`size=${pagination.pageSize}`); + args.push(`page=${pagination.currentPage - 1}`); + if (isNotEmpty(args)) { + url = new URLCombiner(url, `?${args.join('&')}`).toString(); + } + const request = new GetRequest(this.requestService.generateRequestId(), url); + return Object.assign(request, { + getResponseParser(): GenericConstructor { + return RegistryBitstreamformatsResponseParsingService; + } + }); + }), + tap((request: RestRequest) => this.requestService.configure(request)), + ); } } diff --git a/src/app/shared/pagination/pagination.component.ts b/src/app/shared/pagination/pagination.component.ts index 2fa70ddd18..7c7cf69bc7 100644 --- a/src/app/shared/pagination/pagination.component.ts +++ b/src/app/shared/pagination/pagination.component.ts @@ -207,8 +207,10 @@ export class PaginationComponent implements OnDestroy, OnInit { this.pageSizeOptions = this.paginationOptions.pageSizeOptions; this.currentPage = this.paginationOptions.currentPage; this.pageSize = this.paginationOptions.pageSize; - this.sortDirection = this.sortOptions.direction; - this.sortField = this.sortOptions.field; + if (this.sortOptions) { + this.sortDirection = this.sortOptions.direction; + this.sortField = this.sortOptions.field; + } this.currentQueryParams = { pageId: this.id, page: this.currentPage,