UNPKG

@dnb/eufemia

Version:

DNB Eufemia Design System UI Library

105 lines (104 loc) 4.79 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.BYTES_IN_A_MEGA_BYTE = void 0; exports.extendWithAbbreviation = extendWithAbbreviation; exports.getAcceptedFileTypes = getAcceptedFileTypes; exports.getFileTypeFromExtension = getFileTypeFromExtension; exports.hasPreferredMimeType = hasPreferredMimeType; exports.isArrayOfObjects = isArrayOfObjects; exports.isArrayOfStrings = isArrayOfStrings; exports.verifyFiles = verifyFiles; var _push = _interopRequireDefault(require("core-js-pure/stable/instance/push.js")); var _NumberUtils = require("../number-format/NumberUtils.js"); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } const BYTES_IN_A_MEGA_BYTE = exports.BYTES_IN_A_MEGA_BYTE = 1048576; function verifyFiles(files, context) { const { fileMaxSize, acceptedFileTypes, errorLargeFile, errorUnsupportedFile } = context; const getFileType = (file, listOfAcceptedFilesTypes) => { return hasPreferredMimeType(listOfAcceptedFilesTypes, file) ? file.type : getFileTypeFromExtension(file) || file.type; }; const handleSize = file => { const validateFileSize = (fileSize, maxFileSize) => { if (maxFileSize && fileSize / BYTES_IN_A_MEGA_BYTE > maxFileSize) { return String(errorLargeFile).replace('%size', (0, _NumberUtils.format)(maxFileSize).toString()); } return null; }; if (isArrayOfStrings(acceptedFileTypes) || acceptedFileTypes.length === 0 || !acceptedFileTypes) { return validateFileSize(file.size, fileMaxSize); } else if (isArrayOfObjects(acceptedFileTypes)) { const fileType = getFileType(file, getAcceptedFileTypesAsListOfStrings(acceptedFileTypes)); const acceptedFileTypeObj = acceptedFileTypes.find(item => { var _item$fileType; return (item === null || item === void 0 || (_item$fileType = item.fileType) === null || _item$fileType === void 0 ? void 0 : _item$fileType.toLowerCase()) === (fileType === null || fileType === void 0 ? void 0 : fileType.toLowerCase()); }); return validateFileSize(file.size, (acceptedFileTypeObj === null || acceptedFileTypeObj === void 0 ? void 0 : acceptedFileTypeObj.fileMaxSize) !== undefined ? acceptedFileTypeObj.fileMaxSize : fileMaxSize); } return null; }; const handleType = file => { if (acceptedFileTypes.length === 0) { return false; } const listOfAcceptedFilesTypes = getAcceptedFileTypesAsListOfStrings(acceptedFileTypes); const fileType = getFileType(file, listOfAcceptedFilesTypes); const foundType = extendWithAbbreviation(listOfAcceptedFilesTypes).some(type => { var _fileType$toLowerCase; return fileType === null || fileType === void 0 || (_fileType$toLowerCase = fileType.toLowerCase()) === null || _fileType$toLowerCase === void 0 ? void 0 : _fileType$toLowerCase.includes(type.toLowerCase()); }); return !foundType ? errorUnsupportedFile : null; }; const cleanedFiles = files.map(item => { const { file } = item; const errorMessage = handleSize(file) || handleType(file); if (errorMessage) { item.errorMessage = errorMessage; } return item; }); return cleanedFiles; } function getFileTypeFromExtension(file) { if (!file || !file.name) { return null; } return file.name.includes('.') && file.name.replace(/.*\.([^.]+)$/, '$1') || null; } function getAcceptedFileTypes(acceptedFileTypes) { return extendWithAbbreviation(getAcceptedFileTypesAsListOfStrings(acceptedFileTypes)).map(type => type.includes('/') ? type : `.${type}`).join(','); } function hasPreferredMimeType(acceptedFileTypes, file) { return file.type.split('/')[1] && (!(acceptedFileTypes !== null && acceptedFileTypes !== void 0 && acceptedFileTypes.length) || (acceptedFileTypes === null || acceptedFileTypes === void 0 ? void 0 : acceptedFileTypes.some(type => type.toLowerCase() === file.type.toLowerCase()))); } function getAcceptedFileTypesAsListOfStrings(acceptedFileTypes) { return isArrayOfStrings(acceptedFileTypes) ? acceptedFileTypes : acceptedFileTypes.map(obj => obj.fileType); } function isArrayOfStrings(arr) { return Array.isArray(arr) && arr.length > 0 && arr.every(i => typeof i === 'string'); } function isArrayOfObjects(arr) { return Array.isArray(arr) && arr.length > 0 && arr.every(i => typeof i === 'object'); } function extendWithAbbreviation(acceptedFileTypes, abbreviations = { jpg: 'jpeg' }) { const list = [...acceptedFileTypes]; const listSet = new Set(list); Object.entries(abbreviations).forEach(([type, abbr]) => { if (listSet.has(type) && !listSet.has(abbr)) { (0, _push.default)(list).call(list, abbr); listSet.add(abbr); } }); return list; } //# sourceMappingURL=UploadVerify.js.map