From 18181d9522be7b0d1b86a617fb9c3951325e41ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adina=20=C8=9Aeudan?= Date: Fri, 22 Apr 2022 22:32:28 +0300 Subject: [PATCH] RED-3912: Show error message in case you try to upload invalid files --- .../import-redactions-dialog.ts | 4 ++- .../model/file-upload.model.ts | 3 +- .../services/file-upload.service.ts | 12 ++++++-- .../upload-status-overlay.component.html | 2 +- apps/red-ui/src/app/utils/file-drop-utils.ts | 30 ++++++++++--------- apps/red-ui/src/assets/i18n/de.json | 2 ++ apps/red-ui/src/assets/i18n/en.json | 2 ++ libs/common-ui | 2 +- 8 files changed, 36 insertions(+), 21 deletions(-) diff --git a/apps/red-ui/src/app/modules/file-preview/dialogs/import-redactions-dialog/import-redactions-dialog.ts b/apps/red-ui/src/app/modules/file-preview/dialogs/import-redactions-dialog/import-redactions-dialog.ts index ea0f79579..2cffea8d5 100644 --- a/apps/red-ui/src/app/modules/file-preview/dialogs/import-redactions-dialog/import-redactions-dialog.ts +++ b/apps/red-ui/src/app/modules/file-preview/dialogs/import-redactions-dialog/import-redactions-dialog.ts @@ -58,7 +58,9 @@ export class ImportRedactionsDialogComponent extends BaseDialogComponent { async save(): Promise { this._loadingService.start(); const import$ = this._redactionImportService.importRedactions(this.data.dossierId, this.data.fileId, this.fileToImport); - const result: any = await firstValueFrom(import$).catch(error => this._toaster.error(_('error.http.generic'), { params: error })); + const result: any = await firstValueFrom(import$).catch(error => + this._toaster.error(_('import-redactions-dialog.http.error'), { error }), + ); this._loadingService.stop(); if (result.status === HttpStatusCode.Ok) { diff --git a/apps/red-ui/src/app/modules/upload-download/model/file-upload.model.ts b/apps/red-ui/src/app/modules/upload-download/model/file-upload.model.ts index 1e6170f72..0c8d4bc9b 100644 --- a/apps/red-ui/src/app/modules/upload-download/model/file-upload.model.ts +++ b/apps/red-ui/src/app/modules/upload-download/model/file-upload.model.ts @@ -5,7 +5,8 @@ export interface FileUploadModel { error: any; retryCount: number; size: number; - sizeError: any; + sizeError: boolean; + typeError: boolean; dossierId?: string; dossierName?: string; } diff --git a/apps/red-ui/src/app/modules/upload-download/services/file-upload.service.ts b/apps/red-ui/src/app/modules/upload-download/services/file-upload.service.ts index 0497e584a..5a7e86f1c 100644 --- a/apps/red-ui/src/app/modules/upload-download/services/file-upload.service.ts +++ b/apps/red-ui/src/app/modules/upload-download/services/file-upload.service.ts @@ -5,7 +5,7 @@ import { interval, Subject, Subscription } from 'rxjs'; import { ConfigService } from '@services/config.service'; import { TranslateService } from '@ngx-translate/core'; import { IFileUploadResult } from '@red/domain'; -import { isCsv } from '@utils/file-drop-utils'; +import { isAcceptedFileType, isCsv } from '@utils/file-drop-utils'; import { ErrorMessageService, GenericService, HeadersConfiguration, RequiredParam, Validate } from '@iqser/common-ui'; import { FilesMapService } from '@services/entity-services/files-map.service'; import { switchMap, tap, throttleTime } from 'rxjs/operators'; @@ -58,7 +58,7 @@ export class FileUploadService extends GenericService impleme } scheduleUpload(item: FileUploadModel) { - if (!item.sizeError) { + if (!item.sizeError && !item.typeError) { item.progress = 0; item.completed = false; item.error = null; @@ -90,7 +90,13 @@ export class FileUploadService extends GenericService impleme continue; } } - if (file.size > maxSizeBytes) { + if (!isAcceptedFileType(file)) { + file.completed = true; + file.error = { + message: this._translateService.instant('upload-status.error.file-type'), + }; + file.typeError = true; + } else if (file.size > maxSizeBytes) { file.completed = true; file.error = { message: this._translateService.instant('upload-status.error.file-size', { diff --git a/apps/red-ui/src/app/modules/upload-download/upload-status-overlay/upload-status-overlay.component.html b/apps/red-ui/src/app/modules/upload-download/upload-status-overlay/upload-status-overlay.component.html index bd1d61b02..ddd62b26c 100644 --- a/apps/red-ui/src/app/modules/upload-download/upload-status-overlay/upload-status-overlay.component.html +++ b/apps/red-ui/src/app/modules/upload-download/upload-status-overlay/upload-status-overlay.component.html @@ -41,7 +41,7 @@
- file.file.type?.toLowerCase() === 'application/pdf' || - file.file.name.toLowerCase().endsWith('.pdf') || - file.file.type?.toLowerCase() === 'application/zip' || - file.file.name.toLowerCase().endsWith('.zip') || - isDocument(file) || - isCsv(file), - ); - - const pdfFiles = uploadFiles.filter(a => !isCsv(a)).sort((a, b) => a.size - b.size); - const csvFiles = uploadFiles.filter(a => isCsv(a)); + const pdfFiles = uploadFiles.filter(file => !isCsv(file)).sort((a, b) => a.size - b.size); + const csvFiles = uploadFiles.filter(file => isCsv(file)); const sortedFiles = [...pdfFiles, ...csvFiles]; @@ -64,7 +66,7 @@ export function handleFileDrop(event: DragEvent, dossier: Dossier, uploadFiles: event.preventDefault(); event.stopPropagation(); const { dataTransfer } = event; - let files: any = []; + let files: FileList | File[] = []; if (dataTransfer.items) { for (let i = 0; i < dataTransfer.items.length; i++) { // If dropped items aren't files, reject them diff --git a/apps/red-ui/src/assets/i18n/de.json b/apps/red-ui/src/assets/i18n/de.json index cbd91d665..11b7ad284 100644 --- a/apps/red-ui/src/assets/i18n/de.json +++ b/apps/red-ui/src/assets/i18n/de.json @@ -1460,6 +1460,7 @@ }, "details": "", "http": { + "error": "", "success": "" }, "only-for-specific-pages": "", @@ -1916,6 +1917,7 @@ }, "error": { "file-size": "Datei zu groß. Die maximal zulässige Größe beträgt {size} MB.", + "file-type": "", "generic": "Fehler beim Hochladen des Dokuments. {error}" } }, diff --git a/apps/red-ui/src/assets/i18n/en.json b/apps/red-ui/src/assets/i18n/en.json index 73885dc8b..ff5d19017 100644 --- a/apps/red-ui/src/assets/i18n/en.json +++ b/apps/red-ui/src/assets/i18n/en.json @@ -1460,6 +1460,7 @@ }, "details": "To apply redactions from another document, you first need to upload it.", "http": { + "error": "Failed to import redactions! {error}", "success": "Redactions has been imported!" }, "only-for-specific-pages": "Import only for page(s)", @@ -1916,6 +1917,7 @@ }, "error": { "file-size": "File too large. Limit is {size}MB.", + "file-type": "This file type is not accepted.", "generic": "Failed to upload file. {error}" } }, diff --git a/libs/common-ui b/libs/common-ui index d8c2a342b..fd9d62241 160000 --- a/libs/common-ui +++ b/libs/common-ui @@ -1 +1 @@ -Subproject commit d8c2a342baa6acb330132c44000562bdd823f620 +Subproject commit fd9d622413547de842439e8d91ee4316f2facff1