mirror of
				https://github.com/paperless-ngx/paperless-ngx.git
				synced 2025-10-30 03:56:23 -05:00 
			
		
		
		
	upload status addresses #100
This commit is contained in:
		| @@ -1,15 +1,18 @@ | ||||
| <app-widget-frame title="Upload new documents"> | ||||
|  | ||||
|   <form content> | ||||
|     <ngx-file-drop  | ||||
|       dropZoneLabel="Drop documents here or" (onFileDrop)="dropped($event)" | ||||
|       (onFileOver)="fileOver($event)" (onFileLeave)="fileLeave($event)" | ||||
|       dropZoneClassName="bg-light card" | ||||
|       multiple="true" | ||||
|       contentClassName="justify-content-center d-flex align-items-center p-5" | ||||
|       [showBrowseBtn]=true | ||||
|   <div content> | ||||
|     <form> | ||||
|       <ngx-file-drop dropZoneLabel="Drop documents here or" (onFileDrop)="dropped($event)" | ||||
|         (onFileOver)="fileOver($event)" (onFileLeave)="fileLeave($event)" dropZoneClassName="bg-light card" | ||||
|         multiple="true" contentClassName="justify-content-center d-flex align-items-center p-5" [showBrowseBtn]=true | ||||
|         browseBtnClassName="btn btn-sm btn-outline-primary ml-2"> | ||||
|  | ||||
|       </ngx-file-drop> | ||||
|     </form> | ||||
|     <div *ngIf="uploadVisible" class="mt-3"> | ||||
|       <p>Uploading {{uploadStatus.length}} file(s)</p> | ||||
|       <ngb-progressbar [value]="loadedSum" [max]="totalSum" [striped]="true" [animated]="uploadStatus.length > 0"> | ||||
|       </ngb-progressbar> | ||||
|     </div> | ||||
|   </div> | ||||
| </app-widget-frame> | ||||
| @@ -1,8 +1,16 @@ | ||||
| import { HttpEventType } from '@angular/common/http'; | ||||
| import { Component, OnInit } from '@angular/core'; | ||||
| import { FileSystemFileEntry, NgxFileDropEntry } from 'ngx-file-drop'; | ||||
| import { DocumentService } from 'src/app/services/rest/document.service'; | ||||
| import { Toast, ToastService } from 'src/app/services/toast.service'; | ||||
|  | ||||
|  | ||||
| interface UploadStatus { | ||||
|   file: string | ||||
|   loaded: number | ||||
|   total: number  | ||||
| } | ||||
|  | ||||
| @Component({ | ||||
|   selector: 'app-upload-file-widget', | ||||
|   templateUrl: './upload-file-widget.component.html', | ||||
| @@ -21,16 +29,40 @@ export class UploadFileWidgetComponent implements OnInit { | ||||
|   public fileLeave(event){ | ||||
|   } | ||||
|  | ||||
|   uploadStatus: UploadStatus[] = [] | ||||
|  | ||||
|   uploadVisible = false | ||||
|  | ||||
|   get loadedSum() { | ||||
|     return this.uploadStatus.map(s => s.loaded).reduce((a,b) => a+b, 1) | ||||
|   } | ||||
|  | ||||
|   get totalSum() { | ||||
|     return this.uploadStatus.map(s => s.total).reduce((a,b) => a+b, 1) | ||||
|   } | ||||
|  | ||||
|   public dropped(files: NgxFileDropEntry[]) { | ||||
|     for (const droppedFile of files) { | ||||
|       if (droppedFile.fileEntry.isFile) { | ||||
|         const fileEntry = droppedFile.fileEntry as FileSystemFileEntry; | ||||
|         fileEntry.file((file: File) => { | ||||
|           const formData = new FormData() | ||||
|           let formData = new FormData() | ||||
|           formData.append('document', file, file.name) | ||||
|           this.documentService.uploadDocument(formData).subscribe(result => { | ||||
|  | ||||
|           let uploadStatusObject: UploadStatus = {file: file.name, loaded: 0, total: 1} | ||||
|           this.uploadStatus.push(uploadStatusObject) | ||||
|           this.uploadVisible = true | ||||
|           this.documentService.uploadDocument(formData).subscribe(event => { | ||||
|             if (event.type == HttpEventType.UploadProgress) { | ||||
|               uploadStatusObject.loaded = event.loaded | ||||
|               uploadStatusObject.total = event.total | ||||
|             } else if (event.type == HttpEventType.Response) { | ||||
|               this.uploadStatus.splice(this.uploadStatus.indexOf(uploadStatusObject), 1) | ||||
|               this.toastService.showToast(Toast.make("Information", "The document has been uploaded and will be processed by the consumer shortly.")) | ||||
|             } | ||||
|              | ||||
|           }, error => { | ||||
|             this.uploadStatus.splice(this.uploadStatus.indexOf(uploadStatusObject), 1) | ||||
|             switch (error.status) { | ||||
|               case 400: { | ||||
|                 this.toastService.showToast(Toast.makeError(`There was an error while uploading the document: ${error.error.document}`)) | ||||
|   | ||||
| @@ -94,7 +94,7 @@ export class DocumentService extends AbstractPaperlessService<PaperlessDocument> | ||||
|   } | ||||
|  | ||||
|   uploadDocument(formData) { | ||||
|     return this.http.post(this.getResourceUrl(null, 'post_document'), formData) | ||||
|     return this.http.post(this.getResourceUrl(null, 'post_document'), formData, {reportProgress: true, observe: "events"}) | ||||
|   } | ||||
|  | ||||
|   getMetadata(id: number): Observable<PaperlessDocumentMetadata> { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 jonaswinkler
					jonaswinkler