/** * Check if the provided file type should be accepted by the input with accept attribute. * https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input#attr-accept * * Inspired by https://github.com/enyo/dropzone * * @param file {File} https://developer.mozilla.org/en-US/docs/Web/API/File * @param acceptedFiles {string} * @returns {boolean} */ import 'core-js/fn/array/some'; import 'core-js/fn/string/ends-with'; export default function(file, acceptedFiles) { if (file && acceptedFiles) { const acceptedFilesArray = (Array.isArray(acceptedFiles) ? acceptedFiles : acceptedFiles.split(',')); const fileName = file.name || ''; const mimeType = file.type || ''; const baseMimeType = mimeType.replace(/\/.*$/, ''); return acceptedFilesArray.some(type => { const validType = type.trim(); if (validType.charAt(0) === '.') { return fileName.toLowerCase().endsWith(validType.toLowerCase()); } else if (/\/\*$/.test(validType)) { // This is something like a image/* mime type return baseMimeType === validType.replace(/\/.*$/, ''); } return mimeType === validType; }); } return true; }