diff --git a/alfa-client/libs/binary-file/src/lib/binary-file-list-container/binary-file-list-container.component.html b/alfa-client/libs/binary-file/src/lib/binary-file-list-container/binary-file-list-container.component.html index a5d3d8ee19423a50b9e5e505bf17c6eb6e59ccb5..cfa93fbc6b3b9dbd01834a8d31c1bf74f4088299 100644 --- a/alfa-client/libs/binary-file/src/lib/binary-file-list-container/binary-file-list-container.component.html +++ b/alfa-client/libs/binary-file/src/lib/binary-file-list-container/binary-file-list-container.component.html @@ -23,8 +23,9 @@ unter der Lizenz sind dem Lizenztext zu entnehmen. --> -@if (binaryFileList) { - <ods-attachment-wrapper> - <alfa-binary-file-list [binaryFileList]="binaryFileList" [listOrientation]="listOrientation" /> - </ods-attachment-wrapper> -} +<ods-attachment-wrapper> + <alfa-binary-file-list + [binaryFileListStateResource]="binaryFileListStateResource$ | async" + [listOrientation]="listOrientation" + ></alfa-binary-file-list> +</ods-attachment-wrapper> diff --git a/alfa-client/libs/binary-file/src/lib/binary-file-list-container/binary-file-list-container.component.spec.ts b/alfa-client/libs/binary-file/src/lib/binary-file-list-container/binary-file-list-container.component.spec.ts index 885d5d27a66efaeb40e894a344d7fbbf692abb22..e9473e9ee486bc437328ee6fe85227d12c6293e5 100644 --- a/alfa-client/libs/binary-file/src/lib/binary-file-list-container/binary-file-list-container.component.spec.ts +++ b/alfa-client/libs/binary-file/src/lib/binary-file-list-container/binary-file-list-container.component.spec.ts @@ -42,11 +42,9 @@ describe('BinaryFileListContainerComponent', () => { const binaryFileService: Mock<BinaryFileService> = mock(BinaryFileService); - const fileList: Resource[] = []; - const binaryFileStateResource: StateResource<BinaryFileResource> = createStateResource({ - ...createBinaryFileResource(), - _embedded: { ozgFileList: fileList }, - }); + const binaryFileStateResource: StateResource<BinaryFileResource> = createStateResource( + createBinaryFileResource(), + ); const resource: Resource = createDummyResource(); const linkRel: LinkRelationName = DummyLinkRel.DUMMY; @@ -83,31 +81,14 @@ describe('BinaryFileListContainerComponent', () => { expect(binaryFileService.getFiles).toHaveBeenCalledWith(resource, linkRel); }); - - it('should NOT set binaryFileList', () => { - component.binaryFileList = null; - binaryFileService.getFiles.mockReturnValue(of(createStateResource(null))); - - component.ngOnInit(); - - expect(component.binaryFileList).toBe(null); - }); - - it('should set binaryFileList', () => { - component.ngOnInit(); - - expect(component.binaryFileList).toBe(fileList); - }); }); describe('binary file list', () => { it('should be called with binary file state resource', () => { - const binaryFileListComponent: BinaryFileListComponent = getMockComponent<BinaryFileListComponent>( - fixture, - BinaryFileListComponent, - ); + const binaryFileListComponent: BinaryFileListComponent = + getMockComponent<BinaryFileListComponent>(fixture, BinaryFileListComponent); - expect(binaryFileListComponent.binaryFileList).toBe(fileList); + expect(binaryFileListComponent.binaryFileListStateResource).toBe(binaryFileStateResource); }); }); }); diff --git a/alfa-client/libs/binary-file/src/lib/binary-file-list-container/binary-file-list-container.component.ts b/alfa-client/libs/binary-file/src/lib/binary-file-list-container/binary-file-list-container.component.ts index c5cc042d55293d3b46f144942ac7d6c0145e1078..b4dce3b40b8590f8037ad669d5469f6c88942f93 100644 --- a/alfa-client/libs/binary-file/src/lib/binary-file-list-container/binary-file-list-container.component.ts +++ b/alfa-client/libs/binary-file/src/lib/binary-file-list-container/binary-file-list-container.component.ts @@ -21,38 +21,27 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { BinaryFile, BinaryFileListLinkRel, BinaryFileListResource, BinaryFileService } from '@alfa-client/binary-file-shared'; -import { isNotNull, LinkRelationName, StateResource } from '@alfa-client/tech-shared'; -import { Component, Input, OnDestroy, OnInit } from '@angular/core'; -import { getEmbeddedResource, Resource } from '@ngxp/rest'; -import { filter, Subscription } from 'rxjs'; +import { BinaryFileListResource, BinaryFileService } from '@alfa-client/binary-file-shared'; +import { LinkRelationName, StateResource } from '@alfa-client/tech-shared'; +import { Component, Input, OnInit } from '@angular/core'; +import { Resource } from '@ngxp/rest'; +import { Observable } from 'rxjs'; import { BinaryFileListOrientation } from '../directive/binary-file-list-orientation/binary-file-list-orientation.directive'; @Component({ selector: 'alfa-binary-file-list-container', templateUrl: './binary-file-list-container.component.html', }) -export class BinaryFileListContainerComponent implements OnInit, OnDestroy { +export class BinaryFileListContainerComponent implements OnInit { @Input() resource: Resource; @Input() linkRel: LinkRelationName; @Input() listOrientation: BinaryFileListOrientation = BinaryFileListOrientation.HORIZONTAL; - public binaryFileList: BinaryFile[]; - public readonly binaryFileListLinkRel = BinaryFileListLinkRel; - binaryFileListSubscription: Subscription; + public binaryFileListStateResource$: Observable<StateResource<BinaryFileListResource>>; constructor(private service: BinaryFileService) {} ngOnInit(): void { - this.binaryFileListSubscription = this.service - .getFiles(this.resource, this.linkRel) - .pipe(filter((stateResource) => isNotNull(stateResource.resource))) - .subscribe((stateResource: StateResource<BinaryFileListResource>) => { - this.binaryFileList = getEmbeddedResource(stateResource.resource, this.binaryFileListLinkRel.FILE_LIST); - }); - } - - ngOnDestroy() { - this.binaryFileListSubscription.unsubscribe(); + this.binaryFileListStateResource$ = this.service.getFiles(this.resource, this.linkRel); } } diff --git a/alfa-client/libs/binary-file/src/lib/binary-file-list-container/binary-file-list/binary-file-list.component.html b/alfa-client/libs/binary-file/src/lib/binary-file-list-container/binary-file-list/binary-file-list.component.html index 33eab42685293e80d8a58610efaf4aa5b38efd4e..70054de869940144f9b0e1d3fa0eb7c23ea72a33 100644 --- a/alfa-client/libs/binary-file/src/lib/binary-file-list-container/binary-file-list/binary-file-list.component.html +++ b/alfa-client/libs/binary-file/src/lib/binary-file-list-container/binary-file-list/binary-file-list.component.html @@ -24,5 +24,10 @@ --> <div [binaryFileListOrientation]="listOrientation"> - <alfa-binary-file2-container *ngFor="let binaryFile of binaryFileList" [file]="binaryFile" [deletable]="false" /> + <alfa-binary-file2-container + *ngFor="let binaryFile of binaryFileListStateResource.resource | toEmbeddedResources: binaryFileListLinkRel.FILE_LIST" + [file]="binaryFile" + [deletable]="false" + > + </alfa-binary-file2-container> </div> diff --git a/alfa-client/libs/binary-file/src/lib/binary-file-list-container/binary-file-list/binary-file-list.component.spec.ts b/alfa-client/libs/binary-file/src/lib/binary-file-list-container/binary-file-list/binary-file-list.component.spec.ts index c3206eec76019cf1f7999bfaf0cec5208db594d5..fbbc820600ee4d1b3a9235dafd3515f9c1f16404 100644 --- a/alfa-client/libs/binary-file/src/lib/binary-file-list-container/binary-file-list/binary-file-list.component.spec.ts +++ b/alfa-client/libs/binary-file/src/lib/binary-file-list-container/binary-file-list/binary-file-list.component.spec.ts @@ -21,11 +21,11 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { BinaryFileResource } from '@alfa-client/binary-file-shared'; -import { ToEmbeddedResourcesPipe } from '@alfa-client/tech-shared'; +import { BinaryFileListResource, BinaryFileResource } from '@alfa-client/binary-file-shared'; +import { createStateResource, StateResource, ToEmbeddedResourcesPipe } from '@alfa-client/tech-shared'; import { getMockComponent } from '@alfa-client/test-utils'; import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { createBinaryFileResource } from 'libs/binary-file-shared/test/binary-file'; +import { createBinaryFileListResource, createBinaryFileResource } from 'libs/binary-file-shared/test/binary-file'; import { MockComponent, MockDirective } from 'ng-mocks'; import { BinaryFile2ContainerComponent } from '../../binary-file2-container/binary-file2-container.component'; import { BinaryFileListOrientationDirective } from '../../directive/binary-file-list-orientation/binary-file-list-orientation.directive'; @@ -36,6 +36,9 @@ describe('BinaryFileListComponent', () => { let fixture: ComponentFixture<BinaryFileListComponent>; const binaryFile: BinaryFileResource = createBinaryFileResource(); + const binaryFileListStateResource: StateResource<BinaryFileListResource> = createStateResource( + createBinaryFileListResource([binaryFile]), + ); beforeEach(async () => { await TestBed.configureTestingModule({ @@ -49,7 +52,7 @@ describe('BinaryFileListComponent', () => { fixture = TestBed.createComponent(BinaryFileListComponent); component = fixture.componentInstance; - component.binaryFileList = [binaryFile]; + component.binaryFileListStateResource = binaryFileListStateResource; fixture.detectChanges(); }); diff --git a/alfa-client/libs/binary-file/src/lib/binary-file-list-container/binary-file-list/binary-file-list.component.ts b/alfa-client/libs/binary-file/src/lib/binary-file-list-container/binary-file-list/binary-file-list.component.ts index 7d7e50bb090ffdda9ea58f2d297d08617d632ab9..f0ddb940344f0afeabe9b855b04a1d189b9f2840 100644 --- a/alfa-client/libs/binary-file/src/lib/binary-file-list-container/binary-file-list/binary-file-list.component.ts +++ b/alfa-client/libs/binary-file/src/lib/binary-file-list-container/binary-file-list/binary-file-list.component.ts @@ -21,7 +21,8 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { BinaryFile } from '@alfa-client/binary-file-shared'; +import { BinaryFileListLinkRel, BinaryFileListResource } from '@alfa-client/binary-file-shared'; +import { StateResource } from '@alfa-client/tech-shared'; import { Component, Input } from '@angular/core'; import { BinaryFileListOrientation } from '../../directive/binary-file-list-orientation/binary-file-list-orientation.directive'; @@ -30,6 +31,8 @@ import { BinaryFileListOrientation } from '../../directive/binary-file-list-orie templateUrl: './binary-file-list.component.html', }) export class BinaryFileListComponent { - @Input() public binaryFileList: BinaryFile[]; + @Input() public binaryFileListStateResource: StateResource<BinaryFileListResource>; @Input() listOrientation: BinaryFileListOrientation = BinaryFileListOrientation.HORIZONTAL; + + public readonly binaryFileListLinkRel = BinaryFileListLinkRel; }