UNPKG

@gravity-ui/uikit

Version:

Gravity UI base styling and components

48 lines (47 loc) 1.61 kB
export const 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(FILE_REJECTION_REASONS.INVALID_TYPE); } return reasons; } export 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(FILE_REJECTION_REASONS.TOO_MANY_FILES); } rejected.push({ item, reasons, }); } else { accepted.push(item); } } return { accepted, rejected }; } //# sourceMappingURL=utils.js.map