@gravity-ui/uikit
Version:
Gravity UI base styling and components
52 lines (51 loc) • 1.78 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.FILE_REJECTION_REASONS = void 0;
exports.getSeparatedItems = getSeparatedItems;
exports.FILE_REJECTION_REASONS = {
INVALID_TYPE: 'invalid-type',
TOO_MANY_FILES: 'too-many-files',
};
function typeMatchesPattern(actualMimeType, expectedMimeTypePattern) {
const actualMimeTypeParts = actualMimeType.split('/');
if (actualMimeTypeParts.length !== 2) {
return false;
}
const [actualType] = actualMimeTypeParts;
const [expectedType, expectedSubtype] = expectedMimeTypePattern.split('/');
if (expectedSubtype === '*') {
return actualType === expectedType;
}
return actualMimeType === expectedMimeTypePattern;
}
function getItemInvalidType(item, { accept }) {
const reasons = [];
if (accept?.length && !accept.some((pattern) => typeMatchesPattern(item.type, pattern))) {
reasons.push(exports.FILE_REJECTION_REASONS.INVALID_TYPE);
}
return reasons;
}
function getSeparatedItems(dataTransfer, options) {
const items = Array.from(dataTransfer.items);
const accepted = [];
const rejected = [];
for (const item of items) {
const invalidType = getItemInvalidType(item, options);
const tooManyFiles = !options.multiple && accepted.length === 1;
if (invalidType.length || tooManyFiles) {
const reasons = [...invalidType];
if (tooManyFiles) {
reasons.push(exports.FILE_REJECTION_REASONS.TOO_MANY_FILES);
}
rejected.push({
item,
reasons,
});
}
else {
accepted.push(item);
}
}
return { accepted, rejected };
}
//# sourceMappingURL=utils.js.map