ngx-uploader-directive
Version:
Angular File Uploader Directive which provides two directives, which are select and file drag and drop to upload files on server.
160 lines • 16.6 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: lib/directives/ngx-uploader-select.directive.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/**
* @license
* The MIT License (MIT)
* Copyright (c) 2015-2018 Jan Kuri jan@bleenco.com
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
// tslint:disable: max-line-length
// tslint:disable: no-console
import { Directive, Input, EventEmitter, Output, ElementRef } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { NgxUploaderDirectiveService } from '../services/ngx-uploader-directive.service';
import { environment } from '../configs/config';
export class NgxUploaderSelectDirective {
/**
* @param {?} elementRef
* @param {?} httpClient
*/
constructor(elementRef, httpClient) {
this.elementRef = elementRef;
this.httpClient = httpClient;
this.devEnv = !environment.production;
this.fileListener = (/**
* @return {?}
*/
() => {
// tslint:disable-next-line: no-console
if (this.element.files) {
// call service method to handle selected files
this.uploadService.handleSelectedFiles(this.element.files, 'SELECT');
}
});
this.uploadOutput = new EventEmitter();
}
// tslint:disable-next-line: use-life-cycle-interface
/**
* @return {?}
*/
ngOnInit() {
this.subscriptions = new Array();
/** @type {?} */
const concurrency = this.options.requestConcurrency;
/** @type {?} */
const allowedFileTypes = this.options.allowedFileTypes;
/** @type {?} */
const maxFileUploads = this.options.maxFileUploads;
/** @type {?} */
const maxFileSize = this.options.maxFileSize;
// tslint:disable-next-line: max-line-length
this.uploadService = new NgxUploaderDirectiveService(concurrency, this.options.maxFilesToAddInSingleRequest, allowedFileTypes, maxFileUploads, maxFileSize, this.httpClient, this.options.logs);
// file upload element
this.element = this.elementRef.nativeElement;
// Adding on change event listener
this.element.addEventListener('change', this.fileListener, false);
this.subscriptions.push(this.uploadService.fileServiceEvents.subscribe((/**
* @param {?} event
* @return {?}
*/
(event) => {
if (event.fileSelectedEventType === 'SELECT' || event.fileSelectedEventType === 'ALL') {
if (event.type === 'error' || event.type === 'removedAll') {
this.element.files = null;
this.element.value = '';
}
else if (event.type === 'removed' || event.type === 'rejected') {
if (this.uploadService.queue.length === 0) {
this.element.files = null;
this.element.value = '';
}
}
this.uploadOutput.emit(event);
}
})));
if (this.uploadInput instanceof EventEmitter) {
if (this.options.logs && this.devEnv) {
console.info('Input select Init');
}
this.subscriptions.push(this.uploadService.handleInputEvents(this.uploadInput));
}
}
// tslint:disable-next-line: use-life-cycle-interface
/**
* @return {?}
*/
ngOnDestroy() {
if (this.element) {
this.element.removeEventListener('change', this.fileListener, false);
this.subscriptions.forEach((/**
* @param {?} sub
* @return {?}
*/
sub => sub.unsubscribe()));
}
}
}
NgxUploaderSelectDirective.decorators = [
{ type: Directive, args: [{
// tslint:disable-next-line: directive-selector
selector: '[ngxFileSelect]'
},] }
];
/** @nocollapse */
NgxUploaderSelectDirective.ctorParameters = () => [
{ type: ElementRef },
{ type: HttpClient }
];
NgxUploaderSelectDirective.propDecorators = {
options: [{ type: Input }],
uploadInput: [{ type: Input }],
uploadOutput: [{ type: Output }]
};
if (false) {
/**
* @type {?}
* @private
*/
NgxUploaderSelectDirective.prototype.devEnv;
/** @type {?} */
NgxUploaderSelectDirective.prototype.options;
/** @type {?} */
NgxUploaderSelectDirective.prototype.uploadInput;
/** @type {?} */
NgxUploaderSelectDirective.prototype.uploadOutput;
/** @type {?} */
NgxUploaderSelectDirective.prototype.uploadService;
/** @type {?} */
NgxUploaderSelectDirective.prototype.element;
/** @type {?} */
NgxUploaderSelectDirective.prototype.subscriptions;
/** @type {?} */
NgxUploaderSelectDirective.prototype.fileListener;
/** @type {?} */
NgxUploaderSelectDirective.prototype.elementRef;
/**
* @type {?}
* @private
*/
NgxUploaderSelectDirective.prototype.httpClient;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXVwbG9hZGVyLXNlbGVjdC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vcHJvamVjdHMvbmd4LXVwbG9hZGVyLWRpcmVjdGl2ZS9zcmMvIiwic291cmNlcyI6WyJsaWIvZGlyZWN0aXZlcy9uZ3gtdXBsb2FkZXItc2VsZWN0LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXlCQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUduRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDekYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBT2hELE1BQU0sT0FBTywwQkFBMEI7Ozs7O0lBYXJDLFlBQ1MsVUFBc0IsRUFDckIsVUFBc0I7UUFEdkIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUNyQixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBYnhCLFdBQU0sR0FBRyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUM7UUFvRXpDLGlCQUFZOzs7UUFBRyxHQUFHLEVBQUU7WUFDbEIsdUNBQXVDO1lBQ3ZDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUU7Z0JBQ3RCLCtDQUErQztnQkFDL0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQzthQUN0RTtRQUNILENBQUMsRUFBQTtRQTNEQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksWUFBWSxFQUFpQixDQUFDO0lBQ3hELENBQUM7Ozs7O0lBR0QsUUFBUTtRQUNOLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxLQUFL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QUs7MkJBQ0wsTUFBTTs7Ozs7OztJQUpQLDRDQUF5Qzs7SUFFekMsNkNBQWlDOztJQUNqQyxpREFBd0M7O0lBQ3hDLGtEQUFvRDs7SUFFcEQsbURBQTJDOztJQUMzQyw2Q0FBMEI7O0lBRTFCLG1EQUFtQzs7SUEyRG5DLGtEQU1DOztJQTlEQyxnREFBNkI7Ozs7O0lBQzdCLGdEQUE4QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAbGljZW5zZVxyXG4gKiBUaGUgTUlUIExpY2Vuc2UgKE1JVClcclxuICogQ29weXJpZ2h0IChjKSAyMDE1LTIwMTggSmFuIEt1cmkgamFuQGJsZWVuY28uY29tXHJcbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcclxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxyXG4gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXHJcbiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcclxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXHJcbiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XHJcbiAqXHJcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxyXG4gKiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxyXG4gKlxyXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXHJcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxyXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcclxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxyXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxyXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxyXG4gKiBTT0ZUV0FSRS5cclxuICovXHJcblxyXG4vLyB0c2xpbnQ6ZGlzYWJsZTogbWF4LWxpbmUtbGVuZ3RoXHJcbi8vIHRzbGludDpkaXNhYmxlOiBuby1jb25zb2xlXHJcbmltcG9ydCB7IERpcmVjdGl2ZSwgSW5wdXQsIEV2ZW50RW1pdHRlciwgT3V0cHV0LCBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IElVcGxvYWRPcHRpb25zLCBJVXBsb2FkSW5wdXQsIElVcGxvYWRPdXRwdXQgfSBmcm9tICcuLi9tb2RlbHMvbmd4LXVwbG9hZGVyLWRpcmVjdGl2ZS1tb2RlbHMnO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgTmd4VXBsb2FkZXJEaXJlY3RpdmVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbmd4LXVwbG9hZGVyLWRpcmVjdGl2ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgZW52aXJvbm1lbnQgfSBmcm9tICcuLi9jb25maWdzL2NvbmZpZyc7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGRpcmVjdGl2ZS1zZWxlY3RvclxyXG4gIHNlbGVjdG9yOiAnW25neEZpbGVTZWxlY3RdJ1xyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIE5neFVwbG9hZGVyU2VsZWN0RGlyZWN0aXZlIHtcclxuXHJcbiAgcHJpdmF0ZSBkZXZFbnYgPSAhZW52aXJvbm1lbnQucHJvZHVjdGlvbjtcclxuXHJcbiAgQElucHV0KCkgb3B0aW9uczogSVVwbG9hZE9wdGlvbnM7XHJcbiAgQElucHV0KCkgdXBsb2FkSW5wdXQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xyXG4gIEBPdXRwdXQoKSB1cGxvYWRPdXRwdXQ6IEV2ZW50RW1pdHRlcjxJVXBsb2FkT3V0cHV0PjtcclxuXHJcbiAgdXBsb2FkU2VydmljZTogTmd4VXBsb2FkZXJEaXJlY3RpdmVTZXJ2aWNlO1xyXG4gIGVsZW1lbnQ6IEhUTUxJbnB1dEVsZW1lbnQ7XHJcblxyXG4gIHN1YnNjcmlwdGlvbnM6IEFycmF5PFN1YnNjcmlwdGlvbj47XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXHJcbiAgICBwcml2YXRlIGh0dHBDbGllbnQ6IEh0dHBDbGllbnQsXHJcbiAgKSB7XHJcbiAgICB0aGlzLnVwbG9hZE91dHB1dCA9IG5ldyBFdmVudEVtaXR0ZXI8SVVwbG9hZE91dHB1dD4oKTtcclxuICB9XHJcblxyXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogdXNlLWxpZmUtY3ljbGUtaW50ZXJmYWNlXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMgPSBuZXcgQXJyYXk8U3Vic2NyaXB0aW9uPigpO1xyXG4gICAgY29uc3QgY29uY3VycmVuY3kgPSB0aGlzLm9wdGlvbnMucmVxdWVzdENvbmN1cnJlbmN5O1xyXG4gICAgY29uc3QgYWxsb3dlZEZpbGVUeXBlcyA9IHRoaXMub3B0aW9ucy5hbGxvd2VkRmlsZVR5cGVzO1xyXG4gICAgY29uc3QgbWF4RmlsZVVwbG9hZHMgPSB0aGlzLm9wdGlvbnMubWF4RmlsZVVwbG9hZHM7XHJcbiAgICBjb25zdCBtYXhGaWxlU2l6ZSA9IHRoaXMub3B0aW9ucy5tYXhGaWxlU2l6ZTtcclxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbWF4LWxpbmUtbGVuZ3RoXHJcbiAgICB0aGlzLnVwbG9hZFNlcnZpY2UgPSBuZXcgTmd4VXBsb2FkZXJEaXJlY3RpdmVTZXJ2aWNlKGNvbmN1cnJlbmN5LCB0aGlzLm9wdGlvbnMubWF4RmlsZXNUb0FkZEluU2luZ2xlUmVxdWVzdCwgYWxsb3dlZEZpbGVUeXBlcywgbWF4RmlsZVVwbG9hZHMsIG1heEZpbGVTaXplLCB0aGlzLmh0dHBDbGllbnQsIHRoaXMub3B0aW9ucy5sb2dzKTtcclxuXHJcbiAgICAvLyBmaWxlIHVwbG9hZCBlbGVtZW50XHJcbiAgICB0aGlzLmVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcclxuXHJcbiAgICAvLyBBZGRpbmcgb24gY2hhbmdlIGV2ZW50IGxpc3RlbmVyXHJcbiAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5maWxlTGlzdGVuZXIsIGZhbHNlKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy51cGxvYWRTZXJ2aWNlLmZpbGVTZXJ2aWNlRXZlbnRzLnN1YnNjcmliZSgoZXZlbnQ6IElVcGxvYWRPdXRwdXQpID0+IHtcclxuICAgICAgICBpZiAoZXZlbnQuZmlsZVNlbGVjdGVkRXZlbnRUeXBlID09PSAnU0VMRUNUJyB8fCBldmVudC5maWxlU2VsZWN0ZWRFdmVudFR5cGUgPT09ICdBTEwnKSB7XHJcbiAgICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2Vycm9yJyB8fCBldmVudC50eXBlID09PSAncmVtb3ZlZEFsbCcpIHtcclxuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmZpbGVzID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5lbGVtZW50LnZhbHVlID0gJyc7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnR5cGUgPT09ICdyZW1vdmVkJyB8fCBldmVudC50eXBlID09PSAncmVqZWN0ZWQnKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnVwbG9hZFNlcnZpY2UucXVldWUubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5lbGVtZW50LmZpbGVzID0gbnVsbDtcclxuICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQudmFsdWUgPSAnJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMudXBsb2FkT3V0cHV0LmVtaXQoZXZlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgaWYgKHRoaXMudXBsb2FkSW5wdXQgaW5zdGFuY2VvZiBFdmVudEVtaXR0ZXIpIHtcclxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5sb2dzICYmIHRoaXMuZGV2RW52KSB7XHJcbiAgICAgICAgY29uc29sZS5pbmZvKCdJbnB1dCBzZWxlY3QgSW5pdCcpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMudXBsb2FkU2VydmljZS5oYW5kbGVJbnB1dEV2ZW50cyh0aGlzLnVwbG9hZElucHV0KSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IHVzZS1saWZlLWN5Y2xlLWludGVyZmFjZVxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgaWYgKHRoaXMuZWxlbWVudCkge1xyXG4gICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5maWxlTGlzdGVuZXIsIGZhbHNlKTtcclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goc3ViID0+IHN1Yi51bnN1YnNjcmliZSgpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZpbGVMaXN0ZW5lciA9ICgpID0+IHtcclxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tY29uc29sZVxyXG4gICAgaWYgKHRoaXMuZWxlbWVudC5maWxlcykge1xyXG4gICAgICAvLyBjYWxsIHNlcnZpY2UgbWV0aG9kIHRvIGhhbmRsZSBzZWxlY3RlZCBmaWxlc1xyXG4gICAgICB0aGlzLnVwbG9hZFNlcnZpY2UuaGFuZGxlU2VsZWN0ZWRGaWxlcyh0aGlzLmVsZW1lbnQuZmlsZXMsICdTRUxFQ1QnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcbiJdfQ==