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 6ace813e0592f1b6c009cc28c937e421b29afa35..ad066e5dcc84ed8ed7f48b258a2d32eaeefcca7d 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 0224be702b2694557dcfe2ac287bafdbad3701ea..4b9200a09313ae46fbd06a99a269947faffb72ce 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 02513d3055822c2c7bea631b5dc31d08be7f727a..5c734dbe76d0ff81b81596dba89011cf312044ac 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), };