@rpldy/uploader
Version:
the processing and queuing engine for react-uploady
44 lines • 1.89 kB
JavaScript
import { invariant, BATCH_STATES } from "@rpldy/shared";
import { UPLOADER_EVENTS } from "../consts";
import processFinishedRequest from "./processFinishedRequest";
import processQueueNext from "./processQueueNext";
import { getIsBatchFinalized, finalizeBatch } from "./batchHelpers";
const getFinalizeAbortedItem = queue => (id, data) => processFinishedRequest(queue, [{
id,
info: data
}], processQueueNext);
const processAbortItem = (queue, id) => {
const abortItemMethod = queue.getOptions().abortItem;
invariant(!!abortItemMethod, "Abort Item method not provided yet abortItem was called");
const state = queue.getState();
return abortItemMethod(id, state.items, state.aborts, getFinalizeAbortedItem(queue));
};
const processAbortBatch = (queue, id) => {
const abortBatchMethod = queue.getOptions().abortBatch;
invariant(!!abortBatchMethod, "Abort Batch method not provided yet abortItem was called");
const state = queue.getState(),
batchData = state.batches[id],
batch = batchData?.batch;
if (batch && !getIsBatchFinalized(batch)) {
finalizeBatch(queue, id, UPLOADER_EVENTS.BATCH_ABORT, BATCH_STATES.ABORTED);
const {
isFast
} = abortBatchMethod(batch, batchData.batchOptions, state.aborts, state.itemQueue, getFinalizeAbortedItem(queue), queue.getOptions());
if (isFast) {
queue.clearBatchUploads(batch.id);
}
}
};
const processAbortAll = queue => {
const abortAllMethod = queue.getOptions().abortAll;
invariant(!!abortAllMethod, "Abort All method not provided yet abortAll was called");
queue.trigger(UPLOADER_EVENTS.ALL_ABORT);
const state = queue.getState();
const {
isFast
} = abortAllMethod(state.items, state.aborts, state.itemQueue, getFinalizeAbortedItem(queue), queue.getOptions());
if (isFast) {
queue.clearAllUploads();
}
};
export { processAbortItem, processAbortBatch, processAbortAll };