Skip to content
Snippets Groups Projects
Commit 581f4fdd authored by OZGCloud's avatar OZGCloud
Browse files

OZG-297 add spinner for attachmentList

parent a14cd5d6
No related branches found
No related tags found
No related merge requests found
Showing
with 51 additions and 37 deletions
......@@ -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
......@@ -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));
......
<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]="attachments$ | async" [deletable]="true"
[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>
</goofy-client-spinner>
......@@ -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) {
......
<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
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: [
{
......
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
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 {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment