UNPKG

@rpldy/uploader

Version:

the processing and queuing engine for react-uploady

32 lines 1.35 kB
import { BATCH_STATES, createBatchItem, getIsBatchItem, isPromise } from "@rpldy/shared"; import { DEFAULT_FILTER } from "./defaults"; import { getIsFileList } from "./utils"; let bCounter = 0; const processFiles = (batchId, files, isPending, fileFilter) => { const all = fileFilter ? Array.prototype.map.call(files, f => getIsBatchItem(f) ? f.file || f.url : f) : []; return Promise.all(Array.prototype.map.call(files, (f, index) => { const filterResult = (fileFilter || DEFAULT_FILTER)(all[index], index, all); return isPromise(filterResult) ? filterResult.then(result => !!result && f) : !!filterResult && f; })).then(filtered => filtered.filter(Boolean).map(f => createBatchItem(f, batchId, isPending))); }; const createBatch = (files, uploaderId, options) => { bCounter += 1; const id = `batch-${bCounter}`; const isFileList = getIsFileList(files); const usedFiles = Array.isArray(files) || isFileList ? files : [files]; const isPending = !options.autoUpload; return processFiles(id, usedFiles, isPending, options.fileFilter).then(items => { return { id, uploaderId, items, state: isPending ? BATCH_STATES.PENDING : BATCH_STATES.ADDED, completed: 0, loaded: 0, total: 0, orgItemCount: items.length, additionalInfo: null }; }); }; export default createBatch;