ngx-dropzone-ivy
Version:
A highly configurable dropzone component for Angular.
67 lines • 9.43 kB
JavaScript
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=