From 581f4fddb499202ab1da660f0dd6df301b652d25 Mon Sep 17 00:00:00 2001 From: OZGCloud <ozgcloud@mgm-tp.com> Date: Mon, 28 Jun 2021 23:14:08 +0200 Subject: [PATCH] OZG-297 add spinner for attachmentList --- ...wiedervorlage-attachment-list.component.ts | 8 ++-- .../src/lib/wiedervorlage.service.ts | 2 +- .../wiedervorlage-attachments.component.html | 14 +++++-- .../wiedervorlage-attachments.component.ts | 2 +- ...-attachment-list-in-vorgang.component.html | 8 +++- ...tachment-list-in-vorgang.component.spec.ts | 4 +- ...ge-attachment-list-in-vorgang.component.ts | 13 ++++--- .../wiedervorlage.formservice.ts | 37 ++++++++++--------- 8 files changed, 51 insertions(+), 37 deletions(-) diff --git a/goofy-client/apps/goofy-e2e/src/components/wiedervorlage/wiedervorlage-attachment-list.component.ts b/goofy-client/apps/goofy-e2e/src/components/wiedervorlage/wiedervorlage-attachment-list.component.ts index 89f480fe52..9644c2b42d 100644 --- a/goofy-client/apps/goofy-e2e/src/components/wiedervorlage/wiedervorlage-attachment-list.component.ts +++ b/goofy-client/apps/goofy-e2e/src/components/wiedervorlage/wiedervorlage-attachment-list.component.ts @@ -18,6 +18,7 @@ export class WiedervorlageAttachmentListE2EComponent { class AttachmentE2EItem { private deleteButton$: string = 'icon-button'; + private downloadButton$: string = 'file-download-button'; constructor(private fileName: string) { } @@ -26,13 +27,10 @@ class AttachmentE2EItem { } public delete(): void { - this.getRoot().findTestElementWithClass(this.deleteButton$).then(button => { - button[0].click(); - cy.wait(1000); - }) + this.getRoot().findTestElementWithClass(this.deleteButton$).click(); } public download(): void { - this.getRoot().findTestElementWithClass('file-download-button').click(); + this.getRoot().findTestElementWithClass(this.downloadButton$).click(); } } \ No newline at end of file diff --git a/goofy-client/libs/wiedervorlage-shared/src/lib/wiedervorlage.service.ts b/goofy-client/libs/wiedervorlage-shared/src/lib/wiedervorlage.service.ts index e1459bc023..402567e7f7 100644 --- a/goofy-client/libs/wiedervorlage-shared/src/lib/wiedervorlage.service.ts +++ b/goofy-client/libs/wiedervorlage-shared/src/lib/wiedervorlage.service.ts @@ -251,7 +251,7 @@ export class WiedervorlageService implements OnDestroy { if (isNil(this.attachmentListByWiedervorlage[uri])) { this.attachmentListByWiedervorlage[uri] = new BehaviorSubject(createEmptyStateResource()); } else { - this.attachmentListByWiedervorlage[uri].next({ ...this.attachmentListByWiedervorlage[uri].value, reload: true }); + this.attachmentListByWiedervorlage[uri].next(createEmptyStateResource()); } doIfLoadingRequired(this.attachmentListByWiedervorlage[uri].value, () => this.loadAttachments(wiedervorlage)); diff --git a/goofy-client/libs/wiedervorlage/src/lib/wiedervorlage-attachments/wiedervorlage-attachments.component.html b/goofy-client/libs/wiedervorlage/src/lib/wiedervorlage-attachments/wiedervorlage-attachments.component.html index 1efc5f41b0..25bdd7df19 100644 --- a/goofy-client/libs/wiedervorlage/src/lib/wiedervorlage-attachments/wiedervorlage-attachments.component.html +++ b/goofy-client/libs/wiedervorlage/src/lib/wiedervorlage-attachments/wiedervorlage-attachments.component.html @@ -1,7 +1,13 @@ -<goofy-client-anhang-list-in-wiedervorlage data-test-id="wiedervorlage-attachment-list" - [attachments]="attachments$ | async" [deletable]="true" - (deleteAttachment)="deleteAttachment($event)"> -</goofy-client-anhang-list-in-wiedervorlage> +<ng-container *ngIf="attachments$ | async as attachmentStateResource"> + <goofy-client-spinner [stateResource]="attachmentStateResource"> + + <goofy-client-anhang-list-in-wiedervorlage data-test-id="wiedervorlage-attachment-list" + [attachments]="attachmentStateResource.resource" [deletable]="true" + (deleteAttachment)="deleteAttachment($event)"> + </goofy-client-anhang-list-in-wiedervorlage> + + </goofy-client-spinner> +</ng-container> <goofy-client-spinner [stateResource]="uploadInProgress$ | async"> <goofy-client-file-upload (fileChanged)="uploadFile($event)" data-test-id="wiedervorlage-file-upload"></goofy-client-file-upload> diff --git a/goofy-client/libs/wiedervorlage/src/lib/wiedervorlage-attachments/wiedervorlage-attachments.component.ts b/goofy-client/libs/wiedervorlage/src/lib/wiedervorlage-attachments/wiedervorlage-attachments.component.ts index e9b4ac9d85..1eb957001b 100644 --- a/goofy-client/libs/wiedervorlage/src/lib/wiedervorlage-attachments/wiedervorlage-attachments.component.ts +++ b/goofy-client/libs/wiedervorlage/src/lib/wiedervorlage-attachments/wiedervorlage-attachments.component.ts @@ -20,7 +20,7 @@ export class WiedervorlageAttachmentsComponent { readonly linkRel = WiedervorlageLinkRel; - attachments$: Observable<OzgFileResource[]> = of([]); + attachments$: Observable<StateResource<OzgFileResource[]>> = of(createEmptyStateResource()); uploadInProgress$: Observable<StateResource<any>> = of(createEmptyStateResource()); constructor(public formService: WiedervorlageFormService, private wiedervorlageService: WiedervorlageService) { diff --git a/goofy-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-attachment-list-in-vorgang/wiedervorlage-attachment-list-in-vorgang.component.html b/goofy-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-attachment-list-in-vorgang/wiedervorlage-attachment-list-in-vorgang.component.html index 94a8125649..0cf1bbe2b2 100644 --- a/goofy-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-attachment-list-in-vorgang/wiedervorlage-attachment-list-in-vorgang.component.html +++ b/goofy-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-attachment-list-in-vorgang/wiedervorlage-attachment-list-in-vorgang.component.html @@ -1 +1,7 @@ -<goofy-client-anhang-list-in-wiedervorlage [attachments]="attachments$ | async" [deletable]="false"></goofy-client-anhang-list-in-wiedervorlage> \ No newline at end of file +<ng-container *ngIf="attachments$ | async as attachmentStateResource"> + + <goofy-client-spinner [stateResource]="attachmentStateResource"> + <goofy-client-anhang-list-in-wiedervorlage [attachments]="attachmentStateResource.resource" [deletable]="false"></goofy-client-anhang-list-in-wiedervorlage> + </goofy-client-spinner> + +</ng-container> \ No newline at end of file diff --git a/goofy-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-attachment-list-in-vorgang/wiedervorlage-attachment-list-in-vorgang.component.spec.ts b/goofy-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-attachment-list-in-vorgang/wiedervorlage-attachment-list-in-vorgang.component.spec.ts index 229f3daf29..3dd1a1d79f 100644 --- a/goofy-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-attachment-list-in-vorgang/wiedervorlage-attachment-list-in-vorgang.component.spec.ts +++ b/goofy-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-attachment-list-in-vorgang/wiedervorlage-attachment-list-in-vorgang.component.spec.ts @@ -1,6 +1,7 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { AnhangListInWiedervorlageComponent } from '@goofy-client/ozg-file'; import { mock } from '@goofy-client/test-utils'; +import { SpinnerComponent } from '@goofy-client/ui'; import { WiedervorlageService } from '@goofy-client/wiedervorlage-shared'; import { configureTestSuite } from 'ng-bullet'; import { MockComponent } from 'ng-mocks'; @@ -16,7 +17,8 @@ describe('WiedervorlageAttachmentListInVorgangComponent', () => { TestBed.configureTestingModule({ declarations: [ WiedervorlageAttachmentListInVorgangComponent, - MockComponent(AnhangListInWiedervorlageComponent) + MockComponent(AnhangListInWiedervorlageComponent), + MockComponent(SpinnerComponent) ], providers: [ { diff --git a/goofy-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-attachment-list-in-vorgang/wiedervorlage-attachment-list-in-vorgang.component.ts b/goofy-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-attachment-list-in-vorgang/wiedervorlage-attachment-list-in-vorgang.component.ts index 6409871fbb..ddd5a0d860 100644 --- a/goofy-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-attachment-list-in-vorgang/wiedervorlage-attachment-list-in-vorgang.component.ts +++ b/goofy-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-attachment-list-in-vorgang/wiedervorlage-attachment-list-in-vorgang.component.ts @@ -1,5 +1,6 @@ import { Component, Input, OnChanges, SimpleChanges } from '@angular/core'; import { OzgFileListLinkRel, OzgFileListResource, OzgFileResource } from '@goofy-client/ozg-file-shared'; +import { createEmptyStateResource, createStateResource, StateResource } from '@goofy-client/tech-shared'; import { WiedervorlageResource, WiedervorlageService } from '@goofy-client/wiedervorlage-shared'; import { getEmbeddedResource } from '@ngxp/rest'; import { Observable, of } from 'rxjs'; @@ -16,21 +17,21 @@ export class WiedervorlageAttachmentListInVorgangComponent implements OnChanges readonly fileListRel = OzgFileListLinkRel; - attachments$: Observable<OzgFileResource[]> = of([]); + attachments$: Observable<StateResource<OzgFileResource[]>> = of(createEmptyStateResource()); constructor(public wiedervorlageService: WiedervorlageService) { } ngOnChanges(changes: SimpleChanges): void { if (changes.wiedervorlage) { this.attachments$ = this.wiedervorlageService.getAttachmentList(this.wiedervorlage).pipe( - map(attachmentList => this.mapAttachments(attachmentList.resource)) + map(attachmentList => this.mapAttachments(attachmentList)) ); } } - private mapAttachments(attachmentList: OzgFileListResource): OzgFileResource[] { - return attachmentList - ? getEmbeddedResource<OzgFileResource[]>(attachmentList, OzgFileListLinkRel.FILE_LIST) - : []; + private mapAttachments(attachmentListStateResource: StateResource<OzgFileListResource>): StateResource<OzgFileResource[]> { + return attachmentListStateResource.resource + ? createStateResource(getEmbeddedResource<OzgFileResource[]>(attachmentListStateResource.resource, OzgFileListLinkRel.FILE_LIST)) + : { ...attachmentListStateResource, resource: [] }; } } \ No newline at end of file diff --git a/goofy-client/libs/wiedervorlage/src/lib/wiedervorlage-page-container/wiedervorlage-page/wiedervorlage-form/wiedervorlage.formservice.ts b/goofy-client/libs/wiedervorlage/src/lib/wiedervorlage-page-container/wiedervorlage-page/wiedervorlage-form/wiedervorlage.formservice.ts index c6796e4a81..7850da47ad 100644 --- a/goofy-client/libs/wiedervorlage/src/lib/wiedervorlage-page-container/wiedervorlage-page/wiedervorlage-form/wiedervorlage.formservice.ts +++ b/goofy-client/libs/wiedervorlage/src/lib/wiedervorlage-page-container/wiedervorlage-page/wiedervorlage-form/wiedervorlage.formservice.ts @@ -1,12 +1,11 @@ import { Injectable, OnDestroy } from '@angular/core'; import { FormBuilder, FormControl, FormGroup } from '@angular/forms'; import { OzgFileListLinkRel, OzgFileListResource, OzgFileResource } from '@goofy-client/ozg-file-shared'; -import { AbstractFormService, createFutureDate, format, StateResource } from '@goofy-client/tech-shared'; +import { AbstractFormService, createFutureDate, createStateResource, format, StateResource } from '@goofy-client/tech-shared'; import { Wiedervorlage, WiedervorlageLinkRel, WiedervorlageResource, WiedervorlageService } from '@goofy-client/wiedervorlage-shared'; import { getEmbeddedResource, getUrl, hasLink } from '@ngxp/rest'; import { isNil, isNull } from 'lodash-es'; import { BehaviorSubject, Observable, Subscription } from 'rxjs'; -import { tap } from 'rxjs/operators'; @Injectable() export class WiedervorlageFormService extends AbstractFormService implements OnDestroy { @@ -17,7 +16,7 @@ export class WiedervorlageFormService extends AbstractFormService implements OnD static readonly FIELD_PATH_PREFIX = 'command.wiedervorlage'; - private attachments: BehaviorSubject<OzgFileResource[]>; + private attachments: BehaviorSubject<StateResource<OzgFileResource[]>>; private attachmentSubscription: Subscription; constructor( @@ -26,18 +25,17 @@ export class WiedervorlageFormService extends AbstractFormService implements OnD ) { super(formBuilder); - this.attachments = new BehaviorSubject([]); + this.attachments = new BehaviorSubject(createStateResource([])); } doAfterPatch(wiedervorlage: WiedervorlageResource): void { if (!isNil(this.attachmentSubscription)) this.attachmentSubscription.unsubscribe(); - console.info('do after patch'); if (this.hasAttachments(wiedervorlage)) { + this.attachments.next({ ...this.attachments.value, reload: true }); this.subscribeToAttachments(wiedervorlage); } else { - console.info('update attachments to []'); - this.attachments.next([]); + this.attachments.next(createStateResource([])); } } @@ -51,8 +49,7 @@ export class WiedervorlageFormService extends AbstractFormService implements OnD handleAttachmentList(attachmentsList: StateResource<OzgFileListResource>): void { if (attachmentsList.resource) { - console.info('update attachments to existing'); - this.attachments.next(getEmbeddedResource<OzgFileResource[]>(attachmentsList.resource, OzgFileListLinkRel.FILE_LIST)); + this.attachments.next(createStateResource(getEmbeddedResource<OzgFileResource[]>(attachmentsList.resource, OzgFileListLinkRel.FILE_LIST))); } } @@ -78,25 +75,29 @@ export class WiedervorlageFormService extends AbstractFormService implements OnD getValue(): Wiedervorlage { const formValue = super.getFormValue(); - return { ...formValue, frist: format(formValue.frist), attachments: this.attachments.value.map(ozgFile => getUrl(ozgFile)) }; + return { ...formValue, frist: format(formValue.frist), attachments: this.attachments.value.resource.map(ozgFile => getUrl(ozgFile)) }; } - public getAttachments(): Observable<OzgFileResource[]> { - return this.attachments.asObservable().pipe(tap(attachments => console.info('fire with: ', attachments))); + public getAttachments(): Observable<StateResource<OzgFileResource[]>> { + return this.attachments.asObservable(); } public addAttachment(attachment: OzgFileResource): void { + /* this.attachments.next({ ...this.attachments.value, loading: true }); + setTimeout(() => { */ let attachments = this.attachments.value; - attachments.push(attachment); - console.info('update attachment: add: ', attachment); - this.attachments.next(attachments); + attachments.resource.push(attachment); + this.attachments.next(createStateResource(attachments.resource)); + //}, 200); } public deleteAttachment(attachment: OzgFileResource): void { + /* this.attachments.next({ ...this.attachments.value, loading: true }); + setTimeout(() => { */ let attachments = this.attachments.value; - attachments.splice(attachments.indexOf(attachment), 1); - console.info('update attachment: delete: ', attachment); - this.attachments.next(attachments); + attachments.resource.splice(attachments.resource.indexOf(attachment), 1); + this.attachments.next(createStateResource(attachments.resource)); + //}, 200); } ngOnDestroy(): void { -- GitLab