diff --git a/goofy-client/libs/ozg-file/src/lib/anhang-list-container/anhang-list-container.component.html b/goofy-client/libs/ozg-file/src/lib/anhang-list-container/anhang-list-container.component.html index c444775a8b3b65d44da62d059e8454acfc783026..57d9cd2b4775294b770336eacadc1959ba654cfc 100644 --- a/goofy-client/libs/ozg-file/src/lib/anhang-list-container/anhang-list-container.component.html +++ b/goofy-client/libs/ozg-file/src/lib/anhang-list-container/anhang-list-container.component.html @@ -2,7 +2,7 @@ <ng-container *ngIf="attachmentStateResource$ | async as attachmentStateResource"> <goofy-client-spinner [stateResource]="attachmentStateResource"> - <goofy-client-anhaenge *ngIf="vorgangWithEingang | hasLink: linkRel.ATTACHMENTS; else emptyAnhaenge" data-test-id="anhaenge" class="files" + <goofy-client-anhaenge *ngIf="vorgangWithEingang | hasLink: linkRel.ATTACHMENTS; else emptyAnhaenge" data-test-id="anhaenge" class="files" [attachments]="attachmentStateResource.resource | toEmbeddedResources: fileListRel.FILE_LIST"> </goofy-client-anhaenge> diff --git a/goofy-client/libs/ozg-file/src/lib/anhang-list-container/anhang-list-container.component.spec.ts b/goofy-client/libs/ozg-file/src/lib/anhang-list-container/anhang-list-container.component.spec.ts index 4cc21fb1aefed0e1c8bef39477568e1d8f42bed6..e232aa6917eb27f9accc4039adaa0b15bab8e2ca 100644 --- a/goofy-client/libs/ozg-file/src/lib/anhang-list-container/anhang-list-container.component.spec.ts +++ b/goofy-client/libs/ozg-file/src/lib/anhang-list-container/anhang-list-container.component.spec.ts @@ -94,10 +94,9 @@ describe('AnhangListContainerComponent', () => { describe('ng on changes', () => { it('should call vorgang service getAttachments', () => { - component.vorgangWithEingang = vorgang; component.ngOnChanges(); - expect(vorgangService.getAttachments).toHaveBeenCalledWith(vorgang); + expect(vorgangService.getAttachments).toHaveBeenCalled(); }) }) }); \ No newline at end of file diff --git a/goofy-client/libs/ozg-file/src/lib/anhang-list-container/anhang-list-container.component.ts b/goofy-client/libs/ozg-file/src/lib/anhang-list-container/anhang-list-container.component.ts index 538de97d4480e28226ac7a7ce2434943f57fff74..b06929e3f7688aa23c7b9ac97037ced4b80a621b 100644 --- a/goofy-client/libs/ozg-file/src/lib/anhang-list-container/anhang-list-container.component.ts +++ b/goofy-client/libs/ozg-file/src/lib/anhang-list-container/anhang-list-container.component.ts @@ -21,6 +21,6 @@ export class AnhangListContainerComponent implements OnChanges { constructor(private vorgangService: VorgangService) { } ngOnChanges(): void { - this.attachmentStateResource$ = this.vorgangService.getAttachments(this.vorgangWithEingang); + this.attachmentStateResource$ = this.vorgangService.getAttachments(); } } diff --git a/goofy-client/libs/vorgang-shared/src/lib/vorgang.service.spec.ts b/goofy-client/libs/vorgang-shared/src/lib/vorgang.service.spec.ts index 3461845ce1c44dc7a42614ba4e58cfb6fa02e139..90b3b82731b2cba42e4b684c356c6ae30206b621 100644 --- a/goofy-client/libs/vorgang-shared/src/lib/vorgang.service.spec.ts +++ b/goofy-client/libs/vorgang-shared/src/lib/vorgang.service.spec.ts @@ -83,12 +83,6 @@ describe('VorgangService', () => { expect(service.loadPendingCommandsByVorgang).toHaveBeenCalled(); }) - - it('should load attachments', () => { - service.updateVorgang(createVorgangWithEingangResource()); - - expect(service.loadAttachments).toHaveBeenCalled(); - }) }) describe('loadPendingCommandsByVorgang', () => { @@ -202,23 +196,20 @@ describe('VorgangService', () => { describe('loadAttachments', () => { beforeEach(() => { + service.setStateResourceOnLoading = jest.fn(); repository.getAttachments.mockReturnValue(of(createOzgFileListResource())); }) - it('should call repository', () => { - const vorgang: VorgangWithEingangResource = createVorgangWithEingangResource([VorgangWithEingangLinkRel.ATTACHMENTS]); - - service.loadAttachments(vorgang); + it('should set loading flag', () => { + service.loadAttachments(); - expect(repository.getAttachments).toHaveBeenCalledWith(vorgang); + expect(service.setStateResourceOnLoading).toHaveBeenCalled(); }) - it('should NOT call repository', () => { - const vorgang: VorgangWithEingangResource = createVorgangWithEingangResource(); - - service.loadAttachments(vorgang); + it('should call repository', () => { + service.loadAttachments(); - expect(repository.getAttachments).not.toHaveBeenCalled(); + expect(repository.getAttachments).toHaveBeenCalled(); }) }) diff --git a/goofy-client/libs/vorgang-shared/src/lib/vorgang.service.ts b/goofy-client/libs/vorgang-shared/src/lib/vorgang.service.ts index 7f32ad4888013deaf09aa31561bf893230da50f3..3f1e90486946cda1bb5e7852de5b3a039b24c3d4 100644 --- a/goofy-client/libs/vorgang-shared/src/lib/vorgang.service.ts +++ b/goofy-client/libs/vorgang-shared/src/lib/vorgang.service.ts @@ -10,7 +10,7 @@ import { isNil, isUndefined } from 'lodash-es'; import { BehaviorSubject, Observable, Subscription } from 'rxjs'; import { first, startWith, tap } from 'rxjs/operators'; import { VorgangWithEingangLinkRel } from './vorgang.linkrel'; -import { CreateAssignUserCommand, VorgangOrder, VorgangResource, VorgangWithEingangResource } from './vorgang.model'; +import { CreateAssignUserCommand, VorgangOrder, VorgangWithEingangResource } from './vorgang.model'; import { VorgangRepository } from './vorgang.repository'; @Injectable({ providedIn: 'root' }) @@ -61,7 +61,6 @@ export class VorgangService { this.setVorgangWithEingang(createStateResource(vorgang)); //TODO nur laden, wenn es notwendig ist -> im HTML anstoßen this.loadPendingCommandsByVorgang(vorgang); - //this.loadAttachments(vorgang); } setVorgangWithEingang(stateResource: StateResource<VorgangWithEingangResource>) { @@ -124,15 +123,17 @@ export class VorgangService { stateResource$.next({ ...stateResource$.value, loading: true }); } - getAttachments(vorgang: VorgangWithEingangResource): Observable<StateResource<OzgFileListResource>> { - doIfLoadingRequired(this.attachments$.value, () => { - this.setStateResourceOnLoading(this.attachments$); - this.vorgangRepository.getAttachments(vorgang).pipe(first()) - .subscribe(result => this.attachments$.next(createStateResource(result))) - }) + getAttachments(): Observable<StateResource<OzgFileListResource>> { + doIfLoadingRequired(this.attachments$.value, () => this.loadAttachments()); return this.attachments$.asObservable(); } + loadAttachments(): void { + this.setStateResourceOnLoading(this.attachments$); + this.vorgangRepository.getAttachments(this.getVorgang()).pipe(first()) + .subscribe(result => this.attachments$.next(createStateResource(result))) + } + private listenForLeavingVorgang(): void { if (!isNil(this.navigationSubscription)) this.navigationSubscription.unsubscribe(); this.navigationSubscription = this.navigationService.urlChanged().subscribe(params => this.onNavigation(params)); @@ -163,21 +164,23 @@ export class VorgangService { this.attachments$.next(createEmptyStateResource()); } - getVorgang(): VorgangResource { - return this.vorgangWithEingang$.value.resource; - } + reloadVorgang(commandResource: CommandResource): void { this.loadVorgangWithEingang(getUrl(commandResource, CommandLinkRel.EFFECTED_RESOURCE)); } public assignUser(userUri: ResourceUri): Observable<StateResource<CommandResource>> { - return this.commandService.createCommand(this.vorgangWithEingang$.value.resource, VorgangWithEingangLinkRel.ASSIGN, this.createAssignUserOrder(userUri)).pipe( + return this.commandService.createCommand(this.getVorgang(), VorgangWithEingangLinkRel.ASSIGN, this.createAssignUserOrder(userUri)).pipe( tap(commandStateResource => this.reloadVorgangOnDone(commandStateResource)), startWith(createEmptyStateResource<CommandResource>(true)) ) } + public getVorgang(): VorgangWithEingangResource { + return this.vorgangWithEingang$.value.resource; + } + reloadVorgangOnDone(commandResource: StateResource<CommandResource>): void { if (isDone(commandResource.resource)) { this.reloadVorgang(commandResource.resource);