From ce8a26f9e959586b1d893d4f1b6cfedc4a1d6c95 Mon Sep 17 00:00:00 2001
From: Martin <git@mail.de>
Date: Thu, 13 Feb 2025 11:10:51 +0100
Subject: [PATCH] OZG-5977 adjust type definition; add type to UploadFile ins
 state

---
 .../src/lib/binary-file.model.ts               | 10 +++-------
 .../src/lib/binary-file.service.spec.ts        | 18 +++++++++++-------
 .../src/lib/binary-file.service.ts             | 15 ++++++---------
 3 files changed, 20 insertions(+), 23 deletions(-)

diff --git a/alfa-client/libs/binary-file-shared/src/lib/binary-file.model.ts b/alfa-client/libs/binary-file-shared/src/lib/binary-file.model.ts
index 6ace813e05..ad066e5dcc 100644
--- a/alfa-client/libs/binary-file-shared/src/lib/binary-file.model.ts
+++ b/alfa-client/libs/binary-file-shared/src/lib/binary-file.model.ts
@@ -36,19 +36,15 @@ export interface BinaryFileResource extends BinaryFile, Resource {}
 export interface BinaryFileListResource extends ListResource {}
 
 export interface ToUploadFile {
-  type: BinaryFileUploadType;
+  type: FileUploadType;
   file: File;
   uri: ResourceUri;
 }
 
-export enum BinaryFileUploadType {
-  BESCHEID = 'Bescheid',
-  KOMMENTAR = 'Kommentar',
-  WIEDERVORLAGE = 'Wiedervorlage',
-  POSTACH_NACHRICHT = 'PostfachNachricht',
-}
+export declare type FileUploadType = string;
 
 export interface UploadFile {
+  type: FileUploadType;
   fileToUpload: File;
   uploadedFile: Observable<StateResource<BinaryFileResource>>;
 }
diff --git a/alfa-client/libs/binary-file-shared/src/lib/binary-file.service.spec.ts b/alfa-client/libs/binary-file-shared/src/lib/binary-file.service.spec.ts
index 0224be702b..4b9200a093 100644
--- a/alfa-client/libs/binary-file-shared/src/lib/binary-file.service.spec.ts
+++ b/alfa-client/libs/binary-file-shared/src/lib/binary-file.service.spec.ts
@@ -44,7 +44,7 @@ import { createDummyResource } from 'libs/tech-shared/test/resource';
 import { Observable, of, throwError } from 'rxjs';
 import { createHttpErrorResponse } from '../../../tech-shared/test/http';
 import { coldError, coldStartWithError, multipleCold, singleCold, singleHot } from '../../../tech-shared/test/marbles';
-import { BinaryFileResource, BinaryFileUploadType, ToUploadFile, UploadFile } from './binary-file.model';
+import { BinaryFileResource, FileUploadType, ToUploadFile, UploadFile } from './binary-file.model';
 import { BinaryFileRepository } from './binary-file.repository';
 import { BinaryFileService } from './binary-file.service';
 
