UNPKG

@wordpress/editor

Version:
202 lines (200 loc) 7.7 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/post-revisions-timeline/index.js var post_revisions_timeline_exports = {}; __export(post_revisions_timeline_exports, { default: () => PostRevisionsTimeline }); module.exports = __toCommonJS(post_revisions_timeline_exports); var import_data = require("@wordpress/data"); var import_core_data = require("@wordpress/core-data"); var import_dataviews = require("@wordpress/dataviews"); var import_date = require("@wordpress/date"); var import_element = require("@wordpress/element"); var import_i18n = require("@wordpress/i18n"); var import_fields = require("@wordpress/fields"); var import_ui = require("@wordpress/ui"); var import_store = require("../../store/index.cjs"); var import_lock_unlock = require("../../lock-unlock.cjs"); var import_post_content_information = require("../post-content-information/index.cjs"); var import_jsx_runtime = require("react/jsx-runtime"); var PAGE_SIZE = 10; var EMPTY_ARRAY = []; var defaultLayouts = { pickerActivity: true }; var baseView = { type: "pickerActivity", titleField: "date", descriptionField: "details", fields: ["author"], layout: { density: "compact" }, page: 1, perPage: PAGE_SIZE }; var DAY_IN_MILLISECONDS = 864e5; function getDisplayDate(value) { const dateNowInMs = (0, import_date.getDate)(null).getTime(); const date = (0, import_date.getDate)(value ?? null); return dateNowInMs - date.getTime() > DAY_IN_MILLISECONDS ? (0, import_date.dateI18n)((0, import_date.getSettings)().formats.datetimeAbbreviated, date) : (0, import_date.humanTimeDiff)(date); } function isAutosaveRevision(item) { return item.slug?.endsWith("-autosave-v1") ?? false; } function RevisionBadges({ item }) { if (!isAutosaveRevision(item)) { return null; } return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ui.Badge, { intent: "none", children: (0, import_i18n.__)("Autosave") }); } function PostRevisionsTimeline() { const { setCurrentRevisionId } = (0, import_lock_unlock.unlock)((0, import_data.useDispatch)(import_store.store)); const [view, setView] = (0, import_element.useState)(baseView); const { revisions, revisionKey, currentRevisionId } = (0, import_data.useSelect)( (select) => { const { getCurrentPostType } = select(import_store.store); const { getCurrentRevisionId: _getCurrentRevisionId, getRevisionPage, getPageRevisions } = (0, import_lock_unlock.unlock)(select(import_store.store)); const { getEntityConfig } = select(import_core_data.store); const _postType = getCurrentPostType(); const entityConfig = getEntityConfig("postType", _postType); const _revisionKey = entityConfig?.revisionKey || "id"; const _currentRevisionId = _getCurrentRevisionId(); return { // Same desc-ordered window the header slider renders (warm cache). revisions: getPageRevisions(getRevisionPage()), revisionKey: _revisionKey, currentRevisionId: _currentRevisionId }; }, [] ); const isLoading = !revisions; const fields = (0, import_element.useMemo)( () => [ { id: "date", label: (0, import_i18n.__)("Date"), // Return the humanized label the row renders so the picker // option's accessible name announces e.g. "5 minutes ago" // instead of the raw ISO timestamp. getValue: ({ item }) => { const displayDate = getDisplayDate(item.date); if (!isAutosaveRevision(item)) { return displayDate; } return (0, import_i18n.sprintf)( /* translators: 1: revision date, 2: revision type. */ (0, import_i18n.__)("%1$s, %2$s"), displayDate, (0, import_i18n.__)("Autosave") ); }, render: ({ item }) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_ui.Stack, { direction: "row", align: "center", gap: "sm", children: [ /* @__PURE__ */ (0, import_jsx_runtime.jsx)( import_ui.Text, { variant: "heading-sm", render: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("time", { dateTime: item.date }), children: getDisplayDate(item.date) } ), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(RevisionBadges, { item }) ] }), enableSorting: false, enableHiding: false }, import_fields.authorField, { id: "details", label: (0, import_i18n.__)("Details"), render: ({ item }) => { if (String(item[revisionKey]) !== String(currentRevisionId)) { return null; } return /* @__PURE__ */ (0, import_jsx_runtime.jsx)( import_post_content_information.PostContentInformationUI, { postContent: item.content?.raw } ); }, enableSorting: false, enableHiding: false } ], [revisionKey, currentRevisionId] ); const { data: shownRevisions, paginationInfo } = (0, import_element.useMemo)( () => (0, import_dataviews.filterSortAndPaginate)(revisions || EMPTY_ARRAY, view, fields), [revisions, view, fields] ); (0, import_element.useEffect)(() => { if (!currentRevisionId || !revisions) { return; } const index = revisions.findIndex( (r) => String(r[revisionKey]) === String(currentRevisionId) ); if (index < 0) { return; } const page = Math.floor(index / view.perPage) + 1; setView((v) => v.page === page ? v : { ...v, page }); }, [currentRevisionId, revisions, revisionKey, view.perPage]); const selection = (0, import_element.useMemo)( () => currentRevisionId ? [String(currentRevisionId)] : EMPTY_ARRAY, [currentRevisionId] ); const onChangeSelection = (0, import_element.useCallback)( (newSelection) => { if (newSelection.length === 0) { return; } const selectedId = newSelection[newSelection.length - 1]; setCurrentRevisionId(Number(selectedId)); }, [setCurrentRevisionId] ); const getItemId = (0, import_element.useCallback)( (item) => String(item[revisionKey]), [revisionKey] ); return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "editor-post-revisions-timeline", children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)( import_dataviews.DataViewsPicker, { view, onChangeView: setView, fields, data: shownRevisions, isLoading, paginationInfo, defaultLayouts, getItemId, selection, onChangeSelection, children: [ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_dataviews.DataViewsPicker.Layout, {}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_dataviews.DataViewsPicker.Footer, {}) ] } ) }); } //# sourceMappingURL=index.cjs.map