@vipstorage/material-file-input
Version:
Angular Material File Input
29 lines • 3.25 kB
JavaScript
/**
* Validator for size of file
* @param max Max of size of file (in bytes)
*/
export function MaxSizeValidator(max) {
return (ctrl) => {
max = Number(max);
if (isNaN(max)) {
throw 'MaxSizeValidator: max of size of file is invalid';
}
if (!ctrl.value)
return null;
let files = ctrl.value;
if (!Array.isArray(ctrl.value)) {
files = [ctrl.value];
}
if (!files.length)
return null;
const add = (a, b) => a + b;
const sumSize = files.map(x => x.size).reduce(add);
if (sumSize > max) {
return {
maxSize: true
};
}
return null;
};
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF4LXNpemUudmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZmlsZS1pbnB1dC9zcmMvbGliL3ZhbGlkYXRvcnMvbWF4LXNpemUudmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBOzs7R0FHRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxHQUFXO0lBQ3hDLE9BQU8sQ0FBQyxJQUFxQixFQUEyQixFQUFFO1FBQ3RELEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEIsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDWixNQUFNLGtEQUFrRCxDQUFDO1NBQzVEO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDN0IsSUFBSSxLQUFLLEdBQVcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUMvQixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDNUIsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3hCO1FBQ0QsSUFBRyxDQUFDLEtBQUssQ0FBQyxNQUFNO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDOUIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFNLEVBQUUsQ0FBTSxFQUFVLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25ELElBQUksT0FBTyxHQUFHLEdBQUcsRUFBRTtZQUNmLE9BQU87Z0JBQ0gsT0FBTyxFQUFFLElBQUk7YUFDaEIsQ0FBQztTQUNMO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQyxDQUFBO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgVmFsaWRhdG9yRm4sIFZhbGlkYXRpb25FcnJvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbi8qKlxuICogVmFsaWRhdG9yIGZvciBzaXplIG9mIGZpbGVcbiAqIEBwYXJhbSBtYXggTWF4IG9mIHNpemUgb2YgZmlsZSAoaW4gYnl0ZXMpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBNYXhTaXplVmFsaWRhdG9yKG1heDogbnVtYmVyKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoY3RybDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgICBtYXggPSBOdW1iZXIobWF4KTtcbiAgICAgICAgaWYgKGlzTmFOKG1heCkpIHtcbiAgICAgICAgICAgIHRocm93ICdNYXhTaXplVmFsaWRhdG9yOiBtYXggb2Ygc2l6ZSBvZiBmaWxlIGlzIGludmFsaWQnO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY3RybC52YWx1ZSkgcmV0dXJuIG51bGw7XG4gICAgICAgIGxldCBmaWxlczogRmlsZVtdID0gY3RybC52YWx1ZTtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGN0cmwudmFsdWUpKSB7XG4gICAgICAgICAgICBmaWxlcyA9IFtjdHJsLnZhbHVlXTtcbiAgICAgICAgfVxuICAgICAgICBpZighZmlsZXMubGVuZ3RoKSByZXR1cm4gbnVsbDtcbiAgICAgICAgY29uc3QgYWRkID0gKGE6IGFueSwgYjogYW55KTogbnVtYmVyID0+IGEgKyBiO1xuICAgICAgICBjb25zdCBzdW1TaXplID0gZmlsZXMubWFwKHggPT4geC5zaXplKS5yZWR1Y2UoYWRkKTtcbiAgICAgICAgaWYgKHN1bVNpemUgPiBtYXgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbWF4U2l6ZTogdHJ1ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59Il19