@wordpress/editor
Version:
Enhanced block editor for WordPress posts.
156 lines (154 loc) • 6.1 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/post-actions/set-as-posts-page.js
var set_as_posts_page_exports = {};
__export(set_as_posts_page_exports, {
useSetAsPostsPageAction: () => useSetAsPostsPageAction
});
module.exports = __toCommonJS(set_as_posts_page_exports);
var import_i18n = require("@wordpress/i18n");
var import_element = require("@wordpress/element");
var import_components = require("@wordpress/components");
var import_data = require("@wordpress/data");
var import_core_data = require("@wordpress/core-data");
var import_notices = require("@wordpress/notices");
var import_get_item_title = require("../../utils/get-item-title.cjs");
var import_jsx_runtime = require("react/jsx-runtime");
var SetAsPostsPageModal = ({ items, closeModal }) => {
const [item] = items;
const pageTitle = (0, import_get_item_title.getItemTitle)(item);
const { currentPostsPage, isPageForPostsSet, isSaving } = (0, import_data.useSelect)(
(select) => {
const { getEntityRecord, isSavingEntityRecord } = select(import_core_data.store);
const siteSettings = getEntityRecord("root", "site");
const currentPostsPageItem = getEntityRecord(
"postType",
"page",
siteSettings?.page_for_posts
);
return {
currentPostsPage: currentPostsPageItem,
isPageForPostsSet: siteSettings?.page_for_posts !== 0,
isSaving: isSavingEntityRecord("root", "site")
};
}
);
const { saveEntityRecord } = (0, import_data.useDispatch)(import_core_data.store);
const { createSuccessNotice, createErrorNotice } = (0, import_data.useDispatch)(import_notices.store);
async function onSetPageAsPostsPage(event) {
event.preventDefault();
try {
await saveEntityRecord("root", "site", {
page_for_posts: item.id,
show_on_front: "page"
});
createSuccessNotice((0, import_i18n.__)("Posts page updated."), {
type: "snackbar"
});
} catch (error) {
const errorMessage = error.message && error.code !== "unknown_error" ? error.message : (0, import_i18n.__)("An error occurred while setting the posts page.");
createErrorNotice(errorMessage, { type: "snackbar" });
} finally {
closeModal?.();
}
}
const modalWarning = isPageForPostsSet && currentPostsPage ? (0, import_i18n.sprintf)(
// translators: %s: title of the current posts page.
(0, import_i18n.__)('This will replace the current posts page: "%s"'),
(0, import_get_item_title.getItemTitle)(currentPostsPage)
) : (0, import_i18n.__)("This page will show the latest posts.");
const modalText = (0, import_i18n.sprintf)(
// translators: %1$s: title of the page to be set as the posts page, %2$s: posts page replacement warning message.
(0, import_i18n.__)('Set "%1$s" as the posts page? %2$s'),
pageTitle,
modalWarning
);
const modalButtonLabel = (0, import_i18n.__)("Set posts page");
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("form", { onSubmit: onSetPageAsPostsPage, children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_components.__experimentalVStack, { spacing: "5", children: [
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components.__experimentalText, { children: modalText }),
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_components.__experimentalHStack, { justify: "right", children: [
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
import_components.Button,
{
__next40pxDefaultSize: true,
variant: "tertiary",
onClick: () => {
closeModal?.();
},
disabled: isSaving,
accessibleWhenDisabled: true,
children: (0, import_i18n.__)("Cancel")
}
),
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
import_components.Button,
{
__next40pxDefaultSize: true,
variant: "primary",
type: "submit",
disabled: isSaving,
accessibleWhenDisabled: true,
children: modalButtonLabel
}
)
] })
] }) });
};
var useSetAsPostsPageAction = () => {
const { pageOnFront, pageForPosts } = (0, import_data.useSelect)((select) => {
const { getEntityRecord, canUser } = select(import_core_data.store);
const siteSettings = canUser("read", {
kind: "root",
name: "site"
}) ? getEntityRecord("root", "site") : void 0;
return {
pageOnFront: siteSettings?.page_on_front,
pageForPosts: siteSettings?.page_for_posts
};
});
return (0, import_element.useMemo)(
() => ({
id: "set-as-posts-page",
label: (0, import_i18n.__)("Set as posts page"),
isEligible(post) {
if (post.status !== "publish") {
return false;
}
if (post.type !== "page") {
return false;
}
if (pageOnFront === post.id) {
return false;
}
if (pageForPosts === post.id) {
return false;
}
return true;
},
modalFocusOnMount: "firstContentElement",
RenderModal: SetAsPostsPageModal
}),
[pageForPosts, pageOnFront]
);
};
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
useSetAsPostsPageAction
});
//# sourceMappingURL=set-as-posts-page.cjs.map