Skip to content
Snippets Groups Projects
Commit ce8a26f9 authored by Martin's avatar Martin
Browse files

OZG-5977 adjust type definition; add type to UploadFile ins state

parent 82637f82
No related branches found
No related tags found
1 merge request!67OZG-5977 add multi option to file upload button
...@@ -36,19 +36,15 @@ export interface BinaryFileResource extends BinaryFile, Resource {} ...@@ -36,19 +36,15 @@ export interface BinaryFileResource extends BinaryFile, Resource {}
export interface BinaryFileListResource extends ListResource {} export interface BinaryFileListResource extends ListResource {}
export interface ToUploadFile { export interface ToUploadFile {
type: BinaryFileUploadType; type: FileUploadType;
file: File; file: File;
uri: ResourceUri; uri: ResourceUri;
} }
export enum BinaryFileUploadType { export declare type FileUploadType = string;
BESCHEID = 'Bescheid',
KOMMENTAR = 'Kommentar',
WIEDERVORLAGE = 'Wiedervorlage',
POSTACH_NACHRICHT = 'PostfachNachricht',
}
export interface UploadFile { export interface UploadFile {
type: FileUploadType;
fileToUpload: File; fileToUpload: File;
uploadedFile: Observable<StateResource<BinaryFileResource>>; uploadedFile: Observable<StateResource<BinaryFileResource>>;
} }
......
...@@ -44,7 +44,7 @@ import { createDummyResource } from 'libs/tech-shared/test/resource'; ...@@ -44,7 +44,7 @@ import { createDummyResource } from 'libs/tech-shared/test/resource';
import { Observable, of, throwError } from 'rxjs'; import { Observable, of, throwError } from 'rxjs';
import { createHttpErrorResponse } from '../../../tech-shared/test/http'; import { createHttpErrorResponse } from '../../../tech-shared/test/http';
import { coldError, coldStartWithError, multipleCold, singleCold, singleHot } from '../../../tech-shared/test/marbles'; 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 { BinaryFileRepository } from './binary-file.repository';
import { BinaryFileService } from './binary-file.service'; import { BinaryFileService } from './binary-file.service';
...@@ -66,34 +66,38 @@ describe('BinaryFileService', () => { ...@@ -66,34 +66,38 @@ describe('BinaryFileService', () => {
}); });
describe('is upload in progress', () => { describe('is upload in progress', () => {
const type: FileUploadType = 'DummyType';
const uploadFile: UploadFile = { const uploadFile: UploadFile = {
type,
fileToUpload: createFile(), fileToUpload: createFile(),
uploadedFile: of(createEmptyStateResource<BinaryFileResource>(true)), uploadedFile: of(createEmptyStateResource<BinaryFileResource>(true)),
}; };
beforeEach(() => { beforeEach(() => {
service.uploadFiles.next({ [BinaryFileUploadType.BESCHEID]: [uploadFile] }); service.uploadFiles.next({ [type]: [uploadFile] });
}); });
it('should return true if uploadedFiles contains loading stateResource by key', () => { 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)); expect(uploadInProgress).toBeObservable(singleCold(true));
}); });
}); });
describe('get uploaded files', () => { describe('get uploaded files', () => {
const type: FileUploadType = 'DummyType';
const uploadFile: UploadFile = { const uploadFile: UploadFile = {
type,
fileToUpload: createFile(), fileToUpload: createFile(),
uploadedFile: of(createStateResource(createBinaryFileResource())), uploadedFile: of(createStateResource(createBinaryFileResource())),
}; };
beforeEach(() => { beforeEach(() => {
service.uploadFiles.next({ [BinaryFileUploadType.BESCHEID]: [uploadFile] }); service.uploadFiles.next({ [type]: [uploadFile] });
}); });
it('should return uploaded files by key', (done) => { 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]); expect(uploadedFiles).toEqual([uploadFile]);
done(); done();
}); });
...@@ -103,7 +107,7 @@ describe('BinaryFileService', () => { ...@@ -103,7 +107,7 @@ describe('BinaryFileService', () => {
describe('upload file new', () => { describe('upload file new', () => {
const file: File = createFile(); const file: File = createFile();
const uri: ResourceUri = faker.internet.url(); const uri: ResourceUri = faker.internet.url();
const type: BinaryFileUploadType = BinaryFileUploadType.BESCHEID; const type: FileUploadType = 'dummyType';
const toUploadFile: ToUploadFile = { file, uri, type }; const toUploadFile: ToUploadFile = { file, uri, type };
...@@ -112,7 +116,7 @@ describe('BinaryFileService', () => { ...@@ -112,7 +116,7 @@ describe('BinaryFileService', () => {
const binaryFileStateResource$: Observable<StateResource<BinaryFileResource>> = of(createStateResource(binaryFileResource)); 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', () => { it('should push entry to uploaded files', () => {
service._buildUploadFile = jest.fn().mockReturnValue(uploadFile); service._buildUploadFile = jest.fn().mockReturnValue(uploadFile);
......
...@@ -48,7 +48,7 @@ import { catchError, map, mergeMap, startWith, switchMap } from 'rxjs/operators' ...@@ -48,7 +48,7 @@ import { catchError, map, mergeMap, startWith, switchMap } from 'rxjs/operators'
import { import {
BinaryFileListResource, BinaryFileListResource,
BinaryFileResource, BinaryFileResource,
BinaryFileUploadType, FileUploadType,
ToUploadFile, ToUploadFile,
UploadFile, UploadFile,
UploadFilesByType, UploadFilesByType,
...@@ -57,19 +57,14 @@ import { BinaryFileRepository } from './binary-file.repository'; ...@@ -57,19 +57,14 @@ import { BinaryFileRepository } from './binary-file.repository';
@Injectable({ providedIn: 'root' }) @Injectable({ providedIn: 'root' })
export class BinaryFileService { export class BinaryFileService {
uploadFiles: BehaviorSubject<UploadFilesByType> = new BehaviorSubject({ uploadFiles: BehaviorSubject<UploadFilesByType> = new BehaviorSubject({});
[BinaryFileUploadType.BESCHEID]: EMPTY_ARRAY,
[BinaryFileUploadType.KOMMENTAR]: EMPTY_ARRAY,
[BinaryFileUploadType.WIEDERVORLAGE]: EMPTY_ARRAY,
[BinaryFileUploadType.POSTACH_NACHRICHT]: EMPTY_ARRAY,
});
constructor( constructor(
private repository: BinaryFileRepository, private repository: BinaryFileRepository,
private snackbarService: SnackBarService, private snackbarService: SnackBarService,
) {} ) {}
public isUploadInProgress(type: BinaryFileUploadType): Observable<boolean> { public isUploadInProgress(type: FileUploadType): Observable<boolean> {
return this.uploadFiles.asObservable().pipe( return this.uploadFiles.asObservable().pipe(
map((files: UploadFilesByType) => files[type].map((file: UploadFile) => file.uploadedFile)), map((files: UploadFilesByType) => files[type].map((file: UploadFile) => file.uploadedFile)),
switchMap((files: Observable<StateResource<BinaryFileResource>>[]) => forkJoin(files)), switchMap((files: Observable<StateResource<BinaryFileResource>>[]) => forkJoin(files)),
...@@ -77,17 +72,19 @@ export class BinaryFileService { ...@@ -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])); return this.uploadFiles.asObservable().pipe(map((files: UploadFilesByType) => files[type]));
} }
//TODO Rename //TODO Rename
public uploadFileNew(toUploadFile: ToUploadFile): void { 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)); this.uploadFiles.value[toUploadFile.type].push(this._buildUploadFile(toUploadFile));
} }
_buildUploadFile(toUploadFile: ToUploadFile): UploadFile { _buildUploadFile(toUploadFile: ToUploadFile): UploadFile {
return { return {
type: toUploadFile.type,
fileToUpload: toUploadFile.file, fileToUpload: toUploadFile.file,
uploadedFile: this._handleUpload(toUploadFile), uploadedFile: this._handleUpload(toUploadFile),
}; };
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment