UNPKG

@wordpress/editor

Version:
169 lines (167 loc) 6.27 kB
"use strict"; 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