@rpldy/uploader
Version:
the processing and queuing engine for react-uploady
59 lines • 2.28 kB
JavaScript
import { FILE_STATES, logger } from "@rpldy/shared";
import { UPLOADER_EVENTS, ITEM_FINALIZE_STATES } from "../consts";
import { cleanUpFinishedBatches, incrementBatchFinishedCounter, getBatchDataFromItemId } from "./batchHelpers";
import { finalizeItem } from "./itemHelpers";
export const FILE_STATE_TO_EVENT_MAP = {
[FILE_STATES.PENDING.valueOf()]: null,
[FILE_STATES.ADDED.valueOf()]: UPLOADER_EVENTS.ITEM_START,
[FILE_STATES.FINISHED.valueOf()]: UPLOADER_EVENTS.ITEM_FINISH,
[FILE_STATES.ERROR.valueOf()]: UPLOADER_EVENTS.ITEM_ERROR,
[FILE_STATES.CANCELLED.valueOf()]: UPLOADER_EVENTS.ITEM_CANCEL,
[FILE_STATES.ABORTED.valueOf()]: UPLOADER_EVENTS.ITEM_ABORT,
[FILE_STATES.UPLOADING.valueOf()]: UPLOADER_EVENTS.ITEM_PROGRESS
};
const getIsFinalized = item => !!~ITEM_FINALIZE_STATES.indexOf(item.state);
const processFinishedRequest = (queue, finishedData, next) => {
finishedData.forEach(itemData => {
const state = queue.getState();
const {
id,
info
} = itemData;
logger.debugLog("uploader.processor.queue: request finished for item - ", {
id,
info
});
if (state.items[id]) {
queue.updateState(state => {
const item = state.items[id];
item.state = info.state;
item.uploadResponse = info.response;
item.uploadStatus = info.status;
if (getIsFinalized(item)) {
delete state.aborts[id];
}
});
const item = queue.getState().items[id];
if (info.state === FILE_STATES.FINISHED && item.completed < 100) {
const size = item.file?.size || 0;
queue.handleItemProgress(item, 100, size, size);
}
const {
itemBatchOptions
} = getBatchDataFromItemId(queue, id);
const batchOptions = itemBatchOptions[id];
const itemState = item.state.valueOf();
if (FILE_STATE_TO_EVENT_MAP[itemState]) {
queue.trigger(FILE_STATE_TO_EVENT_MAP[itemState], item, batchOptions);
}
if (getIsFinalized(item)) {
incrementBatchFinishedCounter(queue, item.batchId);
queue.trigger(UPLOADER_EVENTS.ITEM_FINALIZE, item, batchOptions);
}
}
finalizeItem(queue, id);
});
cleanUpFinishedBatches(queue);
next(queue);
};
export default processFinishedRequest;