From 1f5cab052a9e9e24ba12b6e2c6e05c66a315c229 Mon Sep 17 00:00:00 2001 From: sebo <sebastian.bergandy@external.mgm-cp.com> Date: Wed, 26 Feb 2025 09:29:22 +0100 Subject: [PATCH] OZG-5977 add multi file upload to wiedervorlagen Sub task: OZG-7782 --- ...le-upload-list-container.component.spec.ts | 62 +++-- .../file-upload-list-container.component.ts | 25 ++- .../src/lib/wiedervorlage.model.ts | 3 + .../src/lib/wiedervorlage.service.spec.ts | 212 +++++------------- .../src/lib/wiedervorlage.service.ts | 186 ++++----------- ...mit-wiedervorlage-button.component.spec.ts | 14 +- .../submit-wiedervorlage-button.component.ts | 5 +- ...e-attachment-list-container.component.html | 31 --- ...e-attachment-list-container.component.scss | 32 --- ...ttachment-list-container.component.spec.ts | 64 ------ ...age-attachment-list-container.component.ts | 51 ----- .../wiedervorlage-in-vorgang.component.html | 30 ++- .../wiedervorlage-in-vorgang.component.ts | 12 +- .../wiedervorlage-form.component.html | 21 +- .../wiedervorlage-form.component.spec.ts | 48 +--- .../wiedervorlage-form.component.ts | 44 +--- .../src/lib/wiedervorlage.module.ts | 36 +-- 17 files changed, 231 insertions(+), 645 deletions(-) delete mode 100644 alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-attachment-list-container/wiedervorlage-attachment-list-container.component.html delete mode 100644 alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-attachment-list-container/wiedervorlage-attachment-list-container.component.scss delete mode 100644 alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-attachment-list-container/wiedervorlage-attachment-list-container.component.spec.ts delete mode 100644 alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-attachment-list-container/wiedervorlage-attachment-list-container.component.ts diff --git a/alfa-client/libs/binary-file/src/lib/file-upload-list-container/file-upload-list-container.component.spec.ts b/alfa-client/libs/binary-file/src/lib/file-upload-list-container/file-upload-list-container.component.spec.ts index 379778effd..ccf5fe6762 100644 --- a/alfa-client/libs/binary-file/src/lib/file-upload-list-container/file-upload-list-container.component.spec.ts +++ b/alfa-client/libs/binary-file/src/lib/file-upload-list-container/file-upload-list-container.component.spec.ts @@ -4,6 +4,7 @@ import { mock, Mock } from '@alfa-client/test-utils'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { faker } from '@faker-js/faker'; import { expect } from '@jest/globals'; +import { Resource } from '@ngxp/rest'; import { cold } from 'jest-marbles'; import { MockComponent } from 'ng-mocks'; import { EMPTY, of } from 'rxjs'; @@ -37,41 +38,64 @@ describe('FileUploadListContainerComponent', () => { fixture.detectChanges(); }); - describe('component', () => { - it('should create', () => { - expect(component).toBeTruthy(); - }); + it('should create', () => { + expect(component).toBeTruthy(); + }); + describe('component', () => { it('should have default value', () => { expect(component.listOrientation).toEqual(BinaryFileListOrientation.HORIZONTAL); }); - describe('ngOnInit', () => { + describe('set files resource', () => { + beforeEach(() => { + component._initFileList = jest.fn(); + }); + + it('should set value', () => { + const resource: Resource = createDummyResource(); + + component.filesResource = resource; + + expect(component._filesResource).toEqual(resource); + }); + + it('should init file list', () => { + component.filesResource = createDummyResource(); + + expect(component._initFileList).toHaveBeenCalled(); + }); + }); + + describe('_initFileList', () => { beforeEach(() => { binaryFileService.getFiles.mockReturnValue(EMPTY); }); describe('on existing files', () => { + const filesLinkRel = DummyLinkRel.DUMMY; + const filesResource: Resource = createDummyResource([filesLinkRel]); + beforeEach(() => { - component.filesResource = createDummyResource([DummyLinkRel.DUMMY]); - component.filesLinkRel = DummyLinkRel.DUMMY; + component.filesResource = filesResource; + component.filesLinkRel = filesLinkRel; component.fileUploadType = faker.word.noun(); }); it('should load existing files', () => { - component.filesResource = createDummyResource([DummyLinkRel.DUMMY]); - component.filesLinkRel = DummyLinkRel.DUMMY; + component.filesResource = filesResource; + component.filesLinkRel = filesLinkRel; - component.ngOnInit(); + component._initFileList(); - expect(binaryFileService.getFiles).toHaveBeenCalledWith(component.filesResource, component.filesLinkRel); + expect(binaryFileService.getFiles).toHaveBeenCalledWith(filesResource, filesLinkRel); }); it('should add loaded files', () => { const stateResource: StateResource<BinaryFileListResource> = createStateResource(createBinaryFileListResource()); binaryFileService.getFiles.mockReturnValue(of(stateResource)); - component.ngOnInit(); + component._initFileList(); component.uploadedFiles$.subscribe(); expect(binaryFileService.addFiles).toHaveBeenCalledWith( @@ -84,7 +108,7 @@ describe('FileUploadListContainerComponent', () => { const stateResource: StateResource<BinaryFileListResource> = createStateResource(createBinaryFileListResource()); binaryFileService.getFiles.mockReturnValue(of(stateResource)); - component.ngOnInit(); + component._initFileList(); component.uploadedFiles$.subscribe(); expect(binaryFileService.getUploadedFiles).toHaveBeenCalledWith(component.fileUploadType); @@ -96,26 +120,28 @@ describe('FileUploadListContainerComponent', () => { const uploadedFiles: UploadFile[] = [createUploadFile()]; binaryFileService.getUploadedFiles.mockReturnValue(cold('-a', { a: uploadedFiles })); - component.ngOnInit(); + component._initFileList(); expect(component.uploadedFiles$).toBeObservable(cold('a-b', { a: {}, b: uploadedFiles })); }); }); describe('on none existing files', () => { + const filesResource: Resource = createDummyResource(); + beforeEach(() => { - component.filesResource = createDummyResource(); + component.filesResource = filesResource; component.filesLinkRel = DummyLinkRel.DUMMY; }); it('should NOT load existing files', () => { - component.ngOnInit(); + component._initFileList(); expect(binaryFileService.getFiles).not.toHaveBeenCalled(); }); it('should get uploaded files', () => { - component.ngOnInit(); + component._initFileList(); expect(binaryFileService.getUploadedFiles).toHaveBeenCalledWith(component.fileUploadType); }); @@ -124,7 +150,7 @@ describe('FileUploadListContainerComponent', () => { const uploadFile: UploadFile = createUploadFile(); binaryFileService.getUploadedFiles = jest.fn().mockReturnValue(singleColdCompleted(uploadFile)); - component.ngOnInit(); + component._initFileList(); expect(component.uploadedFiles$).toBeObservable(singleColdCompleted(uploadFile)); }); diff --git a/alfa-client/libs/binary-file/src/lib/file-upload-list-container/file-upload-list-container.component.ts b/alfa-client/libs/binary-file/src/lib/file-upload-list-container/file-upload-list-container.component.ts index b469cf13ef..406726ee4d 100644 --- a/alfa-client/libs/binary-file/src/lib/file-upload-list-container/file-upload-list-container.component.ts +++ b/alfa-client/libs/binary-file/src/lib/file-upload-list-container/file-upload-list-container.component.ts @@ -7,7 +7,7 @@ import { } from '@alfa-client/binary-file-shared'; import { getEmbeddedResources, isLoaded, StateResource } from '@alfa-client/tech-shared'; import { AsyncPipe } from '@angular/common'; -import { Component, inject, Input, OnInit } from '@angular/core'; +import { Component, inject, Input } from '@angular/core'; import { hasLink, Resource } from '@ngxp/rest'; import { filter, map, Observable, startWith, switchMap } from 'rxjs'; import { tap } from 'rxjs/operators'; @@ -20,19 +20,30 @@ import { FileUploadListComponent } from './file-upload-list/file-upload-list.com templateUrl: './file-upload-list-container.component.html', imports: [FileUploadListComponent, AsyncPipe], }) -export class FileUploadListContainerComponent implements OnInit { +export class FileUploadListContainerComponent { @Input() fileUploadType: string; @Input() parentFormArrayName: string; @Input() listOrientation: BinaryFileListOrientation = BinaryFileListOrientation.HORIZONTAL; - @Input() filesResource: Resource; - @Input() filesLinkRel: string; + + @Input() set filesResource(value: Resource) { + this._filesResource = value; + this._initFileList(); + } + + @Input() set filesLinkRel(value: string) { + this._filesLinkRel = value; + this._initFileList(); + } + private readonly binaryFileService: BinaryFileService = inject(BinaryFileService); public uploadedFiles$: Observable<UploadFileByIdentifier>; + _filesResource: Resource; + _filesLinkRel: string; - ngOnInit(): void { - if (hasLink(this.filesResource, this.filesLinkRel)) { - this.uploadedFiles$ = this.binaryFileService.getFiles(this.filesResource, this.filesLinkRel).pipe( + _initFileList(): void { + if (hasLink(this._filesResource, this._filesLinkRel)) { + this.uploadedFiles$ = this.binaryFileService.getFiles(this._filesResource, this._filesLinkRel).pipe( filter(isLoaded), map((files: StateResource<BinaryFileListResource>) => getEmbeddedResources(files, BinaryFileListLinkRel.FILE_LIST)), tap((binaryFileResources: BinaryFileResource[]) => diff --git a/alfa-client/libs/wiedervorlage-shared/src/lib/wiedervorlage.model.ts b/alfa-client/libs/wiedervorlage-shared/src/lib/wiedervorlage.model.ts index 2da311b309..a9fbef74f5 100644 --- a/alfa-client/libs/wiedervorlage-shared/src/lib/wiedervorlage.model.ts +++ b/alfa-client/libs/wiedervorlage-shared/src/lib/wiedervorlage.model.ts @@ -36,8 +36,11 @@ export interface Wiedervorlage { } export interface WiedervorlageResource extends Wiedervorlage, Resource {} + export interface WiedervorlageListResource extends ListResource {} export interface BinaryFileListByWiedervorlageUri { [uri: ResourceUri]: BehaviorSubject<StateResource<BinaryFileListResource>>; } + +export const WIEDERVORLAGE_UPLOADED_ATTACHMENTS = 'wiedervorlage_uploaded_attachments'; diff --git a/alfa-client/libs/wiedervorlage-shared/src/lib/wiedervorlage.service.spec.ts b/alfa-client/libs/wiedervorlage-shared/src/lib/wiedervorlage.service.spec.ts index b9cc7466f7..ad422fa11b 100644 --- a/alfa-client/libs/wiedervorlage-shared/src/lib/wiedervorlage.service.spec.ts +++ b/alfa-client/libs/wiedervorlage-shared/src/lib/wiedervorlage.service.spec.ts @@ -21,49 +21,28 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { BinaryFileListResource, BinaryFileService } from '@alfa-client/binary-file-shared'; +import { BinaryFileService } from '@alfa-client/binary-file-shared'; import { CommandOrder, CommandResource, CommandService } from '@alfa-client/command-shared'; import { NavigationService } from '@alfa-client/navigation-shared'; -import { - StateResource, - createEmptyStateResource, - createStateResource, - decodeUrlFromEmbedding, -} from '@alfa-client/tech-shared'; +import * as TechShared from '@alfa-client/tech-shared'; +import { createEmptyStateResource, createStateResource, decodeUrlFromEmbedding, StateResource } from '@alfa-client/tech-shared'; import { Mock, mock, useFromMock } from '@alfa-client/test-utils'; import { SnackBarService } from '@alfa-client/ui'; -import { - VorgangResource, - VorgangService, - VorgangWithEingangResource, -} from '@alfa-client/vorgang-shared'; +import { VorgangResource, VorgangService, VorgangWithEingangResource } from '@alfa-client/vorgang-shared'; +import { expect } from '@jest/globals'; import { getUrl } from '@ngxp/rest'; import { cold, hot } from 'jest-marbles'; -import { createBinaryFileListResource } from 'libs/binary-file-shared/test/binary-file'; import { CommandLinkRel } from 'libs/command-shared/src/lib/command.linkrel'; import { createCommandResource } from 'libs/command-shared/test/command'; -import { - createVorgangResource, - createVorgangWithEingangResource, -} from 'libs/vorgang-shared/test/vorgang'; -import { - createWiedervorlage, - createWiedervorlageListResource, - createWiedervorlageResource, -} from 'libs/wiedervorlage-shared/test/wiedervorlage'; +import { createVorgangResource, createVorgangWithEingangResource } from 'libs/vorgang-shared/test/vorgang'; +import { createWiedervorlage, createWiedervorlageListResource, createWiedervorlageResource, } from 'libs/wiedervorlage-shared/test/wiedervorlage'; import { of } from 'rxjs'; import { WiedervorlageLinkRel, WiedervorlageListLinkRel } from './wiedervorlage.linkrel'; import { WiedervorlageMessages } from './wiedervorlage.message'; -import { - Wiedervorlage, - WiedervorlageListResource, - WiedervorlageResource, -} from './wiedervorlage.model'; +import { Wiedervorlage, WIEDERVORLAGE_UPLOADED_ATTACHMENTS, WiedervorlageListResource, WiedervorlageResource, } from './wiedervorlage.model'; import { WiedervorlageRepository } from './wiedervorlage.repository'; import { WiedervorlageService } from './wiedervorlage.service'; -import * as TechShared from '@alfa-client/tech-shared'; - jest.mock('@alfa-client/tech-shared', () => mockAsEsModule('@alfa-client/tech-shared')); function mockAsEsModule(module: string) { @@ -86,9 +65,7 @@ describe('WiedervorlageService', () => { const wiedervorlageResource: WiedervorlageResource = createWiedervorlageResource(); const wiedervorlage: Wiedervorlage = createWiedervorlage(); const commandResource: CommandResource = createCommandResource(); - const commandResourceWithEffectedResourceLink: CommandResource = createCommandResource([ - CommandLinkRel.EFFECTED_RESOURCE, - ]); + const commandResourceWithEffectedResourceLink: CommandResource = createCommandResource([CommandLinkRel.EFFECTED_RESOURCE]); beforeEach(() => { repository = mock(WiedervorlageRepository); @@ -112,11 +89,9 @@ describe('WiedervorlageService', () => { describe('getWiedervorlageList', () => { const wiedervorlageList: WiedervorlageListResource = createWiedervorlageListResource(); - const wiedervorlageListStateResource: StateResource<WiedervorlageListResource> = - createStateResource(wiedervorlageList); + const wiedervorlageListStateResource: StateResource<WiedervorlageListResource> = createStateResource(wiedervorlageList); - const vorgangWithEingangStateResource: StateResource<VorgangWithEingangResource> = - createStateResource(vorgangResource); + const vorgangWithEingangStateResource: StateResource<VorgangWithEingangResource> = createStateResource(vorgangResource); beforeEach(() => { vorgangService.getVorgangWithEingang.mockReturnValue(of(vorgangWithEingangStateResource)); @@ -129,18 +104,12 @@ describe('WiedervorlageService', () => { }); it('should return values', () => { - vorgangService.getVorgangWithEingang.mockReturnValue( - hot('-a', { a: vorgangWithEingangStateResource }), - ); - service.wiedervorlageList$.asObservable = jest - .fn() - .mockReturnValue(hot('-a', { a: wiedervorlageListStateResource })); + vorgangService.getVorgangWithEingang.mockReturnValue(hot('-a', { a: vorgangWithEingangStateResource })); + service.wiedervorlageList$.asObservable = jest.fn().mockReturnValue(hot('-a', { a: wiedervorlageListStateResource })); const result = service.getWiedervorlageList(); - expect(result).toBeObservable( - cold('ab', { a: createEmptyStateResource(true), b: wiedervorlageListStateResource }), - ); + expect(result).toBeObservable(cold('ab', { a: createEmptyStateResource(true), b: wiedervorlageListStateResource })); }); it.skip('should call loadWiedervorlagenByVorgang if required', (done) => { @@ -159,9 +128,7 @@ describe('WiedervorlageService', () => { it('should NOT call loadWiedervorlagenByVorgang if already loaded', () => { service.loadWiedervorlagenByVorgang = jest.fn(); - service.wiedervorlageList$.asObservable = jest - .fn() - .mockReturnValue(of(wiedervorlageListStateResource)); + service.wiedervorlageList$.asObservable = jest.fn().mockReturnValue(of(wiedervorlageListStateResource)); service.getWiedervorlageList(); @@ -176,9 +143,7 @@ describe('WiedervorlageService', () => { createStateResource(wiedervorlageListResource); it('should return initial value', () => { - service.wiedervorlageList$.asObservable = jest - .fn() - .mockReturnValue(hot('-a', { a: wiedervorlageListResource })); + service.wiedervorlageList$.asObservable = jest.fn().mockReturnValue(hot('-a', { a: wiedervorlageListResource })); const result = service.getWiedervorlageListByGivenVorgang(vorgang); @@ -206,8 +171,7 @@ describe('WiedervorlageService', () => { describe('getWiedervorlage', () => { const wiedervorlage: WiedervorlageResource = createWiedervorlageResource(); - const wiedervorlageStateResource: StateResource<WiedervorlageResource> = - createStateResource(wiedervorlage); + const wiedervorlageStateResource: StateResource<WiedervorlageResource> = createStateResource(wiedervorlage); beforeEach(() => { navigationService.getDecodedParam.mockReturnValue(getUrl(wiedervorlageResource)); @@ -215,15 +179,11 @@ describe('WiedervorlageService', () => { }); it('should return initial values', () => { - service.wiedervorlage$.asObservable = jest - .fn() - .mockReturnValue(hot('-a', { a: wiedervorlageStateResource })); + service.wiedervorlage$.asObservable = jest.fn().mockReturnValue(hot('-a', { a: wiedervorlageStateResource })); const result = service.getWiedervorlage(); - expect(result).toBeObservable( - cold('ab', { a: createEmptyStateResource(true), b: wiedervorlageStateResource }), - ); + expect(result).toBeObservable(cold('ab', { a: createEmptyStateResource(true), b: wiedervorlageStateResource })); }); it('should set loading to true', () => { @@ -237,9 +197,7 @@ describe('WiedervorlageService', () => { it('should call navigationService', () => { service.getWiedervorlage().subscribe(); - expect(navigationService.getDecodedParam).toHaveBeenCalledWith( - WiedervorlageService.encodedWiedervorlageUriParam, - ); + expect(navigationService.getDecodedParam).toHaveBeenCalledWith(WiedervorlageService.encodedWiedervorlageUriParam); }); it('should call repository', () => { @@ -257,9 +215,7 @@ describe('WiedervorlageService', () => { describe('saveWiedervorlage', () => { beforeEach(() => { - commandService.createCommand.mockReturnValue( - of(createStateResource(commandResourceWithEffectedResourceLink)), - ); + commandService.createCommand.mockReturnValue(of(createStateResource(commandResourceWithEffectedResourceLink))); }); it('should return initial value and mapped value', () => { @@ -280,11 +236,10 @@ describe('WiedervorlageService', () => { it('should call command service', () => { service.saveWiedervorlage(wiedervorlageResource, wiedervorlage).subscribe(); - expect(commandService.createCommand).toHaveBeenCalledWith( - wiedervorlageResource, - WiedervorlageLinkRel.EDIT, - { order: CommandOrder.EDIT_WIEDERVORLAGE, body: wiedervorlage }, - ); + expect(commandService.createCommand).toHaveBeenCalledWith(wiedervorlageResource, WiedervorlageLinkRel.EDIT, { + order: CommandOrder.EDIT_WIEDERVORLAGE, + body: wiedervorlage, + }); }); it('should set submit-in-progress on loading', () => { @@ -300,10 +255,7 @@ describe('WiedervorlageService', () => { service.saveWiedervorlage(wiedervorlageResource, wiedervorlage).subscribe(); - const expectedMessage = WiedervorlageMessages.SAVED.replace( - '{betreff}', - wiedervorlage.betreff, - ); + const expectedMessage = WiedervorlageMessages.SAVED.replace('{betreff}', wiedervorlage.betreff); expect(service.proceedAfterReceiveCommand).toHaveBeenCalledWith( createStateResource(commandResourceWithEffectedResourceLink), expectedMessage, @@ -317,15 +269,11 @@ describe('WiedervorlageService', () => { }); it('should return intitial value and mapped value', () => { - commandService.createCommand.mockReturnValue( - hot('-a', { a: createStateResource(commandResource) }), - ); + commandService.createCommand.mockReturnValue(hot('-a', { a: createStateResource(commandResource) })); const result = service.createWiedervorlage(wiedervorlage); - expect(result).toBeObservable( - cold('ab', { a: createEmptyStateResource(true), b: createStateResource(commandResource) }), - ); + expect(result).toBeObservable(cold('ab', { a: createEmptyStateResource(true), b: createStateResource(commandResource) })); }); it('should set submit-in-progress on loading', () => { @@ -352,23 +300,14 @@ describe('WiedervorlageService', () => { service.createWiedervorlage(wiedervorlage).subscribe(); - const expectedMessage = WiedervorlageMessages.CREATED.replace( - '{betreff}', - wiedervorlage.betreff, - ); - expect(service.proceedAfterReceiveCommand).toHaveBeenCalledWith( - createStateResource(commandResource), - expectedMessage, - ); + const expectedMessage = WiedervorlageMessages.CREATED.replace('{betreff}', wiedervorlage.betreff); + expect(service.proceedAfterReceiveCommand).toHaveBeenCalledWith(createStateResource(commandResource), expectedMessage); }); }); describe('proceedAfterRecieveCommand', () => { it('should set reload on wiedervorlageList', () => { - service.proceedAfterReceiveCommand( - createStateResource(commandResourceWithEffectedResourceLink), - null, - ); + service.proceedAfterReceiveCommand(createStateResource(commandResourceWithEffectedResourceLink), null); expect(service.wiedervorlageList$.value.reload).toBe(true); }); @@ -383,15 +322,9 @@ describe('WiedervorlageService', () => { snackbarService.show = jest.fn(); const snackbarMessage: string = 'XX wurde XX'; - service.proceedAfterReceiveCommand( - createStateResource(commandResourceWithEffectedResourceLink), - snackbarMessage, - ); + service.proceedAfterReceiveCommand(createStateResource(commandResourceWithEffectedResourceLink), snackbarMessage); - expect(snackbarService.show).toHaveBeenCalledWith( - commandResourceWithEffectedResourceLink, - snackbarMessage, - ); + expect(snackbarService.show).toHaveBeenCalledWith(commandResourceWithEffectedResourceLink, snackbarMessage); }); }); @@ -399,9 +332,7 @@ describe('WiedervorlageService', () => { const wiedervorlageResource: WiedervorlageResource = createWiedervorlageResource(); beforeEach(() => { - commandService.createCommand.mockReturnValue( - of(createStateResource(commandResourceWithEffectedResourceLink)), - ); + commandService.createCommand.mockReturnValue(of(createStateResource(commandResourceWithEffectedResourceLink))); (<any>service).reloadWiedervorlageList = jest.fn(); (<any>service).loadAndSetWiedervorlageByUrl = jest.fn(); @@ -412,11 +343,10 @@ describe('WiedervorlageService', () => { it('should call commandService', () => { service.erledigen(); - expect(commandService.createCommand).toHaveBeenCalledWith( - wiedervorlageResource, - WiedervorlageLinkRel.ERLEDIGEN, - { order: CommandOrder.WIEDERVORLAGE_ERLEDIGEN, body: null }, - ); + expect(commandService.createCommand).toHaveBeenCalledWith(wiedervorlageResource, WiedervorlageLinkRel.ERLEDIGEN, { + order: CommandOrder.WIEDERVORLAGE_ERLEDIGEN, + body: null, + }); }); it('should reload wiedervorlage', () => { @@ -439,11 +369,10 @@ describe('WiedervorlageService', () => { it('should call commandService', () => { service.wiedereroeffnen(); - expect(commandService.createCommand).toHaveBeenCalledWith( - wiedervorlageResource, - WiedervorlageLinkRel.WIEDEREROEFFNEN, - { order: CommandOrder.WIEDERVORLAGE_WIEDEREROEFFNEN, body: null }, - ); + expect(commandService.createCommand).toHaveBeenCalledWith(wiedervorlageResource, WiedervorlageLinkRel.WIEDEREROEFFNEN, { + order: CommandOrder.WIEDERVORLAGE_WIEDEREROEFFNEN, + body: null, + }); }); it('should reload wiedervorlage', () => { @@ -467,9 +396,7 @@ describe('WiedervorlageService', () => { const message: string = 'SnackbarMessage'; it('should call service if command is done', () => { - const commandResource: CommandResource = createCommandResource([ - CommandLinkRel.EFFECTED_RESOURCE, - ]); + const commandResource: CommandResource = createCommandResource([CommandLinkRel.EFFECTED_RESOURCE]); service.showSnackBar(commandResource, message); @@ -491,7 +418,6 @@ describe('WiedervorlageService', () => { service.setWiedervorlageListReload = jest.fn(); (<any>service).forceWiedervorlageReload = jest.fn(); - service.clearAttachmentList = jest.fn(); service.clearWiedervorlagenList = jest.fn(); }); @@ -513,9 +439,11 @@ describe('WiedervorlageService', () => { }); it('should clear attachments', () => { + service.clearUploadedFiles = jest.fn(); + service.onNavigation({}); - expect(service.clearAttachmentList).toHaveBeenCalled(); + expect(service.clearUploadedFiles).toHaveBeenCalled(); }); }); @@ -527,49 +455,15 @@ describe('WiedervorlageService', () => { }); it('should clear attachments', () => { + service.clearUploadedFiles = jest.fn(); + service.onNavigation({}); - expect(service.clearAttachmentList).toHaveBeenCalled(); + expect(service.clearUploadedFiles).toHaveBeenCalled(); }); }); }); - describe('load attachments', () => { - const binaryFileListResource: BinaryFileListResource = createBinaryFileListResource(); - const binaryFileStateResource: StateResource<BinaryFileListResource> = - createStateResource(binaryFileListResource); - - beforeEach(() => { - binaryFileService.getFiles.mockReturnValue(of(binaryFileStateResource)); - service.setAttachmentLoading = jest.fn(); - }); - - it('should set attachment state resource on loading', () => { - service.loadAttachments(wiedervorlageResource); - - expect(service.setAttachmentLoading).toHaveBeenCalledWith(wiedervorlageResource); - }); - - it('should call file service', () => { - service.loadAttachments(wiedervorlageResource); - - expect(binaryFileService.getFiles).toHaveBeenCalledWith( - wiedervorlageResource, - WiedervorlageLinkRel.ATTACHMENTS, - ); - }); - - it('should set loaded resource into state resource', () => { - service.loadAttachments(wiedervorlageResource); - - service.getAttachmentList(wiedervorlageResource); - const result: StateResource<BinaryFileListResource> = - service.attachmentListByWiedervorlage[getUrl(wiedervorlageResource)].value; - - expect(result).toEqual(binaryFileStateResource); - }); - }); - describe('loadWiedervorlagenByVorgangStrict', () => { const wiedervorlageListResource: WiedervorlageListResource = createWiedervorlageListResource(); @@ -618,4 +512,12 @@ describe('WiedervorlageService', () => { expect(repository.getWiedervorlage).toHaveBeenCalledWith(decodedUrl); }); }); + + describe('clearUploadedFiles', () => { + it('should call binary file service', () => { + service.clearUploadedFiles(); + + expect(binaryFileService.clearUploadedFiles).toHaveBeenCalledWith(WIEDERVORLAGE_UPLOADED_ATTACHMENTS); + }); + }); }); diff --git a/alfa-client/libs/wiedervorlage-shared/src/lib/wiedervorlage.service.ts b/alfa-client/libs/wiedervorlage-shared/src/lib/wiedervorlage.service.ts index 691da275ea..bda569bc96 100644 --- a/alfa-client/libs/wiedervorlage-shared/src/lib/wiedervorlage.service.ts +++ b/alfa-client/libs/wiedervorlage-shared/src/lib/wiedervorlage.service.ts @@ -21,42 +21,21 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { BinaryFileListResource, BinaryFileService } from '@alfa-client/binary-file-shared'; -import { - CommandOrder, - CommandResource, - CommandService, - CreateCommand, - isDone, -} from '@alfa-client/command-shared'; +import { BinaryFileService } from '@alfa-client/binary-file-shared'; +import { CommandOrder, CommandResource, CommandService, CreateCommand, isDone } from '@alfa-client/command-shared'; import { NavigationService } from '@alfa-client/navigation-shared'; -import { - StateResource, - createEmptyStateResource, - createStateResource, - decodeUrlFromEmbedding, - doIfLoadingRequired, - hasStateResourceError, - isNotNull, - isNotUndefined, - replacePlaceholder, -} from '@alfa-client/tech-shared'; +import { createEmptyStateResource, createStateResource, decodeUrlFromEmbedding, doIfLoadingRequired, hasStateResourceError, isNotNull, isNotUndefined, replacePlaceholder, StateResource, } from '@alfa-client/tech-shared'; import { SnackBarService } from '@alfa-client/ui'; import { VorgangHeaderLinkRel, VorgangResource, VorgangService } from '@alfa-client/vorgang-shared'; import { Injectable, OnDestroy } from '@angular/core'; import { Params } from '@angular/router'; -import { ResourceUri, getUrl, hasLink } from '@ngxp/rest'; +import { hasLink, ResourceUri } from '@ngxp/rest'; import { isEqual, isNil, isNull, isUndefined } from 'lodash-es'; -import { BehaviorSubject, Observable, Subscription, combineLatest } from 'rxjs'; +import { BehaviorSubject, combineLatest, Observable, Subscription } from 'rxjs'; import { filter, map, startWith, tap } from 'rxjs/operators'; import { WiedervorlageLinkRel, WiedervorlageListLinkRel } from './wiedervorlage.linkrel'; import { WiedervorlageMessages } from './wiedervorlage.message'; -import { - BinaryFileListByWiedervorlageUri, - Wiedervorlage, - WiedervorlageListResource, - WiedervorlageResource, -} from './wiedervorlage.model'; +import { Wiedervorlage, WIEDERVORLAGE_UPLOADED_ATTACHMENTS, WiedervorlageListResource, WiedervorlageResource, } from './wiedervorlage.model'; import { WiedervorlageRepository } from './wiedervorlage.repository'; import { WiedervorlageRoutes } from './wiedervorlage.route'; import { createErledigenCommand, createWiedereroeffnenCommand } from './wiedervorlage.util'; @@ -65,14 +44,12 @@ import { createErledigenCommand, createWiedereroeffnenCommand } from './wiedervo export class WiedervorlageService implements OnDestroy { static encodedWiedervorlageUriParam: string = 'wiedervorlageUrl'; - readonly wiedervorlageList$: BehaviorSubject<StateResource<WiedervorlageListResource>> = - new BehaviorSubject<StateResource<WiedervorlageListResource>>( - createEmptyStateResource<WiedervorlageListResource>(), - ); - readonly wiedervorlage$: BehaviorSubject<StateResource<WiedervorlageResource>> = - new BehaviorSubject<StateResource<WiedervorlageResource>>( - createEmptyStateResource<WiedervorlageResource>(), - ); + readonly wiedervorlageList$: BehaviorSubject<StateResource<WiedervorlageListResource>> = new BehaviorSubject< + StateResource<WiedervorlageListResource> + >(createEmptyStateResource<WiedervorlageListResource>()); + readonly wiedervorlage$: BehaviorSubject<StateResource<WiedervorlageResource>> = new BehaviorSubject< + StateResource<WiedervorlageResource> + >(createEmptyStateResource<WiedervorlageResource>()); readonly submitInProgress$: BehaviorSubject<StateResource<CommandResource>> = new BehaviorSubject< StateResource<CommandResource> @@ -81,15 +58,11 @@ export class WiedervorlageService implements OnDestroy { readonly erledigenCommand$: BehaviorSubject<StateResource<CommandResource>> = new BehaviorSubject< StateResource<CommandResource> >(createEmptyStateResource<CommandResource>()); - readonly wiedereroeffnenCommand$: BehaviorSubject<StateResource<CommandResource>> = - new BehaviorSubject<StateResource<CommandResource>>( - createEmptyStateResource<CommandResource>(), - ); - - attachmentListByWiedervorlage = <BinaryFileListByWiedervorlageUri>{}; + readonly wiedereroeffnenCommand$: BehaviorSubject<StateResource<CommandResource>> = new BehaviorSubject< + StateResource<CommandResource> + >(createEmptyStateResource<CommandResource>()); private subscription: Subscription; - private attachmentSubscription: Subscription; constructor( private repository: WiedervorlageRepository, @@ -103,15 +76,10 @@ export class WiedervorlageService implements OnDestroy { } public getWiedervorlageList(): Observable<StateResource<WiedervorlageListResource>> { - return combineLatest([ - this.wiedervorlageList$.asObservable(), - this.vorgangService.getVorgangWithEingang(), - ]).pipe( + return combineLatest([this.wiedervorlageList$.asObservable(), this.vorgangService.getVorgangWithEingang()]).pipe( tap(([wiedervorlageList, vorgangResource]) => { if (isNotNull(vorgangResource.resource)) { - doIfLoadingRequired(wiedervorlageList, () => - this.loadWiedervorlagenByVorgang(vorgangResource.resource), - ); + doIfLoadingRequired(wiedervorlageList, () => this.loadWiedervorlagenByVorgang(vorgangResource.resource)); } }), map(([wiedervorlageList]) => wiedervorlageList), @@ -122,22 +90,18 @@ export class WiedervorlageService implements OnDestroy { public getWiedervorlageListByGivenVorgang( vorgangResource: VorgangResource, ): Observable<StateResource<WiedervorlageListResource>> { - doIfLoadingRequired(this.wiedervorlageList$.value, () => - this.loadWiedervorlagenByVorgang(vorgangResource), - ); + doIfLoadingRequired(this.wiedervorlageList$.value, () => this.loadWiedervorlagenByVorgang(vorgangResource)); return this.wiedervorlageList$.asObservable(); } loadWiedervorlagenByVorgang(vorgangResource: VorgangResource): void { if (hasLink(vorgangResource, VorgangHeaderLinkRel.WIEDERVORLAGEN)) { - const subscription: Subscription = this.repository - .getWiedervorlageList(vorgangResource) - .subscribe((wiedervorlagenList) => { - if (!isNull(wiedervorlagenList)) { - this.setWiedervorlagenList(wiedervorlagenList); - subscription.unsubscribe(); - } - }); + const subscription: Subscription = this.repository.getWiedervorlageList(vorgangResource).subscribe((wiedervorlagenList) => { + if (!isNull(wiedervorlagenList)) { + this.setWiedervorlagenList(wiedervorlagenList); + subscription.unsubscribe(); + } + }); } else { this.clearWiedervorlagenList(); } @@ -152,10 +116,6 @@ export class WiedervorlageService implements OnDestroy { ); } - setWiedervorlageListLoading(): void { - this.wiedervorlageList$.next({ ...this.wiedervorlageList$.value, loading: true }); - } - setWiedervorlagenList(wiedervorlagenList: WiedervorlageListResource): void { this.wiedervorlageList$.next(createStateResource(wiedervorlagenList)); } @@ -176,26 +136,19 @@ export class WiedervorlageService implements OnDestroy { private loadAndSetWiedervorlageByUrl(url: ResourceUri): void { this.setWiedervorlageLoading(); - const subscription: Subscription = this.repository - .getWiedervorlage(url) - .subscribe((wiedervorlage) => { - this.wiedervorlage$.next(createStateResource(wiedervorlage)); - subscription.unsubscribe(); - }); + const subscription: Subscription = this.repository.getWiedervorlage(url).subscribe((wiedervorlage) => { + this.wiedervorlage$.next(createStateResource(wiedervorlage)); + subscription.unsubscribe(); + }); } public isNewWiedervorlage(): boolean { - return isEqual( - this.navigationService.getParam(WiedervorlageService.encodedWiedervorlageUriParam), - WiedervorlageRoutes.NEW, - ); + return isEqual(this.navigationService.getParam(WiedervorlageService.encodedWiedervorlageUriParam), WiedervorlageRoutes.NEW); } private listenToNavigation(): void { this.unsubscribe(); - this.subscription = this.navigationService - .urlChanged() - .subscribe((params) => this.onNavigation(params)); + this.subscription = this.navigationService.urlChanged().subscribe((params) => this.onNavigation(params)); } onNavigation(params: Params): void { @@ -203,19 +156,15 @@ export class WiedervorlageService implements OnDestroy { this.setWiedervorlageListReload(); this.forceWiedervorlageReload(); this.submitInProgress$.next(createEmptyStateResource<CommandResource>()); - this.clearAttachmentList(); + this.clearUploadedFiles(); } if (NavigationService.isVorgangListPage(params)) { this.clearWiedervorlagenList(); this.submitInProgress$.next(createEmptyStateResource<CommandResource>()); - this.clearAttachmentList(); + this.clearUploadedFiles(); } } - clearAttachmentList(): void { - this.attachmentListByWiedervorlage = <BinaryFileListByWiedervorlageUri>{}; - } - clearWiedervorlagenList(): void { this.wiedervorlageList$.next(createEmptyStateResource<WiedervorlageListResource>()); } @@ -232,30 +181,20 @@ export class WiedervorlageService implements OnDestroy { } private getWiedervorlageUri(): ResourceUri { - return this.navigationService.getDecodedParam( - WiedervorlageService.encodedWiedervorlageUriParam, - ); + return this.navigationService.getDecodedParam(WiedervorlageService.encodedWiedervorlageUriParam); } setWiedervorlageLoading(): void { this.wiedervorlage$.next({ ...this.wiedervorlage$.value, loading: true }); } - public createWiedervorlage( - wiedervorlage: Wiedervorlage, - ): Observable<StateResource<CommandResource>> { + public createWiedervorlage(wiedervorlage: Wiedervorlage): Observable<StateResource<CommandResource>> { this.setSubmitInProgressLoading(); - return this.createCreateWiedervorlageCommand( - this.wiedervorlageList$.value.resource, - wiedervorlage, - ).pipe( + return this.createCreateWiedervorlageCommand(this.wiedervorlageList$.value.resource, wiedervorlage).pipe( filter((commandStateResource) => !commandStateResource.loading), tap((commandStateResource) => - this.proceedAfterReceiveCommand( - commandStateResource, - this.buildMessage(WiedervorlageMessages.CREATED, wiedervorlage), - ), + this.proceedAfterReceiveCommand(commandStateResource, this.buildMessage(WiedervorlageMessages.CREATED, wiedervorlage)), ), startWith(createEmptyStateResource<CommandResource>(true)), ); @@ -285,10 +224,7 @@ export class WiedervorlageService implements OnDestroy { return this.createSaveWiedervorlageCommand(wiedervorlageResource, wiedervorlage).pipe( filter((commandStateResource) => !commandStateResource.loading), tap((commandStateResource) => - this.proceedAfterReceiveCommand( - commandStateResource, - this.buildMessage(WiedervorlageMessages.SAVED, wiedervorlage), - ), + this.proceedAfterReceiveCommand(commandStateResource, this.buildMessage(WiedervorlageMessages.SAVED, wiedervorlage)), ), startWith(createEmptyStateResource<CommandResource>(true)), ); @@ -313,10 +249,7 @@ export class WiedervorlageService implements OnDestroy { return { order: CommandOrder.EDIT_WIEDERVORLAGE, body: wiedervorlage }; } - proceedAfterReceiveCommand( - commandStateResource: StateResource<CommandResource>, - message: string, - ): void { + proceedAfterReceiveCommand(commandStateResource: StateResource<CommandResource>, message: string): void { this.submitInProgress$.next({ ...this.submitInProgress$.value, resource: commandStateResource.resource, @@ -393,45 +326,6 @@ export class WiedervorlageService implements OnDestroy { } } - public getAttachmentList( - wiedervorlage: WiedervorlageResource, - ): Observable<StateResource<BinaryFileListResource>> { - const uri: ResourceUri = getUrl(wiedervorlage); - - if (isNil(this.attachmentListByWiedervorlage[uri])) { - this.attachmentListByWiedervorlage[uri] = new BehaviorSubject( - createEmptyStateResource<any>(), - ); - } else { - this.attachmentListByWiedervorlage[uri].next(createEmptyStateResource<any>()); - } - - doIfLoadingRequired(this.attachmentListByWiedervorlage[uri].value, () => - this.loadAttachments(wiedervorlage), - ); - - return this.attachmentListByWiedervorlage[uri].asObservable(); - } - - loadAttachments(wiedervorlage: WiedervorlageResource): void { - this.setAttachmentLoading(wiedervorlage); - if (!isNil(this.attachmentSubscription)) this.attachmentSubscription.unsubscribe(); - this.attachmentSubscription = this.binaryFileService - .getFiles(wiedervorlage, WiedervorlageLinkRel.ATTACHMENTS) - .subscribe((fileList) => { - if (fileList.loaded) { - this.attachmentListByWiedervorlage[getUrl(wiedervorlage)].next(fileList); - } - }); - } - - setAttachmentLoading(wiedervorlage: WiedervorlageResource): void { - this.attachmentListByWiedervorlage[getUrl(wiedervorlage)].next({ - ...this.attachmentListByWiedervorlage[getUrl(wiedervorlage)].value, - loading: true, - }); - } - public getSubmitInProgress(): Observable<StateResource<CommandResource>> { return this.submitInProgress$.asObservable(); } @@ -451,4 +345,8 @@ export class WiedervorlageService implements OnDestroy { .getWiedervorlage(decodedUrl) .pipe(map((wiedervorlage) => hasLink(wiedervorlage, WiedervorlageLinkRel.EDIT))); } + + public clearUploadedFiles(): void { + this.binaryFileService.clearUploadedFiles(WIEDERVORLAGE_UPLOADED_ATTACHMENTS); + } } diff --git a/alfa-client/libs/wiedervorlage/src/lib/submit-wiedervorlage-button/submit-wiedervorlage-button.component.spec.ts b/alfa-client/libs/wiedervorlage/src/lib/submit-wiedervorlage-button/submit-wiedervorlage-button.component.spec.ts index 5dfb7fa67a..5ecd5f4316 100644 --- a/alfa-client/libs/wiedervorlage/src/lib/submit-wiedervorlage-button/submit-wiedervorlage-button.component.spec.ts +++ b/alfa-client/libs/wiedervorlage/src/lib/submit-wiedervorlage-button/submit-wiedervorlage-button.component.spec.ts @@ -23,7 +23,7 @@ */ import { CommandResource } from '@alfa-client/command-shared'; import { NavigationService } from '@alfa-client/navigation-shared'; -import { StateResource, createStateResource } from '@alfa-client/tech-shared'; +import { createStateResource, StateResource } from '@alfa-client/tech-shared'; import { mock } from '@alfa-client/test-utils'; import { OzgcloudStrokedButtonWithSpinnerComponent } from '@alfa-client/ui'; import { WiedervorlageService } from '@alfa-client/wiedervorlage-shared'; @@ -89,17 +89,23 @@ describe('SubmitWiedervorlageButtonComponent', () => { expect(component).toBeTruthy(); }); - describe('navigateIfCommandIsDone', () => { + describe('_navigateIfCommandIsDone', () => { it('should navigate on success', () => { - component.navigateIfCommandIsDone(commandWithError); + component._navigateIfCommandIsDone(commandWithError); expect(navigationService.navigateRelativeTo).toHaveBeenCalled(); }); it('should NOT navigate on loading', () => { - component.navigateIfCommandIsDone({ ...commandWithError, loading: true }); + component._navigateIfCommandIsDone({ ...commandWithError, loading: true }); expect(navigationService.navigateRelativeTo).toHaveBeenCalledWith('../../', activatedRoute); }); + + it('should clear uploaded files', () => { + component._navigateIfCommandIsDone(commandWithError); + + expect(wiedervorlageService.clearUploadedFiles).toHaveBeenCalled(); + }); }); }); diff --git a/alfa-client/libs/wiedervorlage/src/lib/submit-wiedervorlage-button/submit-wiedervorlage-button.component.ts b/alfa-client/libs/wiedervorlage/src/lib/submit-wiedervorlage-button/submit-wiedervorlage-button.component.ts index 788e3229c2..377e2db8f4 100644 --- a/alfa-client/libs/wiedervorlage/src/lib/submit-wiedervorlage-button/submit-wiedervorlage-button.component.ts +++ b/alfa-client/libs/wiedervorlage/src/lib/submit-wiedervorlage-button/submit-wiedervorlage-button.component.ts @@ -52,12 +52,13 @@ export class SubmitWiedervorlageButtonComponent { submit(): void { this.submitInProgress$ = this.formService.submit().pipe( filter((command) => !command.loading), - tap((commandWithError) => this.navigateIfCommandIsDone(commandWithError)), + tap((commandWithError) => this._navigateIfCommandIsDone(commandWithError)), ); } - navigateIfCommandIsDone(command: StateResource<CommandResource>): void { + _navigateIfCommandIsDone(command: StateResource<CommandResource>): void { if (!command.loading && isDone(command.resource)) { + this.wiedervorlageService.clearUploadedFiles(); this.navigateToVorgangDetailPage(); } } diff --git a/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-attachment-list-container/wiedervorlage-attachment-list-container.component.html b/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-attachment-list-container/wiedervorlage-attachment-list-container.component.html deleted file mode 100644 index 8687a058f2..0000000000 --- a/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-attachment-list-container/wiedervorlage-attachment-list-container.component.html +++ /dev/null @@ -1,31 +0,0 @@ -<!-- - - Copyright (C) 2023 Das Land Schleswig-Holstein vertreten durch den - Ministerpräsidenten des Landes Schleswig-Holstein - Staatskanzlei - Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - - Lizenziert unter der EUPL, Version 1.2 oder - sobald - diese von der Europäischen Kommission genehmigt wurden - - Folgeversionen der EUPL ("Lizenz"); - Sie dürfen dieses Werk ausschließlich gemäß - dieser Lizenz nutzen. - Eine Kopie der Lizenz finden Sie hier: - - https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - - Sofern nicht durch anwendbare Rechtsvorschriften - gefordert oder in schriftlicher Form vereinbart, wird - die unter der Lizenz verbreitete Software "so wie sie - ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - ausdrücklich oder stillschweigend - verbreitet. - Die sprachspezifischen Genehmigungen und Beschränkungen - unter der Lizenz sind dem Lizenztext zu entnehmen. - ---> -<alfa-vertical-binary-file-list - [binaryFileListStateResource]="attachments$ | async" - [deletable]="false" - data-test-id="wiedervorlage-attachment-list" -> -</alfa-vertical-binary-file-list> diff --git a/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-attachment-list-container/wiedervorlage-attachment-list-container.component.scss b/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-attachment-list-container/wiedervorlage-attachment-list-container.component.scss deleted file mode 100644 index 7648e3a348..0000000000 --- a/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-attachment-list-container/wiedervorlage-attachment-list-container.component.scss +++ /dev/null @@ -1,32 +0,0 @@ -/** - * Copyright (C) 2023 Das Land Schleswig-Holstein vertreten durch den - * Ministerpräsidenten des Landes Schleswig-Holstein - * Staatskanzlei - * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - * - * Lizenziert unter der EUPL, Version 1.2 oder - sobald - * diese von der Europäischen Kommission genehmigt wurden - - * Folgeversionen der EUPL ("Lizenz"); - * Sie dürfen dieses Werk ausschließlich gemäß - * dieser Lizenz nutzen. - * Eine Kopie der Lizenz finden Sie hier: - * - * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * - * Sofern nicht durch anwendbare Rechtsvorschriften - * gefordert oder in schriftlicher Form vereinbart, wird - * die unter der Lizenz verbreitete Software "so wie sie - * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - * ausdrücklich oder stillschweigend - verbreitet. - * Die sprachspezifischen Genehmigungen und Beschränkungen - * unter der Lizenz sind dem Lizenztext zu entnehmen. - */ -:host { - display: flex; - margin: 0 -4px; -} - -.attachments { - display: flex; - flex-wrap: wrap; -} diff --git a/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-attachment-list-container/wiedervorlage-attachment-list-container.component.spec.ts b/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-attachment-list-container/wiedervorlage-attachment-list-container.component.spec.ts deleted file mode 100644 index a462e5aa51..0000000000 --- a/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-attachment-list-container/wiedervorlage-attachment-list-container.component.spec.ts +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright (C) 2023 Das Land Schleswig-Holstein vertreten durch den - * Ministerpräsidenten des Landes Schleswig-Holstein - * Staatskanzlei - * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - * - * Lizenziert unter der EUPL, Version 1.2 oder - sobald - * diese von der Europäischen Kommission genehmigt wurden - - * Folgeversionen der EUPL ("Lizenz"); - * Sie dürfen dieses Werk ausschließlich gemäß - * dieser Lizenz nutzen. - * Eine Kopie der Lizenz finden Sie hier: - * - * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * - * Sofern nicht durch anwendbare Rechtsvorschriften - * gefordert oder in schriftlicher Form vereinbart, wird - * die unter der Lizenz verbreitete Software "so wie sie - * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - * ausdrücklich oder stillschweigend - verbreitet. - * Die sprachspezifischen Genehmigungen und Beschränkungen - * unter der Lizenz sind dem Lizenztext zu entnehmen. - */ -import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { ToEmbeddedResourcesPipe } from '@alfa-client/tech-shared'; -import { mock } from '@alfa-client/test-utils'; -import { WiedervorlageService } from '@alfa-client/wiedervorlage-shared'; -import { MockComponent } from 'ng-mocks'; -import { of } from 'rxjs'; -import { WiedervorlageAttachmentListContainerComponent } from './wiedervorlage-attachment-list-container.component'; -import { VerticalBinaryFileListComponent } from '@alfa-client/binary-file'; - -describe('WiedervorlageAttachmentListContainerComponent', () => { - let component: WiedervorlageAttachmentListContainerComponent; - let fixture: ComponentFixture<WiedervorlageAttachmentListContainerComponent>; - - const wiedervorlageService = { ...mock(WiedervorlageService), getAttachmentList: () => of(null) }; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [ - WiedervorlageAttachmentListContainerComponent, - ToEmbeddedResourcesPipe, - MockComponent(VerticalBinaryFileListComponent), - ], - providers: [ - { - provide: WiedervorlageService, - useValue: wiedervorlageService, - }, - ], - }); - }); - - beforeEach(() => { - fixture = TestBed.createComponent(WiedervorlageAttachmentListContainerComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-attachment-list-container/wiedervorlage-attachment-list-container.component.ts b/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-attachment-list-container/wiedervorlage-attachment-list-container.component.ts deleted file mode 100644 index 93f9f0e59f..0000000000 --- a/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-attachment-list-container/wiedervorlage-attachment-list-container.component.ts +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (C) 2023 Das Land Schleswig-Holstein vertreten durch den - * Ministerpräsidenten des Landes Schleswig-Holstein - * Staatskanzlei - * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - * - * Lizenziert unter der EUPL, Version 1.2 oder - sobald - * diese von der Europäischen Kommission genehmigt wurden - - * Folgeversionen der EUPL ("Lizenz"); - * Sie dürfen dieses Werk ausschließlich gemäß - * dieser Lizenz nutzen. - * Eine Kopie der Lizenz finden Sie hier: - * - * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * - * Sofern nicht durch anwendbare Rechtsvorschriften - * gefordert oder in schriftlicher Form vereinbart, wird - * die unter der Lizenz verbreitete Software "so wie sie - * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - * ausdrücklich oder stillschweigend - verbreitet. - * Die sprachspezifischen Genehmigungen und Beschränkungen - * unter der Lizenz sind dem Lizenztext zu entnehmen. - */ -import { Component, Input, OnChanges, SimpleChanges } from '@angular/core'; -import { BinaryFileListResource } from '@alfa-client/binary-file-shared'; -import { StateResource } from '@alfa-client/tech-shared'; -import { WiedervorlageResource, WiedervorlageService } from '@alfa-client/wiedervorlage-shared'; -import { Observable } from 'rxjs'; - -@Component({ - selector: 'alfa-wiedervorlage-attachment-list-container', - templateUrl: './wiedervorlage-attachment-list-container.component.html', - styleUrls: ['./wiedervorlage-attachment-list-container.component.scss'], -}) -export class WiedervorlageAttachmentListContainerComponent implements OnChanges { - @Input() wiedervorlage: WiedervorlageResource; - - attachments$: Observable<StateResource<BinaryFileListResource>>; - - constructor(public service: WiedervorlageService) {} - - ngOnChanges(changes: SimpleChanges): void { - if (changes.wiedervorlage) { - this.loadAttachments(); - } - } - - loadAttachments(): void { - this.attachments$ = this.service.getAttachmentList(this.wiedervorlage); - } -} diff --git a/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-in-vorgang.component.html b/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-in-vorgang.component.html index bdef88d210..ee68f8fe35 100644 --- a/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-in-vorgang.component.html +++ b/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-in-vorgang.component.html @@ -23,10 +23,7 @@ unter der Lizenz sind dem Lizenztext zu entnehmen. --> -<div - [attr.data-test-id]="wiedervorlageResource.betreff | convertForDataTest" - class="container text-sm" -> +<div [attr.data-test-id]="wiedervorlageResource.betreff | convertForDataTest" class="container text-sm"> <div class="row"> <alfa-wiedervorlage-status data-test-class="status" @@ -36,20 +33,18 @@ </alfa-wiedervorlage-status> <alfa-link-with-user-name-tooltip-container - *ngIf="wiedervorlageResource | hasLink: linkRel.EDIT; else content" + *ngIf="wiedervorlageResource | hasLink: WiedervorlageLinkRel.EDIT; else content" routerLinkString="wiedervorlage/{{ wiedervorlageResource | toResourceUri }}" [tooltipTemplate]="tooltip" [resource]="wiedervorlageResource" - [linkRel]="linkRel.CREATED_BY" + [linkRel]="WiedervorlageLinkRel.CREATED_BY" data-test-class="link" > <ng-container *ngTemplateOutlet="content"></ng-container> </alfa-link-with-user-name-tooltip-container> <ng-template #content> - <span class="date" data-test-class="frist">{{ - wiedervorlageResource.frist | formatToPrettyDate - }}</span> + <span class="date" data-test-class="frist">{{ wiedervorlageResource.frist | formatToPrettyDate }}</span> <span class="name" data-test-class="betreff">{{ wiedervorlageResource.betreff }}</span> </ng-template> @@ -67,16 +62,17 @@ [tooltipTemplate]="tooltip" [text]="wiedervorlageResource.beschreibung" [resource]="wiedervorlageResource" - [linkRel]="linkRel.CREATED_BY" + [linkRel]="WiedervorlageLinkRel.CREATED_BY" > </alfa-text-with-user-name-tooltip-container> - <alfa-wiedervorlage-attachment-list-container - *ngIf="wiedervorlageResource | hasLink: linkRel.ATTACHMENTS" - data-test-id="wiedervorlage-attachment-list-in-vorgang" - [wiedervorlage]="wiedervorlageResource" - class="attachments" - > - </alfa-wiedervorlage-attachment-list-container> + @if (wiedervorlageResource | hasLink: WiedervorlageLinkRel.ATTACHMENTS) { + <alfa-binary-file-list-container + [resource]="wiedervorlageResource" + [linkRel]="WiedervorlageLinkRel.ATTACHMENTS" + [listOrientation]="BinaryFileListOrientation.VERTICAL" + data-test-id="wiedervorlage-attachment-list-in-vorgang" + ></alfa-binary-file-list-container> + } </div> </div> diff --git a/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-in-vorgang.component.ts b/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-in-vorgang.component.ts index ee5f2a95c8..727acc5acd 100644 --- a/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-in-vorgang.component.ts +++ b/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-in-vorgang.component.ts @@ -21,13 +21,10 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { Component, Input, OnInit } from '@angular/core'; import { formatFullDate, replacePlaceholders } from '@alfa-client/tech-shared'; -import { - WiedervorlageLinkRel, - WiedervorlageMessages, - WiedervorlageResource, -} from '@alfa-client/wiedervorlage-shared'; +import { WiedervorlageLinkRel, WiedervorlageMessages, WiedervorlageResource } from '@alfa-client/wiedervorlage-shared'; +import { Component, Input, OnInit } from '@angular/core'; +import { BinaryFileListOrientation } from '../../../../../../binary-file/src/lib/directive/binary-file-list-orientation/binary-file-list-orientation.directive'; @Component({ selector: 'alfa-wiedervorlage-in-vorgang', @@ -40,7 +37,8 @@ export class WiedervorlageInVorgangComponent implements OnInit { tooltip: string; expanded: boolean; - readonly linkRel = WiedervorlageLinkRel; + public readonly WiedervorlageLinkRel = WiedervorlageLinkRel; + public readonly BinaryFileListOrientation = BinaryFileListOrientation; ngOnInit(): void { this.tooltip = this.formatTooltip(); diff --git a/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-page-container/wiedervorlage-page/wiedervorlage-form/wiedervorlage-form.component.html b/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-page-container/wiedervorlage-page/wiedervorlage-form/wiedervorlage-form.component.html index 014b5ba17d..058f9bc201 100644 --- a/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-page-container/wiedervorlage-page/wiedervorlage-form/wiedervorlage-form.component.html +++ b/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-page-container/wiedervorlage-page/wiedervorlage-form/wiedervorlage-form.component.html @@ -45,14 +45,19 @@ > </ozgcloud-date-editor> - <alfa-binary-file-attachment-container - data-test-id="wiedervorlage-attachment-list" - [existFiles]="attachments$ | async" - [formArrayName]="formServiceClass.FIELD_ATTACHMENTS" - [uploadStateResource]="wiedervorlageListStateResource" - [linkRelUploadAttachment]="wiedervorlageListLinkrel.UPLOAD_FILE" - > - </alfa-binary-file-attachment-container> + <ods-file-upload-list-container + [parentFormArrayName]="formServiceClass.FIELD_ATTACHMENTS" + [fileUploadType]="WIEDERVORLAGE_UPLOADED_ATTACHMENTS" + [filesResource]="wiedervorlage" + [filesLinkRel]="WiedervorlageLinkRel.ATTACHMENTS" + data-test-id="kommentar-multi-file-upload-list" + ></ods-file-upload-list-container> + <ods-multi-file-upload-editor + [fileUploadType]="WIEDERVORLAGE_UPLOADED_ATTACHMENTS" + [uploadResource]="wiedervorlageListStateResource.resource" + [uploadLinkRelation]="WiedervorlageListLinkRel.UPLOAD_FILE" + data-test-id="kommentar-multi-file-upload-editor" + ></ods-multi-file-upload-editor> <alfa-submit-wiedervorlage-button class="submit-button"></alfa-submit-wiedervorlage-button> </form> diff --git a/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-page-container/wiedervorlage-page/wiedervorlage-form/wiedervorlage-form.component.spec.ts b/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-page-container/wiedervorlage-page/wiedervorlage-form/wiedervorlage-form.component.spec.ts index f7dfb80e9b..6fc83a14bf 100644 --- a/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-page-container/wiedervorlage-page/wiedervorlage-form/wiedervorlage-form.component.spec.ts +++ b/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-page-container/wiedervorlage-page/wiedervorlage-form/wiedervorlage-form.component.spec.ts @@ -21,18 +21,16 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { BinaryFileAttachmentContainerComponent } from '@alfa-client/binary-file'; -import { BinaryFileListResource } from '@alfa-client/binary-file-shared'; +import { BinaryFileAttachmentContainerComponent, FileUploadListContainerComponent, MultiFileUploadEditorComponent, } from '@alfa-client/binary-file'; +import { createStateResource, StateResource } from '@alfa-client/tech-shared'; import { Mock, mock, useFromMock } from '@alfa-client/test-utils'; import { DateEditorComponent, OzgcloudTextEditorComponent, TextAreaEditorComponent } from '@alfa-client/ui'; -import { WiedervorlageLinkRel, WiedervorlageResource, WiedervorlageService } from '@alfa-client/wiedervorlage-shared'; +import { WiedervorlageListResource, WiedervorlageResource, WiedervorlageService } from '@alfa-client/wiedervorlage-shared'; import { SimpleChanges } from '@angular/core'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { ReactiveFormsModule, UntypedFormBuilder } from '@angular/forms'; -import { createBinaryFileListResource } from 'libs/binary-file-shared/test/binary-file'; -import { createWiedervorlageResource } from 'libs/wiedervorlage-shared/test/wiedervorlage'; +import { createWiedervorlageListResource, createWiedervorlageResource } from 'libs/wiedervorlage-shared/test/wiedervorlage'; import { MockComponent } from 'ng-mocks'; -import { of } from 'rxjs'; import { SubmitWiedervorlageButtonComponent } from '../../../submit-wiedervorlage-button/submit-wiedervorlage-button.component'; import { WiedervorlageFormComponent } from './wiedervorlage-form.component'; import { WiedervorlageFormService } from './wiedervorlage.formservice'; @@ -44,6 +42,9 @@ describe('WiedervorlageFormComponent', () => { const formService = new WiedervorlageFormService(new UntypedFormBuilder(), useFromMock(mock(WiedervorlageService))); const wiedervorlageService: Mock<WiedervorlageService> = mock(WiedervorlageService); const wiedervorlage: WiedervorlageResource = createWiedervorlageResource(); + const wiedervorlaeListStateResource: StateResource<WiedervorlageListResource> = createStateResource( + createWiedervorlageListResource(), + ); beforeEach(async () => { await TestBed.configureTestingModule({ @@ -54,6 +55,8 @@ describe('WiedervorlageFormComponent', () => { MockComponent(TextAreaEditorComponent), MockComponent(BinaryFileAttachmentContainerComponent), MockComponent(SubmitWiedervorlageButtonComponent), + MockComponent(MultiFileUploadEditorComponent), + MockComponent(FileUploadListContainerComponent), ], imports: [ReactiveFormsModule], providers: [ @@ -74,6 +77,7 @@ describe('WiedervorlageFormComponent', () => { fixture = TestBed.createComponent(WiedervorlageFormComponent); component = fixture.componentInstance; + component.wiedervorlageListStateResource = wiedervorlaeListStateResource; fixture.detectChanges(); }); @@ -87,7 +91,6 @@ describe('WiedervorlageFormComponent', () => { beforeEach(() => { component.wiedervorlage = wiedervorlage; component.patchWiedervorlage = jest.fn(); - component.updateAttachments = jest.fn(); }); it('should call patchWiedervorlage', () => { @@ -95,37 +98,6 @@ describe('WiedervorlageFormComponent', () => { expect(component.patchWiedervorlage).toHaveBeenCalled(); }); - - it('should call updateAttachments', () => { - component.ngOnChanges(simpleChanges); - - expect(component.updateAttachments).toHaveBeenCalled(); - }); - }); - - describe('updateAttachments', () => { - const binaryFileListResource: BinaryFileListResource = createBinaryFileListResource(); - - beforeEach(() => { - wiedervorlageService.getAttachmentList.mockReturnValue(of(binaryFileListResource)); - }); - - it('should call wiedervorlage service to get attachments if links exists', () => { - const wiedervorlageWithAttachments: WiedervorlageResource = createWiedervorlageResource([WiedervorlageLinkRel.ATTACHMENTS]); - component.wiedervorlage = wiedervorlageWithAttachments; - - component.updateAttachments(); - - expect(wiedervorlageService.getAttachmentList).toHaveBeenCalledWith(wiedervorlageWithAttachments); - }); - - it('should NOT call wiedervorlage service if link is not present', () => { - component.wiedervorlage = wiedervorlage; - - component.updateAttachments(); - - expect(wiedervorlageService.getAttachmentList).not.toHaveBeenCalledWith(wiedervorlage); - }); }); describe('patch wiedervorlage', () => { diff --git a/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-page-container/wiedervorlage-page/wiedervorlage-form/wiedervorlage-form.component.ts b/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-page-container/wiedervorlage-page/wiedervorlage-form/wiedervorlage-form.component.ts index 06cc5576e6..4a77aed417 100644 --- a/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-page-container/wiedervorlage-page/wiedervorlage-form/wiedervorlage-form.component.ts +++ b/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-page-container/wiedervorlage-page/wiedervorlage-form/wiedervorlage-form.component.ts @@ -21,20 +21,10 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ +import { isNotNil, StateResource } from '@alfa-client/tech-shared'; +import { WIEDERVORLAGE_UPLOADED_ATTACHMENTS, WiedervorlageLinkRel, WiedervorlageListLinkRel, WiedervorlageListResource, WiedervorlageResource, } from '@alfa-client/wiedervorlage-shared'; import { Component, Input, OnChanges, SimpleChanges } from '@angular/core'; -import { BinaryFileListLinkRel, BinaryFileResource } from '@alfa-client/binary-file-shared'; -import { StateResource, getEmbeddedResources, isNotNil } from '@alfa-client/tech-shared'; -import { - WiedervorlageLinkRel, - WiedervorlageListLinkRel, - WiedervorlageListResource, - WiedervorlageResource, - WiedervorlageService, -} from '@alfa-client/wiedervorlage-shared'; -import { hasLink } from '@ngxp/rest'; import { isNull } from 'lodash-es'; -import { Observable, of } from 'rxjs'; -import { map } from 'rxjs/operators'; import { WiedervorlageFormService } from './wiedervorlage.formservice'; //TODO Container Component zwischenschalten @@ -47,39 +37,19 @@ export class WiedervorlageFormComponent implements OnChanges { @Input() wiedervorlageListStateResource: StateResource<WiedervorlageListResource>; @Input() wiedervorlage: WiedervorlageResource; - attachments$: Observable<BinaryFileResource[]> = of([]); + public readonly formServiceClass = WiedervorlageFormService; + public readonly WiedervorlageListLinkRel = WiedervorlageListLinkRel; + public readonly WiedervorlageLinkRel = WiedervorlageLinkRel; + public readonly WIEDERVORLAGE_UPLOADED_ATTACHMENTS = WIEDERVORLAGE_UPLOADED_ATTACHMENTS; - readonly formServiceClass = WiedervorlageFormService; - readonly wiedervorlageListLinkrel = WiedervorlageListLinkRel; - - constructor( - public formService: WiedervorlageFormService, - private wiedervorlageService: WiedervorlageService, - ) {} + constructor(public formService: WiedervorlageFormService) {} ngOnChanges(changes: SimpleChanges): void { if (changes.wiedervorlage && isNotNil(this.wiedervorlage)) { - this.updateAttachments(); this.patchWiedervorlage(); } } - updateAttachments(): void { - if (hasLink(this.wiedervorlage, WiedervorlageLinkRel.ATTACHMENTS)) { - this.attachments$ = this.wiedervorlageService - .getAttachmentList(this.wiedervorlage) - .pipe( - map((attachmentList) => - getEmbeddedResources<BinaryFileResource>( - attachmentList, - BinaryFileListLinkRel.FILE_LIST, - ), - ), - ); - } else { - this.attachments$ = of([]); - } - } patchWiedervorlage(): void { if (!isNull(this.wiedervorlage)) { this.formService.patch(this.wiedervorlage); diff --git a/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage.module.ts b/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage.module.ts index 2057849d9d..e371bcaf3f 100644 --- a/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage.module.ts +++ b/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage.module.ts @@ -21,27 +21,9 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { BinaryFileModule } from '@alfa-client/binary-file'; -import { - ConvertForDataTestPipe, - FormatToPrettyDatePipe, - HasLinkPipe, - ToEmbeddedResourcesPipe, - ToResourceUriPipe, - ToTrafficLightPipe, - ToTrafficLightTooltipPipe, -} from '@alfa-client/tech-shared'; -import { - BackButtonComponent, - DateEditorComponent, - ExpansionPanelComponent, - IconButtonWithSpinnerComponent, - OzgcloudStrokedButtonWithSpinnerComponent, - OzgcloudTextEditorComponent, - SpinnerComponent, - SubnavigationComponent, - TextAreaEditorComponent, -} from '@alfa-client/ui'; +import { BinaryFileModule, FileUploadListContainerComponent, MultiFileUploadEditorComponent } from '@alfa-client/binary-file'; +import { ConvertForDataTestPipe, FormatToPrettyDatePipe, HasLinkPipe, ToEmbeddedResourcesPipe, ToResourceUriPipe, ToTrafficLightPipe, ToTrafficLightTooltipPipe, } from '@alfa-client/tech-shared'; +import { BackButtonComponent, DateEditorComponent, ExpansionPanelComponent, IconButtonWithSpinnerComponent, OzgcloudStrokedButtonWithSpinnerComponent, OzgcloudTextEditorComponent, SpinnerComponent, SubnavigationComponent, TextAreaEditorComponent, } from '@alfa-client/ui'; import { UserProfileModule } from '@alfa-client/user-profile'; import { VorgangSharedModule } from '@alfa-client/vorgang-shared'; import { VorgangSharedUiModule } from '@alfa-client/vorgang-shared-ui'; @@ -52,20 +34,13 @@ import { MatIcon } from '@angular/material/icon'; import { MatTooltip } from '@angular/material/tooltip'; import { RouterModule, Routes } from '@angular/router'; import { ButtonWithSpinnerComponent } from '@ods/component'; -import { - CheckCircleIconComponent, - PlusIconComponent, - SaveIconComponent, - TooltipDirective, - UpdateIconComponent, -} from '@ods/system'; +import { CheckCircleIconComponent, PlusIconComponent, SaveIconComponent, TooltipDirective, UpdateIconComponent, } from '@ods/system'; import { CreateWiedervorlageButtonContainerComponent } from './create-wiedervorlage-button-container/create-wiedervorlage-button-container.component'; import { ErledigenButtonContainerComponent } from './erledigen-button-container/erledigen-button-container.component'; import { SubmitWiedervorlageButtonComponent } from './submit-wiedervorlage-button/submit-wiedervorlage-button.component'; import { WiedereroeffnenButtonContainerComponent } from './wiedereroeffnen-button-container/wiedereroeffnen-button-container.component'; import { WiedervorlageListInVorgangContainerComponent } from './wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang-container.component'; import { WiedervorlageCreateButtonComponent } from './wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-create-button/wiedervorlage-create-button.component'; -import { WiedervorlageAttachmentListContainerComponent } from './wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-attachment-list-container/wiedervorlage-attachment-list-container.component'; import { WiedervorlageInVorgangExpandButtonComponent } from './wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-in-vorgang-expand-button/wiedervorlage-in-vorgang-expand-button.component'; import { WiedervorlageInVorgangComponent } from './wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-in-vorgang.component'; import { WiedervorlageListInVorgangComponent } from './wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-list-in-vorgang.component'; @@ -121,6 +96,8 @@ const routes: Routes = [ PlusIconComponent, CheckCircleIconComponent, SaveIconComponent, + MultiFileUploadEditorComponent, + FileUploadListContainerComponent, ], declarations: [ WiedervorlagePageComponent, @@ -138,7 +115,6 @@ const routes: Routes = [ WiedereroeffnenButtonContainerComponent, ErledigenButtonContainerComponent, CreateWiedervorlageButtonContainerComponent, - WiedervorlageAttachmentListContainerComponent, WiedervorlageBreadcrumbContainerComponent, WiedervorlageInVorgangExpandButtonComponent, ], -- GitLab