@rpldy/uploader
Version:
the processing and queuing engine for react-uploady
56 lines (55 loc) • 2.56 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _shared = require("@rpldy/shared");
var _lifeEvents = _interopRequireDefault(require("@rpldy/life-events"));
var _sender = _interopRequireDefault(require("@rpldy/sender"));
var _consts = require("./consts");
var _defaults = require("./defaults");
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
const reportItemsProgress = (items, completed, loaded, total, trigger) => {
items.forEach(item => {
_shared.logger.debugLog(`uploady.uploader.processor: file: ${item.id} progress event: loaded(${loaded}) - completed(${completed})`);
trigger(_consts.SENDER_EVENTS.ITEM_PROGRESS, item, completed, loaded, total);
});
};
const onItemUploadProgress = (items, batch, e, trigger) => {
const completed = Math.min(e.loaded / e.total * 100, 100),
completedPerItem = completed / items.length,
loadedAverage = e.loaded / items.length;
reportItemsProgress(items, completedPerItem, loadedAverage, e.total, trigger);
trigger(_consts.SENDER_EVENTS.BATCH_PROGRESS, batch);
};
const createBatchItemsSender = () => {
const {
trigger,
target: sender
} = (0, _lifeEvents.default)({
send: (items, batch, batchOptions) => {
const destination = batchOptions.destination,
url = destination?.url;
const throttledProgress = (0, _shared.throttle)(e => onItemUploadProgress(items, batch, e, trigger), _consts.PROGRESS_DELAY, true);
const send = (0, _shared.isFunction)(batchOptions.send) ? batchOptions.send : _sender.default;
return send(items, url, {
method: destination?.method || batchOptions.method || _defaults.DEFAULT_OPTIONS.method,
paramName: destination?.filesParamName || batchOptions.inputFieldName || _defaults.DEFAULT_PARAM_NAME,
params: {
...batchOptions.params,
...destination?.params
},
forceJsonResponse: batchOptions.forceJsonResponse,
withCredentials: batchOptions.withCredentials,
formatGroupParamName: batchOptions.formatGroupParamName,
headers: destination?.headers,
sendWithFormData: batchOptions.sendWithFormData,
formatServerResponse: batchOptions.formatServerResponse,
formDataAllowUndefined: batchOptions.formDataAllowUndefined,
isSuccessfulCall: batchOptions.isSuccessfulCall
}, throttledProgress);
}
}, Object.values(_consts.SENDER_EVENTS));
return sender;
};
var _default = exports.default = createBatchItemsSender;