UNPKG

@sanity/form-builder

Version:
76 lines (72 loc) 2.93 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.extractDroppedFiles = extractDroppedFiles; exports.extractPastedFiles = extractPastedFiles; var _flatten2 = _interopRequireDefault(require("lodash/flatten")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * Utilities for extracting files from dataTransfer in a predictable cross-browser fashion. * Also recursively extracts files from a directory * Inspired by https://github.com/component/normalized-upload */ function extractPastedFiles(dataTransfer) { if (dataTransfer.files && dataTransfer.files.length > 0) { return Promise.resolve(Array.from(dataTransfer.files || [])); } return normalizeItems(Array.from(dataTransfer.items || [])).then(_flatten2.default); } function extractDroppedFiles(dataTransfer) { var files = Array.from(dataTransfer.files || []); var items = Array.from(dataTransfer.items || []); if (files && files.length > 0) { return Promise.resolve(files); } return normalizeItems(items).then(_flatten2.default); } function toArray(v) { return v === null ? [] : [v]; } function normalizeItems(items) { return Promise.all(items.map(item => { // directory if (item.kind === 'file' && item.webkitGetAsEntry) { var entry; // Edge throws try { entry = item.webkitGetAsEntry(); } catch (err) { return toArray(item.getAsFile()); } if (!entry) { return []; } return entry.isDirectory ? walk(entry) : toArray(item.getAsFile()); } if (item.kind === 'file') { var _file = item.getAsFile(); return Promise.resolve(_file ? [_file] : []); } if (item.kind === 'string') { // We previously had support for reading datatransfer of strings here but decided to remove it since we don't handle it in higher up in the stack yet. // If one day we want to support data transfer from a string value (e.g. copy+paste from a field to another), an earlier // version of this file includes an implementation that uses DataTransferItem.getAsString to read the string value into a File console.warn('DataTransfer with kind="string" is currently not supported'); return Promise.resolve([]); } console.warn('Unknown DataTransferItem.kind: %s', item.kind); return Promise.resolve([]); })); } // Warning: experimental API: https://wicg.github.io/entries-api function walk(entry) { if (entry.isFile) { return new Promise((resolve, reject) => entry.file(resolve, reject)).then(file => [file]); } if (entry.isDirectory) { var dir = entry.createReader(); return new Promise((resolve, reject) => dir.readEntries(resolve, reject)).then(entries => entries.filter(entr => !entr.name.startsWith('.'))).then(entries => Promise.all(entries.map(walk)).then(_flatten2.default)); } return Promise.resolve([]); }