@wordpress/editor
Version:
Enhanced block editor for WordPress posts.
169 lines (167 loc) • 6.27 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/editor/src/components/upload-progress-snackbar/index.js
var upload_progress_snackbar_exports = {};
__export(upload_progress_snackbar_exports, {
UPLOAD_DONE: () => UPLOAD_DONE,
UPLOAD_SPINNER: () => UPLOAD_SPINNER,
default: () => UploadProgressSnackbar
});
module.exports = __toCommonJS(upload_progress_snackbar_exports);
var import_data = require("@wordpress/data");
var import_element = require("@wordpress/element");
var import_i18n = require("@wordpress/i18n");
var import_a11y = require("@wordpress/a11y");
var import_upload_media = require("@wordpress/upload-media");
var import_notices = require("@wordpress/notices");
var import_components = require("@wordpress/components");
var import_icons = require("@wordpress/icons");
var import_tracker = require("./tracker.cjs");
var import_jsx_runtime = require("react/jsx-runtime");
var NOTICE_ID = "upload-progress";
var COMPLETION_DISPLAY_MS = 3e3;
var MAX_FILENAME_LENGTH = 40;
function truncateFilename(filename) {
if (filename.length <= MAX_FILENAME_LENGTH) {
return filename;
}
const ellipsis = "…";
const visible = MAX_FILENAME_LENGTH - ellipsis.length;
const front = Math.ceil(visible / 2);
const back = Math.floor(visible / 2);
return filename.slice(0, front) + ellipsis + filename.slice(filename.length - back);
}
var UPLOAD_SPINNER = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
"span",
{
className: "editor-upload-progress-snackbar__spinner",
"aria-hidden": "true",
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components.Spinner, {})
}
);
var UPLOAD_DONE = /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "editor-upload-progress-snackbar__check", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components.Icon, { icon: import_icons.check }) });
function UploadProgressSnackbar() {
const items = (0, import_data.useSelect)(
(select) => select(import_upload_media.store).getItems(),
[]
);
const tracker = (0, import_tracker.useTracker)();
const csmOriginals = (0, import_element.useMemo)(
() => items.filter((item) => !item.parentId),
[items]
);
const csmRemaining = csmOriginals.length;
const trackedRemaining = tracker ? tracker.total - tracker.completed : 0;
const remaining = csmRemaining + trackedRemaining;
const sessionTotal = csmRemaining + (tracker ? tracker.total : 0);
const peakRef = (0, import_element.useRef)(0);
const { createNotice, removeNotice } = (0, import_data.useDispatch)(import_notices.store);
const dismissedRef = (0, import_element.useRef)(false);
const wasUploadingRef = (0, import_element.useRef)(false);
const completionTimeoutRef = (0, import_element.useRef)(null);
(0, import_element.useEffect)(() => {
return () => {
if (completionTimeoutRef.current) {
clearTimeout(completionTimeoutRef.current);
}
};
}, []);
(0, import_element.useEffect)(() => {
const isUploading = remaining > 0;
if (isUploading && !wasUploadingRef.current) {
dismissedRef.current = false;
(0, import_a11y.speak)((0, import_i18n.__)("Media upload started"), "polite");
if (completionTimeoutRef.current) {
clearTimeout(completionTimeoutRef.current);
completionTimeoutRef.current = null;
peakRef.current = 0;
}
} else if (!isUploading && wasUploadingRef.current) {
(0, import_a11y.speak)((0, import_i18n.__)("Media upload complete"), "polite");
if (!dismissedRef.current) {
createNotice("info", (0, import_i18n.__)("Upload complete"), {
id: NOTICE_ID,
type: "snackbar",
isDismissible: false,
explicitDismiss: false,
speak: false,
icon: UPLOAD_DONE,
onDismiss: () => {
dismissedRef.current = true;
}
});
completionTimeoutRef.current = setTimeout(() => {
removeNotice(NOTICE_ID);
completionTimeoutRef.current = null;
peakRef.current = 0;
}, COMPLETION_DISPLAY_MS);
} else {
peakRef.current = 0;
}
}
wasUploadingRef.current = isUploading;
if (!isUploading || dismissedRef.current) {
return;
}
if (sessionTotal > peakRef.current) {
peakRef.current = sessionTotal;
}
const total = peakRef.current;
const current = total - remaining + 1;
const filename = truncateFilename(
csmOriginals[0]?.sourceFile?.name || tracker?.pending[0] || (0, import_i18n.__)("Uploading")
);
const content = total === 1 ? (0, import_i18n.sprintf)(
/* translators: %s: filename. */
(0, import_i18n.__)("Uploading — %s"),
filename
) : (0, import_i18n.sprintf)(
/* translators: 1: current upload number, 2: total uploads, 3: filename. */
(0, import_i18n.__)("Uploading %1$d of %2$d — %3$s"),
current,
total,
filename
);
createNotice("info", content, {
id: NOTICE_ID,
type: "snackbar",
isDismissible: false,
explicitDismiss: true,
speak: false,
icon: UPLOAD_SPINNER,
onDismiss: () => {
dismissedRef.current = true;
}
});
}, [
remaining,
sessionTotal,
csmOriginals,
tracker,
createNotice,
removeNotice
]);
return null;
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
UPLOAD_DONE,
UPLOAD_SPINNER
});
//# sourceMappingURL=index.cjs.map