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