@@ -66,34 +66,38 @@ describe('BinaryFileService', () => {
   });
 
   describe('is upload in progress', () => {
+    const type: FileUploadType = 'DummyType';
     const uploadFile: UploadFile = {
+      type,
       fileToUpload: createFile(),
       uploadedFile: of(createEmptyStateResource<BinaryFileResource>(true)),
     };
 
     beforeEach(() => {
-      service.uploadFiles.next({ [BinaryFileUploadType.BESCHEID]: [uploadFile] });
+      service.uploadFiles.next({ [type]: [uploadFile] });
     });
 
     it('should return true if uploadedFiles contains loading stateResource by key', () => {
-      const uploadInProgress: Observable<boolean> = service.isUploadInProgress(BinaryFileUploadType.BESCHEID);
+      const uploadInProgress: Observable<boolean> = service.isUploadInProgress(type);
 
       expect(uploadInProgress).toBeObservable(singleCold(true));
     });
   });
 
   describe('get uploaded files', () => {
+    const type: FileUploadType = 'DummyType';
     const uploadFile: UploadFile = {
+      type,
       fileToUpload: createFile(),
       uploadedFile: of(createStateResource(createBinaryFileResource())),
     };
 
     beforeEach(() => {
-      service.uploadFiles.next({ [BinaryFileUploadType.BESCHEID]: [uploadFile] });
+      service.uploadFiles.next({ [type]: [uploadFile] });
     });
 
     it('should return uploaded files by key', (done) => {
-      service.getUploadedFiles(BinaryFileUploadType.BESCHEID).subscribe((uploadedFiles: UploadFile[]) => {
+      service.getUploadedFiles(type).subscribe((uploadedFiles: UploadFile[]) => {
         expect(uploadedFiles).toEqual([uploadFile]);
         done();
       });
@@ -103,7 +107,7 @@ describe('BinaryFileService', () => {
   describe('upload file new', () => {
     const file: File = createFile();
     const uri: ResourceUri = faker.internet.url();
-    const type: BinaryFileUploadType = BinaryFileUploadType.BESCHEID;
+    const type: FileUploadType = 'dummyType';
 
     const toUploadFile: ToUploadFile = { file, uri, type };
 
@@ -112,7 +116,7 @@ describe('BinaryFileService', () => {
 
     const binaryFileStateResource$: Observable<StateResource<BinaryFileResource>> = of(createStateResource(binaryFileResource));
 
-    const uploadFile: UploadFile = { fileToUpload: file, uploadedFile: binaryFileStateResource$ };
+    const uploadFile: UploadFile = { type, fileToUpload: file, uploadedFile: binaryFileStateResource$ };
 
     it('should push entry to uploaded files', () => {
       service._buildUploadFile = jest.fn().mockReturnValue(uploadFile);
diff --git a/alfa-client/libs/binary-file-shared/src/lib/binary-file.service.ts b/alfa-client/libs/binary-file-shared/src/lib/binary-file.service.ts
index 02513d3055..5c734dbe76 100644
--- a/alfa-client/libs/binary-file-shared/src/lib/binary-file.service.ts
+++ b/alfa-client/libs/binary-file-shared/src/lib/binary-file.service.ts
@@ -48,7 +48,7 @@ import { catchError, map, mergeMap, startWith, switchMap } from 'rxjs/operators'
 import {
   BinaryFileListResource,
   BinaryFileResource,
-  BinaryFileUploadType,
+  FileUploadType,
   ToUploadFile,
   UploadFile,
   UploadFilesByType,
@@ -57,19 +57,14 @@ import { BinaryFileRepository } from './binary-file.repository';
 
 @Injectable({ providedIn: 'root' })
 export class BinaryFileService {
-  uploadFiles: BehaviorSubject<UploadFilesByType> = new BehaviorSubject({
-    [BinaryFileUploadType.BESCHEID]: EMPTY_ARRAY,
-    [BinaryFileUploadType.KOMMENTAR]: EMPTY_ARRAY,
-    [BinaryFileUploadType.WIEDERVORLAGE]: EMPTY_ARRAY,
-    [BinaryFileUploadType.POSTACH_NACHRICHT]: EMPTY_ARRAY,
-  });
+  uploadFiles: BehaviorSubject<UploadFilesByType> = new BehaviorSubject({});
 
   constructor(
     private repository: BinaryFileRepository,
     private snackbarService: SnackBarService,
   ) {}
 
-  public isUploadInProgress(type: BinaryFileUploadType): Observable<boolean> {
+  public isUploadInProgress(type: FileUploadType): Observable<boolean> {
     return this.uploadFiles.asObservable().pipe(
       map((files: UploadFilesByType) => files[type].map((file: UploadFile) => file.uploadedFile)),
       switchMap((files: Observable<StateResource<BinaryFileResource>>[]) => forkJoin(files)),
@@ -77,17 +72,19 @@ export class BinaryFileService {
     );
   }
 
-  public getUploadedFiles(type: BinaryFileUploadType): Observable<UploadFile[]> {
+  public getUploadedFiles(type: FileUploadType): Observable<UploadFile[]> {
     return this.uploadFiles.asObservable().pipe(map((files: UploadFilesByType) => files[type]));
   }
 
   //TODO Rename
   public uploadFileNew(toUploadFile: ToUploadFile): void {
+    if (!(toUploadFile.uri in this.uploadFiles.value)) this.uploadFiles.value[toUploadFile.type] = EMPTY_ARRAY;
     this.uploadFiles.value[toUploadFile.type].push(this._buildUploadFile(toUploadFile));
   }
 
   _buildUploadFile(toUploadFile: ToUploadFile): UploadFile {
     return {
+      type: toUploadFile.type,
       fileToUpload: toUploadFile.file,
       uploadedFile: this._handleUpload(toUploadFile),
     };
-- 
GitLab