@wordpress/media-utils
Version:
WordPress Media Upload Utils.
128 lines (126 loc) • 4.25 kB
JavaScript
;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// packages/media-utils/src/components/media-upload-modal/use-upload-status.ts
var use_upload_status_exports = {};
__export(use_upload_status_exports, {
useUploadStatus: () => useUploadStatus
});
module.exports = __toCommonJS(use_upload_status_exports);
var import_element = require("@wordpress/element");
var import_blob = require("@wordpress/blob");
var import_upload_error = require("../../utils/upload-error.cjs");
var idCounter = 0;
var batchIdCounter = 0;
function useUploadStatus({
onBatchComplete
} = {}) {
const [uploadingFiles, setUploadingFiles] = (0, import_element.useState)(
[]
);
const clearCompleted = (0, import_element.useCallback)(() => {
setUploadingFiles(
(prev) => prev.filter((item) => item.status !== "uploaded")
);
}, []);
const dismissError = (0, import_element.useCallback)((fileId) => {
setUploadingFiles(
(prev) => prev.filter((item) => item.id !== fileId)
);
}, []);
const registerBatch = (0, import_element.useCallback)(
(files) => {
const batchId = String(++batchIdCounter);
const batchSize = files.length;
const newEntries = files.map((file) => ({
id: String(++idCounter),
batchId,
name: file.name,
status: "uploading"
}));
setUploadingFiles((prev) => [...prev, ...newEntries]);
let successCount = 0;
let errorCount = 0;
let batchDone = false;
let successAttachments = [];
const completeBatchIfDone = () => {
if (batchDone || successCount + errorCount < batchSize) {
return;
}
batchDone = true;
setUploadingFiles(
(prev) => prev.map(
(item) => item.batchId === batchId && item.status === "uploading" ? {
...item,
status: "uploaded"
} : item
)
);
onBatchComplete?.(successAttachments);
};
const onFileChange = (attachments) => {
if (batchDone) {
return;
}
const allReal = attachments.every(
(attachment) => attachment.id && attachment.url && !(0, import_blob.isBlobURL)(attachment.url)
);
if (!allReal) {
return;
}
successCount = attachments.length;
successAttachments = attachments;
completeBatchIfDone();
};
const onError = (error) => {
const fileName = error instanceof import_upload_error.UploadError ? error.file.name : void 0;
setUploadingFiles((prev) => {
let matched = false;
return prev.map((item) => {
if (!matched && item.batchId === batchId && item.status === "uploading" && (!fileName || item.name === fileName)) {
matched = true;
return {
...item,
status: "error",
error: error.message
};
}
return item;
});
});
errorCount++;
completeBatchIfDone();
};
return { onFileChange, onError };
},
[onBatchComplete]
);
const allComplete = uploadingFiles.length > 0 && uploadingFiles.every((item) => item.status !== "uploading");
return {
uploadingFiles,
registerBatch,
dismissError,
clearCompleted,
allComplete
};
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
useUploadStatus
});
//# sourceMappingURL=use-upload-status.cjs.map