From a338347486fe2f142e2f6539196f7548867a3f3c Mon Sep 17 00:00:00 2001 From: garrettmills Date: Tue, 2 Feb 2021 08:24:36 -0600 Subject: [PATCH] #29 - allow uploading multiple files; ajax upload w/o reloading page --- .../editor/files/files.component.html | 2 +- .../editor/files/files.component.ts | 31 ++++++++++++++++++- 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/src/app/components/editor/files/files.component.html b/src/app/components/editor/files/files.component.html index 9159fb6..4cdf41c 100644 --- a/src/app/components/editor/files/files.component.html +++ b/src/app/components/editor/files/files.component.html @@ -1,7 +1,7 @@
- + Upload
diff --git a/src/app/components/editor/files/files.component.ts b/src/app/components/editor/files/files.component.ts index ec8cabb..6ce6ce3 100644 --- a/src/app/components/editor/files/files.component.ts +++ b/src/app/components/editor/files/files.component.ts @@ -3,6 +3,7 @@ import {ApiService, ResourceNotAvailableOfflineError} from '../../../service/api import { APP_BASE_HREF } from '@angular/common'; import {EditorService} from '../../../service/editor.service'; import {EditorNodeContract} from '../../nodes/EditorNode.contract'; +import {HttpClient} from '@angular/common/http'; @Component({ selector: 'editor-files', @@ -13,6 +14,7 @@ export class FilesComponent extends EditorNodeContract implements OnInit { @Input() nodeId: string; @Input() editorUUID: string; @ViewChild('uploadForm') uploadForm: ElementRef; + @ViewChild('fileUploader') fileUploader: ElementRef; public fileRecords: Array = []; public pendingSetup = true; @@ -26,6 +28,7 @@ export class FilesComponent extends EditorNodeContract implements OnInit { constructor( protected api: ApiService, + protected http: HttpClient, public editorService: EditorService, @Inject(APP_BASE_HREF) private baseHref: string ) { super(); } @@ -69,6 +72,7 @@ export class FilesComponent extends EditorNodeContract implements OnInit { } this.pendingSetup = false; + this.fileUploader.nativeElement.value = null; } public async performDelete(): Promise { @@ -91,9 +95,34 @@ export class FilesComponent extends EditorNodeContract implements OnInit { return; } - this.uploadForm.nativeElement.submit(); + const fileList: FileList = this.fileUploader?.nativeElement?.files; + if ( !fileList ) { + return; + } + + if ( fileList.length > 0 ) { + const formData: FormData = new FormData(); + + // tslint:disable-next-line:prefer-for-of + for ( let i = 0; i < fileList.length; i += 1 ) { + const file = fileList[i]; + formData.append(`uploaded_file_${i}`, file, file.name); + } + + this.http.post(this.getApiSubmit(), formData).subscribe({ + next: data => { + this.performLoad(); + }, + error: error => { + console.error(error); + this.performLoad(); + }, + }); + } } + onFileChange(event) {} + getReturnUrl() { return `${this.baseHref}editor;id=${this.page.UUID}`; }