mirror of
https://github.com/booklore-app/booklore.git
synced 2026-02-18 00:17:53 +01:00
fix(additional-file-uploader): add file size validation with UI feedback (#2516)
This commit is contained in:
@@ -43,7 +43,6 @@
|
||||
|
||||
<!-- File Upload -->
|
||||
<p-fileupload class="file-upload" name="file"
|
||||
[maxFileSize]="maxFileSizeBytes"
|
||||
[customUpload]="true"
|
||||
[multiple]="false"
|
||||
(onSelect)="onFilesSelect($event)"
|
||||
@@ -81,7 +80,7 @@
|
||||
@for (uploadFile of this.files; track uploadFile; let i = $index) {
|
||||
<div class="file-row">
|
||||
<div class="file-info">
|
||||
<p-badge [value]="uploadFile.status" [severity]="getBadgeSeverity(uploadFile.status)" class="file-badge"/>
|
||||
<p-badge [value]="getFileStatusLabel(uploadFile)" [severity]="getBadgeSeverity(uploadFile.status)" class="file-badge"/>
|
||||
<span class="file-name">
|
||||
{{ uploadFile.file.name }}
|
||||
</span>
|
||||
|
||||
@@ -104,10 +104,26 @@ export class AdditionalFileUploaderComponent implements OnInit, OnDestroy {
|
||||
// Only take the first file for single file upload
|
||||
if (newFiles.length > 0) {
|
||||
const file = newFiles[0];
|
||||
this.files = [{
|
||||
file,
|
||||
status: 'Pending'
|
||||
}];
|
||||
|
||||
if (this.maxFileSizeBytes && file.size > this.maxFileSizeBytes) {
|
||||
const errorMsg = `File exceeds maximum size of ${this.formatSize(this.maxFileSizeBytes)}`;
|
||||
this.files = [{
|
||||
file,
|
||||
status: 'Failed',
|
||||
errorMessage: errorMsg
|
||||
}];
|
||||
this.messageService.add({
|
||||
severity: 'error',
|
||||
summary: 'File Too Large',
|
||||
detail: `${file.name} exceeds the maximum file size of ${this.formatSize(this.maxFileSizeBytes)}`,
|
||||
life: 5000
|
||||
});
|
||||
} else {
|
||||
this.files = [{
|
||||
file,
|
||||
status: 'Pending'
|
||||
}];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -186,6 +202,24 @@ export class AdditionalFileUploaderComponent implements OnInit, OnDestroy {
|
||||
}
|
||||
}
|
||||
|
||||
getFileStatusLabel(uploadFile: UploadingFile): string {
|
||||
if (uploadFile.status === 'Failed' && uploadFile.errorMessage?.includes('exceeds maximum size')) {
|
||||
return 'Too Large';
|
||||
}
|
||||
switch (uploadFile.status) {
|
||||
case 'Pending':
|
||||
return 'Ready';
|
||||
case 'Uploading':
|
||||
return 'Uploading';
|
||||
case 'Uploaded':
|
||||
return 'Uploaded';
|
||||
case 'Failed':
|
||||
return 'Failed';
|
||||
default:
|
||||
return uploadFile.status;
|
||||
}
|
||||
}
|
||||
|
||||
closeDialog(): void {
|
||||
this.dialogRef.close();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user