diff --git a/src/app/core/config/bulk-access-config-data.service.ts b/src/app/core/config/bulk-access-config-data.service.ts index f27b59eee1..28b4029ea2 100644 --- a/src/app/core/config/bulk-access-config-data.service.ts +++ b/src/app/core/config/bulk-access-config-data.service.ts @@ -1,17 +1,17 @@ import { Injectable } from '@angular/core'; -import { Observable } from 'rxjs'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { ObjectCacheService } from '../cache/object-cache.service'; import { HALEndpointService } from '../shared/hal-endpoint.service'; -import { RemoteData } from '../data/remote-data'; import { RequestService } from '../data/request.service'; -import { BulkAccessConditionOptions } from './models/bulk-access-condition-options.model'; import { ConfigDataService } from './config-data.service'; +import { dataService } from '../data/base/data-service.decorator'; +import { BULK_ACCESS_CONDITION_OPTIONS } from './models/config-type'; -@Injectable({ providedIn: 'root' }) /** * Data Service responsible for retrieving Bulk Access Condition Options from the REST API */ +@Injectable({ providedIn: 'root' }) +@dataService(BULK_ACCESS_CONDITION_OPTIONS) export class BulkAccessConfigDataService extends ConfigDataService { constructor( @@ -23,7 +23,4 @@ export class BulkAccessConfigDataService extends ConfigDataService { super('bulkaccessconditionoptions', requestService, rdbService, objectCache, halService); } - findByPropertyName(name: string): Observable> { - return this.findById(name) as Observable>; - } } diff --git a/src/app/core/config/config-data.service.ts b/src/app/core/config/config-data.service.ts index f8f46435c5..58b023e62c 100644 --- a/src/app/core/config/config-data.service.ts +++ b/src/app/core/config/config-data.service.ts @@ -1,9 +1,10 @@ import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; + import { ConfigObject } from './models/config.model'; import { RemoteData } from '../data/remote-data'; import { FollowLinkConfig } from '../../shared/utils/follow-link-config.model'; import { getFirstCompletedRemoteData } from '../shared/operators'; -import { map } from 'rxjs/operators'; import { IdentifiableDataService } from '../data/base/identifiable-data.service'; /** @@ -38,7 +39,20 @@ export abstract class ConfigDataService extends IdentifiableDataService[]): Observable> { + /** + * Returns a config object by given name + * + * Throws an error if a configuration object cannot be retrieved. + * + * @param name The name of configuration to retrieve + * @param useCachedVersionIfAvailable If this is true, the request will only be sent if there's + * no valid cached version. Defaults to true + * @param reRequestOnStale Whether or not the request should automatically be re- + * requested after the response becomes stale + * @param linksToFollow List of {@link FollowLinkConfig} that indicate which + * {@link HALLink}s should be automatically resolved + */ + public findByName(name: string, useCachedVersionIfAvailable = true, reRequestOnStale = true, ...linksToFollow: FollowLinkConfig[]): Observable> { return super.findById(name, useCachedVersionIfAvailable, reRequestOnStale, ...linksToFollow); } } diff --git a/src/app/core/config/models/bulk-access-condition-options.model.ts b/src/app/core/config/models/bulk-access-condition-options.model.ts index f10965ea31..d84e14b95d 100644 --- a/src/app/core/config/models/bulk-access-condition-options.model.ts +++ b/src/app/core/config/models/bulk-access-condition-options.model.ts @@ -1,17 +1,17 @@ -import { autoserialize, autoserializeAs, deserialize } from 'cerialize'; +import { autoserialize, autoserializeAs, inheritSerialization } from 'cerialize'; import { typedObject } from '../../cache/builders/build-decorators'; import { excludeFromEquals } from '../../utilities/equals.decorators'; import { ResourceType } from '../../shared/resource-type'; import { HALLink } from '../../shared/hal-link.model'; import { ConfigObject } from './config.model'; import { AccessesConditionOption } from './config-accesses-conditions-options.model'; - -export const BULK_ACCESS_CONDITION_OPTIONS = new ResourceType('bulkAccessConditionOptions'); +import { BULK_ACCESS_CONDITION_OPTIONS } from './config-type'; /** * Model class for a bulk access condition options */ @typedObject +@inheritSerialization(ConfigObject) export class BulkAccessConditionOptions extends ConfigObject { static type = BULK_ACCESS_CONDITION_OPTIONS; @@ -28,10 +28,10 @@ export class BulkAccessConditionOptions extends ConfigObject { @autoserialize id: string; - @deserialize + @autoserialize itemAccessConditionOptions: AccessesConditionOption[]; - @deserialize + @autoserialize bitstreamAccessConditionOptions: AccessesConditionOption[]; _links: { self: HALLink }; diff --git a/src/app/core/config/models/config-type.ts b/src/app/core/config/models/config-type.ts index 19864536f0..5733f5bfad 100644 --- a/src/app/core/config/models/config-type.ts +++ b/src/app/core/config/models/config-type.ts @@ -17,3 +17,5 @@ export const SUBMISSION_UPLOADS_TYPE = new ResourceType('submissionuploads'); export const SUBMISSION_UPLOAD_TYPE = new ResourceType('submissionupload'); export const SUBMISSION_ACCESSES_TYPE = new ResourceType('submissionaccessoption'); + +export const BULK_ACCESS_CONDITION_OPTIONS = new ResourceType('bulkaccessconditionoption'); diff --git a/src/app/core/core.module.ts b/src/app/core/core.module.ts index 319b42d58b..7d540ccfcf 100644 --- a/src/app/core/core.module.ts +++ b/src/app/core/core.module.ts @@ -177,6 +177,7 @@ import { IdentifierData } from '../shared/object-list/identifier-data/identifier import { Subscription } from '../shared/subscriptions/models/subscription.model'; import { SupervisionOrderDataService } from './supervision-order/supervision-order-data.service'; import { ItemRequest } from './shared/item-request.model'; +import { BulkAccessConditionOptions } from './config/models/bulk-access-condition-options.model'; /** * When not in production, endpoint responses can be mocked for testing purposes @@ -371,6 +372,7 @@ export const models = IdentifierData, Subscription, ItemRequest, + BulkAccessConditionOptions ]; @NgModule({ diff --git a/src/app/shared/access-control-form-container/access-control-form-container.component.ts b/src/app/shared/access-control-form-container/access-control-form-container.component.ts index 23ba64c4f6..8a3a752588 100644 --- a/src/app/shared/access-control-form-container/access-control-form-container.component.ts +++ b/src/app/shared/access-control-form-container/access-control-form-container.component.ts @@ -9,7 +9,7 @@ import { import { BulkAccessControlService } from './bulk-access-control.service'; import { SelectableListService } from '../object-list/selectable-list/selectable-list.service'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; -import { map, take, tap } from 'rxjs/operators'; +import { map, take } from 'rxjs/operators'; import { CommonModule } from '@angular/common'; import { ListableObject } from '../object-collection/shared/listable-object.model'; import { SharedModule } from '../shared.module'; @@ -62,11 +62,10 @@ export class AccessControlFormContainerComponent impleme state = initialState; - dropdownData$: Observable = this.bulkAccessConfigService.findByPropertyName('default').pipe( + dropdownData$: Observable = this.bulkAccessConfigService.findByName('default').pipe( getFirstCompletedRemoteData(), map((configRD: RemoteData) => configRD.hasSucceeded ? configRD.payload : null), - shareReplay(1), - tap(x => console.log('options', x)) + shareReplay(1) ); /**