diff --git a/src/app/pages/forms/components/layouts/layouts.component.ts b/src/app/pages/forms/components/layouts/layouts.component.ts index cad801c4..9fa270ff 100644 --- a/src/app/pages/forms/components/layouts/layouts.component.ts +++ b/src/app/pages/forms/components/layouts/layouts.component.ts @@ -16,6 +16,11 @@ export class Layouts { url: '', }; + public fileUploaderOptions:NgUploaderOptions = { + // url: 'http://website.com/upload' + url: '', + }; + constructor() { } diff --git a/src/app/pages/forms/components/layouts/layouts.html b/src/app/pages/forms/components/layouts/layouts.html index c3fb5eda..5dd812a2 100644 --- a/src/app/pages/forms/components/layouts/layouts.html +++ b/src/app/pages/forms/components/layouts/layouts.html @@ -41,5 +41,10 @@ +
+ + + +
diff --git a/src/app/theme/components/baFileUploader/baFileUploader.component.ts b/src/app/theme/components/baFileUploader/baFileUploader.component.ts new file mode 100755 index 00000000..82939fe3 --- /dev/null +++ b/src/app/theme/components/baFileUploader/baFileUploader.component.ts @@ -0,0 +1,59 @@ +import { Component, ViewChild, Input, Output, EventEmitter, ElementRef, Renderer } from '@angular/core'; +import { NgUploaderOptions } from 'ngx-uploader'; +@Component({ + selector: 'ba-file-uploader', + styleUrls: ['./baFileUploader.scss'], + templateUrl: './baFileUploader.html', +}) +export class BaFileUploader { + @Input() fileUploaderOptions: NgUploaderOptions = { url: '' }; + @Output() onFileUpload = new EventEmitter(); + @Output() onFileUploadCompleted = new EventEmitter(); + @Input() defaultValue: string = ''; + + @ViewChild('fileUpload') public _fileUpload: ElementRef; + @ViewChild('inputText') public _inputText: ElementRef; + + public uploadFileInProgress: boolean; + constructor(private renderer: Renderer) { + } + + bringFileSelector(): boolean { + this.renderer.invokeElementMethod(this._fileUpload.nativeElement, 'click'); + return false; + } + + beforeFileUpload(uploadingFile): void { + let files = this._fileUpload.nativeElement.files; + if (files.length) { + const file = files[0]; + this._onChangeFileSelect(files[0]) + if (!this._canFleUploadOnServer()) { + uploadingFile.setAbort(); + } else { + this.uploadFileInProgress = true; + } + } + } + + _onChangeFileSelect(file) { + this._inputText.nativeElement.value = file.name + } + + _onFileUpload(data): void { + if (data['done'] || data['abort'] || data['error']) { + this._onFileUploadCompleted(data); + } else { + this.onFileUpload.emit(data); + } + } + + _onFileUploadCompleted(data): void { + this.uploadFileInProgress = false; + this.onFileUploadCompleted.emit(data); + } + + _canFleUploadOnServer(): boolean { + return !!this.fileUploaderOptions['url']; + } +} diff --git a/src/app/theme/components/baFileUploader/baFileUploader.html b/src/app/theme/components/baFileUploader/baFileUploader.html new file mode 100755 index 00000000..b3fc5a27 --- /dev/null +++ b/src/app/theme/components/baFileUploader/baFileUploader.html @@ -0,0 +1,7 @@ + +
+ + + + +
\ No newline at end of file diff --git a/src/app/theme/components/baFileUploader/baFileUploader.scss b/src/app/theme/components/baFileUploader/baFileUploader.scss new file mode 100755 index 00000000..e69de29b diff --git a/src/app/theme/components/baFileUploader/index.ts b/src/app/theme/components/baFileUploader/index.ts new file mode 100755 index 00000000..a6e7084b --- /dev/null +++ b/src/app/theme/components/baFileUploader/index.ts @@ -0,0 +1 @@ +export * from './baFileUploader.component'; diff --git a/src/app/theme/components/index.ts b/src/app/theme/components/index.ts index 31ef464d..b4f0e10b 100644 --- a/src/app/theme/components/index.ts +++ b/src/app/theme/components/index.ts @@ -12,3 +12,4 @@ export * from './baFullCalendar'; export * from './baPictureUploader'; export * from './baCheckbox'; export * from './baMultiCheckbox'; +export * from './baFileUploader'; diff --git a/src/app/theme/nga.module.ts b/src/app/theme/nga.module.ts index 2a999412..eef0d69e 100644 --- a/src/app/theme/nga.module.ts +++ b/src/app/theme/nga.module.ts @@ -27,7 +27,8 @@ import { BaMultiCheckbox, BaPageTop, BaPictureUploader, - BaSidebar + BaSidebar, + BaFileUploader } from './components'; import { BaCardBlur } from './components/baCard/baCardBlur.directive'; @@ -70,7 +71,8 @@ const NGA_COMPONENTS = [ BaMultiCheckbox, BaPageTop, BaPictureUploader, - BaSidebar + BaSidebar, + BaFileUploader ]; const NGA_DIRECTIVES = [