UNPKG

ngx-dropzone-ivy

Version:

A highly configurable dropzone component for Angular.

67 lines 9.43 kB
import { Injectable } from '@angular/core'; import * as i0 from "@angular/core"; /** * This service contains the filtering logic to be applied to * any dropped or selected file. If a file matches all criteria * like maximum size or accept type, it will be emitted in the * addedFiles array, otherwise in the rejectedFiles array. */ export class NgxDropzoneService { parseFileList(files, accept, maxFileSize, multiple) { const addedFiles = []; const rejectedFiles = []; for (let i = 0; i < files.length; i++) { const file = files.item(i); if (!this.isAccepted(file, accept)) { this.rejectFile(rejectedFiles, file, 'type'); continue; } if (maxFileSize && file.size > maxFileSize) { this.rejectFile(rejectedFiles, file, 'size'); continue; } if (!multiple && addedFiles.length >= 1) { this.rejectFile(rejectedFiles, file, 'no_multiple'); continue; } addedFiles.push(file); } const result = { addedFiles, rejectedFiles }; return result; } isAccepted(file, accept) { if (accept === '*') { return true; } const acceptFiletypes = accept.split(',').map(it => it.toLowerCase().trim()); const filetype = file.type.toLowerCase(); const filename = file.name.toLowerCase(); const matchedFileType = acceptFiletypes.find(acceptFiletype => { // check for wildcard mimetype (e.g. image/*) if (acceptFiletype.endsWith('/*')) { return filetype.split('/')[0] === acceptFiletype.split('/')[0]; } // check for file extension (e.g. .csv) if (acceptFiletype.startsWith(".")) { return filename.endsWith(acceptFiletype); } // check for exact mimetype match (e.g. image/jpeg) return acceptFiletype == filetype; }); return !!matchedFileType; } rejectFile(rejectedFiles, file, reason) { const rejectedFile = file; rejectedFile.reason = reason; rejectedFiles.push(rejectedFile); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgxDropzoneService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgxDropzoneService }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgxDropzoneService, decorators: [{ type: Injectable }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWRyb3B6b25lLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZHJvcHpvbmUvc3JjL2xpYi9uZ3gtZHJvcHpvbmUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQW1CM0M7Ozs7O0dBS0c7QUFFSCxNQUFNLE9BQU8sa0JBQWtCO0lBRTlCLGFBQWEsQ0FBQyxLQUFlLEVBQUUsTUFBYyxFQUFFLFdBQW1CLEVBQUUsUUFBaUI7UUFFcEYsTUFBTSxVQUFVLEdBQVcsRUFBRSxDQUFDO1FBQzlCLE1BQU0sYUFBYSxHQUFtQixFQUFFLENBQUM7UUFFekMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDdEMsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUUzQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEVBQUU7Z0JBQ25DLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDN0MsU0FBUzthQUNUO1lBRUQsSUFBSSxXQUFXLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxXQUFXLEVBQUU7Z0JBQzNDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDN0MsU0FBUzthQUNUO1lBRUQsSUFBSSxDQUFDLFFBQVEsSUFBSSxVQUFVLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtnQkFDeEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsSUFBSSxFQUFFLGFBQWEsQ0FBQyxDQUFDO2dCQUNwRCxTQUFTO2FBQ1Q7WUFFRCxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3RCO1FBRUQsTUFBTSxNQUFNLEdBQXFCO1lBQ2hDLFVBQVU7WUFDVixhQUFhO1NBQ2IsQ0FBQztRQUVGLE9BQU8sTUFBTSxDQUFDO0lBQ2YsQ0FBQztJQUVPLFVBQVUsQ0FBQyxJQUFVLEVBQUUsTUFBYztRQUU1QyxJQUFJLE1BQU0sS0FBSyxHQUFHLEVBQUU7WUFDbkIsT0FBTyxJQUFJLENBQUM7U0FDWjtRQUVELE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDN0UsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN6QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRXpDLE1BQU0sZUFBZSxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUU7WUFFN0QsNkNBQTZDO1lBQzdDLElBQUksY0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDbEMsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLGNBQWMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDL0Q7WUFFRCx1Q0FBdUM7WUFDdkMsSUFBSSxjQUFjLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNuQyxPQUFPLFFBQVEsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUM7YUFDekM7WUFFRCxtREFBbUQ7WUFDbkQsT0FBTyxjQUFjLElBQUksUUFBUSxDQUFDO1FBQ25DLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxDQUFDLENBQUMsZUFBZSxDQUFDO0lBQzFCLENBQUM7SUFFTyxVQUFVLENBQUMsYUFBNkIsRUFBRSxJQUFVLEVBQUUsTUFBb0I7UUFFakYsTUFBTSxZQUFZLEdBQUcsSUFBb0IsQ0FBQztRQUMxQyxZQUFZLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUU3QixhQUFhLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ2xDLENBQUM7K0dBdkVXLGtCQUFrQjttSEFBbEIsa0JBQWtCOzs0RkFBbEIsa0JBQWtCO2tCQUQ5QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBGaWxlU2VsZWN0UmVzdWx0IHtcclxuXHJcblx0LyoqIFRoZSBhZGRlZCBmaWxlcywgZW1pdHRlZCBpbiB0aGUgZmlsZXNBZGRlZCBldmVudC4gKi9cclxuXHRhZGRlZEZpbGVzOiBGaWxlW107XHJcblxyXG5cdC8qKiBUaGUgcmVqZWN0ZWQgZmlsZXMsIGVtaXR0ZWQgaW4gdGhlIGZpbGVzUmVqZWN0ZWQgZXZlbnQuICovXHJcblx0cmVqZWN0ZWRGaWxlczogUmVqZWN0ZWRGaWxlW107XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUmVqZWN0ZWRGaWxlIGV4dGVuZHMgRmlsZSB7XHJcblxyXG5cdC8qKiBUaGUgcmVhc29uIHRoZSBmaWxlIHdhcyByZWplY3RlZC4gKi9cclxuXHRyZWFzb24/OiBSZWplY3RSZWFzb247XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFJlamVjdFJlYXNvbiA9ICd0eXBlJyB8ICdzaXplJyB8ICdub19tdWx0aXBsZSc7XHJcblxyXG4vKipcclxuICogVGhpcyBzZXJ2aWNlIGNvbnRhaW5zIHRoZSBmaWx0ZXJpbmcgbG9naWMgdG8gYmUgYXBwbGllZCB0b1xyXG4gKiBhbnkgZHJvcHBlZCBvciBzZWxlY3RlZCBmaWxlLiBJZiBhIGZpbGUgbWF0Y2hlcyBhbGwgY3JpdGVyaWFcclxuICogbGlrZSBtYXhpbXVtIHNpemUgb3IgYWNjZXB0IHR5cGUsIGl0IHdpbGwgYmUgZW1pdHRlZCBpbiB0aGVcclxuICogYWRkZWRGaWxlcyBhcnJheSwgb3RoZXJ3aXNlIGluIHRoZSByZWplY3RlZEZpbGVzIGFycmF5LlxyXG4gKi9cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgTmd4RHJvcHpvbmVTZXJ2aWNlIHtcclxuXHJcblx0cGFyc2VGaWxlTGlzdChmaWxlczogRmlsZUxpc3QsIGFjY2VwdDogc3RyaW5nLCBtYXhGaWxlU2l6ZTogbnVtYmVyLCBtdWx0aXBsZTogYm9vbGVhbik6IEZpbGVTZWxlY3RSZXN1bHQge1xyXG5cclxuXHRcdGNvbnN0IGFkZGVkRmlsZXM6IEZpbGVbXSA9IFtdO1xyXG5cdFx0Y29uc3QgcmVqZWN0ZWRGaWxlczogUmVqZWN0ZWRGaWxlW10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGZpbGVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGNvbnN0IGZpbGUgPSBmaWxlcy5pdGVtKGkpO1xyXG5cclxuXHRcdFx0aWYgKCF0aGlzLmlzQWNjZXB0ZWQoZmlsZSwgYWNjZXB0KSkge1xyXG5cdFx0XHRcdHRoaXMucmVqZWN0RmlsZShyZWplY3RlZEZpbGVzLCBmaWxlLCAndHlwZScpO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAobWF4RmlsZVNpemUgJiYgZmlsZS5zaXplID4gbWF4RmlsZVNpemUpIHtcclxuXHRcdFx0XHR0aGlzLnJlamVjdEZpbGUocmVqZWN0ZWRGaWxlcywgZmlsZSwgJ3NpemUnKTtcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKCFtdWx0aXBsZSAmJiBhZGRlZEZpbGVzLmxlbmd0aCA+PSAxKSB7XHJcblx0XHRcdFx0dGhpcy5yZWplY3RGaWxlKHJlamVjdGVkRmlsZXMsIGZpbGUsICdub19tdWx0aXBsZScpO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRhZGRlZEZpbGVzLnB1c2goZmlsZSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgcmVzdWx0OiBGaWxlU2VsZWN0UmVzdWx0ID0ge1xyXG5cdFx0XHRhZGRlZEZpbGVzLFxyXG5cdFx0XHRyZWplY3RlZEZpbGVzXHJcblx0XHR9O1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGlzQWNjZXB0ZWQoZmlsZTogRmlsZSwgYWNjZXB0OiBzdHJpbmcpOiBib29sZWFuIHtcclxuXHJcblx0XHRpZiAoYWNjZXB0ID09PSAnKicpIHtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgYWNjZXB0RmlsZXR5cGVzID0gYWNjZXB0LnNwbGl0KCcsJykubWFwKGl0ID0+IGl0LnRvTG93ZXJDYXNlKCkudHJpbSgpKTtcclxuXHRcdGNvbnN0IGZpbGV0eXBlID0gZmlsZS50eXBlLnRvTG93ZXJDYXNlKCk7XHJcblx0XHRjb25zdCBmaWxlbmFtZSA9IGZpbGUubmFtZS50b0xvd2VyQ2FzZSgpO1xyXG5cclxuXHRcdGNvbnN0IG1hdGNoZWRGaWxlVHlwZSA9IGFjY2VwdEZpbGV0eXBlcy5maW5kKGFjY2VwdEZpbGV0eXBlID0+IHtcclxuXHJcblx0XHRcdC8vIGNoZWNrIGZvciB3aWxkY2FyZCBtaW1ldHlwZSAoZS5nLiBpbWFnZS8qKVxyXG5cdFx0XHRpZiAoYWNjZXB0RmlsZXR5cGUuZW5kc1dpdGgoJy8qJykpIHtcclxuXHRcdFx0XHRyZXR1cm4gZmlsZXR5cGUuc3BsaXQoJy8nKVswXSA9PT0gYWNjZXB0RmlsZXR5cGUuc3BsaXQoJy8nKVswXTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gY2hlY2sgZm9yIGZpbGUgZXh0ZW5zaW9uIChlLmcuIC5jc3YpXHJcblx0XHRcdGlmIChhY2NlcHRGaWxldHlwZS5zdGFydHNXaXRoKFwiLlwiKSkge1xyXG5cdFx0XHRcdHJldHVybiBmaWxlbmFtZS5lbmRzV2l0aChhY2NlcHRGaWxldHlwZSk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIGNoZWNrIGZvciBleGFjdCBtaW1ldHlwZSBtYXRjaCAoZS5nLiBpbWFnZS9qcGVnKVxyXG5cdFx0XHRyZXR1cm4gYWNjZXB0RmlsZXR5cGUgPT0gZmlsZXR5cGU7XHJcblx0XHR9KTtcclxuXHJcblx0XHRyZXR1cm4gISFtYXRjaGVkRmlsZVR5cGU7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHJlamVjdEZpbGUocmVqZWN0ZWRGaWxlczogUmVqZWN0ZWRGaWxlW10sIGZpbGU6IEZpbGUsIHJlYXNvbjogUmVqZWN0UmVhc29uKSB7XHJcblxyXG5cdFx0Y29uc3QgcmVqZWN0ZWRGaWxlID0gZmlsZSBhcyBSZWplY3RlZEZpbGU7XHJcblx0XHRyZWplY3RlZEZpbGUucmVhc29uID0gcmVhc29uO1xyXG5cclxuXHRcdHJlamVjdGVkRmlsZXMucHVzaChyZWplY3RlZEZpbGUpO1xyXG5cdH1cclxufVxyXG4iXX0=