@rpldy/uploader
Version:
the processing and queuing engine for react-uploady
32 lines • 1.35 kB
JavaScript
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;