diff --git a/src/app/community-page/edit-community-page/community-access-control/community-access-control.service.ts b/src/app/community-page/edit-community-page/community-access-control/community-access-control.service.ts index d78d42ba90..89534683b7 100644 --- a/src/app/community-page/edit-community-page/community-access-control/community-access-control.service.ts +++ b/src/app/community-page/edit-community-page/community-access-control/community-access-control.service.ts @@ -1,19 +1,24 @@ import { Injectable } from '@angular/core'; -import { AccessControlItem } from '../../../shared/access-control-array-form/access-control-array-form.component'; -import { Observable, of } from 'rxjs'; +import { of } from 'rxjs'; +import { BulkAccessConditionOptionsService } from '../../../core/data/bulk-access-condition-options.service'; +import { BulkAccessConditionOptions } from '../../../core/shared/bulk-access-condition-options.model'; -export interface AccessControlDropdownDataResponse { - id: string; - itemAccessConditionOptions: AccessControlItem[]; - bitstreamAccessConditionOptions: AccessControlItem[]; -} @Injectable() export class CommunityAccessControlService { - dropdownData$: Observable = of(accessControlDropdownData); + constructor(private service: BulkAccessConditionOptionsService) {} + + dropdownData$ = of(accessControlDropdownData); + + // dropdownData$ = this.service.getAll().pipe( + // getAllSucceededRemoteData(), + // filter((data) => data.hasSucceeded), + // map((data) => data.payload) + // ); } -const accessControlDropdownData: AccessControlDropdownDataResponse = { +const accessControlDropdownData: BulkAccessConditionOptions = { + _links: { self: undefined }, type: undefined, uuid: '', 'id': 'default', 'itemAccessConditionOptions': [ { diff --git a/src/app/core/data/bulk-access-condition-options.service.ts b/src/app/core/data/bulk-access-condition-options.service.ts new file mode 100644 index 0000000000..bfff0a8dd6 --- /dev/null +++ b/src/app/core/data/bulk-access-condition-options.service.ts @@ -0,0 +1,33 @@ +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 './remote-data'; +import { RequestService } from './request.service'; +import { IdentifiableDataService } from './base/identifiable-data.service'; +import { BulkAccessConditionOptions } from '../shared/bulk-access-condition-options.model'; + +@Injectable() +/** + * Data Service responsible for retrieving Bulk Access Condition Options from the REST API + */ +export class BulkAccessConditionOptionsService extends IdentifiableDataService { + + constructor( + protected requestService: RequestService, + protected rdbService: RemoteDataBuildService, + protected objectCache: ObjectCacheService, + protected halService: HALEndpointService, + ) { + super('bulkaccessconditionoptions', requestService, rdbService, objectCache, halService); + } + + getAll(): Observable> { + return this.findByHref(this.halService.getEndpoint(this.linkPath)); + } + + // findByPropertyName(name: string): Observable> { + // return this.findById(name); + // } +} diff --git a/src/app/core/shared/bulk-access-condition-options.model.ts b/src/app/core/shared/bulk-access-condition-options.model.ts new file mode 100644 index 0000000000..a1c8fe0702 --- /dev/null +++ b/src/app/core/shared/bulk-access-condition-options.model.ts @@ -0,0 +1,45 @@ +import { autoserialize, autoserializeAs, deserialize } from 'cerialize'; +import { typedObject } from '../cache/builders/build-decorators'; +import { excludeFromEquals } from '../utilities/equals.decorators'; +import { ResourceType } from './resource-type'; +import { CacheableObject } from '../cache/cacheable-object.model'; +import { HALLink } from './hal-link.model'; + +export const BULK_ACCESS_CONDITION_OPTIONS = new ResourceType('bulkAccessConditionOptions'); + +/** + * Model class for a bulk access condition options + */ +@typedObject +export class BulkAccessConditionOptions implements CacheableObject { + static type = BULK_ACCESS_CONDITION_OPTIONS; + + /** + * The object type + */ + @excludeFromEquals + @autoserialize + type: ResourceType; + + @autoserializeAs(String, 'name') + uuid: string; + + @autoserialize + id: string; + + @deserialize + itemAccessConditionOptions: AccessControlItem[]; + + @deserialize + bitstreamAccessConditionOptions: AccessControlItem[]; + + _links: { self: HALLink }; +} + +export interface AccessControlItem { + name: string + hasStartDate?: boolean + maxStartDate?: string + hasEndDate?: boolean + maxEndDate?: string +} diff --git a/src/app/shared/access-control-array-form/access-control-array-form.component.ts b/src/app/shared/access-control-array-form/access-control-array-form.component.ts index 00ff52c695..bde7d30be8 100644 --- a/src/app/shared/access-control-array-form/access-control-array-form.component.ts +++ b/src/app/shared/access-control-array-form/access-control-array-form.component.ts @@ -6,15 +6,8 @@ import { TranslateModule } from '@ngx-translate/core'; import { NgbDatepickerModule } from '@ng-bootstrap/ng-bootstrap'; import { ControlMaxStartDatePipe } from './control-max-start-date.pipe'; import { ControlMaxEndDatePipe } from './control-max-end-date.pipe'; +import { AccessControlItem } from '../../core/shared/bulk-access-condition-options.model'; -// type of the dropdown item that comes from backend -export interface AccessControlItem { - name: string - hasStartDate?: boolean - maxStartDate?: string - hasEndDate?: boolean - maxEndDate?: string -} // will be used on the form value export interface AccessControlItemValue { @@ -23,10 +16,6 @@ export interface AccessControlItemValue { endDate?: string; } -export interface AccessControlArrayFormValue { - accessControl: AccessControlItemValue[]; -} - @Component({ selector: 'ds-access-control-array-form', templateUrl: './access-control-array-form.component.html',