@wordpress/editor
Version:
Enhanced block editor for WordPress posts.
170 lines (164 loc) • 5.77 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useSetAsHomepageAction = void 0;
var _i18n = require("@wordpress/i18n");
var _element = require("@wordpress/element");
var _components = require("@wordpress/components");
var _data = require("@wordpress/data");
var _coreData = require("@wordpress/core-data");
var _notices = require("@wordpress/notices");
var _htmlEntities = require("@wordpress/html-entities");
var _jsxRuntime = require("react/jsx-runtime");
/**
* WordPress dependencies
*/
const getItemTitle = item => {
if (typeof item.title === 'string') {
return (0, _htmlEntities.decodeEntities)(item.title);
}
if (item.title && 'rendered' in item.title) {
return (0, _htmlEntities.decodeEntities)(item.title.rendered);
}
if (item.title && 'raw' in item.title) {
return (0, _htmlEntities.decodeEntities)(item.title.raw);
}
return '';
};
const SetAsHomepageModal = ({
items,
closeModal
}) => {
const [item] = items;
const pageTitle = getItemTitle(item);
const {
showOnFront,
currentHomePage,
isSaving
} = (0, _data.useSelect)(select => {
const {
getEntityRecord,
isSavingEntityRecord
} = select(_coreData.store);
const siteSettings = getEntityRecord('root', 'site');
const currentHomePageItem = getEntityRecord('postType', 'page', siteSettings?.page_on_front);
return {
showOnFront: siteSettings?.show_on_front,
currentHomePage: currentHomePageItem,
isSaving: isSavingEntityRecord('root', 'site')
};
});
const currentHomePageTitle = currentHomePage ? getItemTitle(currentHomePage) : '';
const {
saveEditedEntityRecord,
saveEntityRecord
} = (0, _data.useDispatch)(_coreData.store);
const {
createSuccessNotice,
createErrorNotice
} = (0, _data.useDispatch)(_notices.store);
async function onSetPageAsHomepage(event) {
event.preventDefault();
try {
// Save new home page settings.
await saveEditedEntityRecord('root', 'site', undefined, {
page_on_front: item.id,
show_on_front: 'page'
});
// This second call to a save function is a workaround for a bug in
// `saveEditedEntityRecord`. This forces the root site settings to be updated.
// See https://github.com/WordPress/gutenberg/issues/67161.
await saveEntityRecord('root', 'site', {
page_on_front: item.id,
show_on_front: 'page'
});
createSuccessNotice((0, _i18n.__)('Homepage updated'), {
type: 'snackbar'
});
} catch (error) {
const typedError = error;
const errorMessage = typedError.message && typedError.code !== 'unknown_error' ? typedError.message : (0, _i18n.__)('An error occurred while setting the homepage');
createErrorNotice(errorMessage, {
type: 'snackbar'
});
} finally {
closeModal?.();
}
}
const modalWarning = 'posts' === showOnFront ? (0, _i18n.__)('This will replace the current homepage which is set to display latest posts.') : (0, _i18n.sprintf)(
// translators: %s: title of the current home page.
(0, _i18n.__)('This will replace the current homepage: "%s"'), currentHomePageTitle);
const modalText = (0, _i18n.sprintf)(
// translators: %1$s: title of the page to be set as the homepage, %2$s: homepage replacement warning message.
(0, _i18n.__)('Set "%1$s" as the site homepage? %2$s'), pageTitle, modalWarning);
// translators: Button label to confirm setting the specified page as the homepage.
const modalButtonLabel = (0, _i18n.__)('Set homepage');
return /*#__PURE__*/(0, _jsxRuntime.jsx)("form", {
onSubmit: onSetPageAsHomepage,
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_components.__experimentalVStack, {
spacing: "5",
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_components.__experimentalText, {
children: modalText
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_components.__experimentalHStack, {
justify: "right",
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_components.Button, {
__next40pxDefaultSize: true,
variant: "tertiary",
onClick: () => {
closeModal?.();
},
disabled: isSaving,
accessibleWhenDisabled: true,
children: (0, _i18n.__)('Cancel')
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.Button, {
__next40pxDefaultSize: true,
variant: "primary",
type: "submit",
disabled: isSaving,
accessibleWhenDisabled: true,
children: modalButtonLabel
})]
})]
})
});
};
const useSetAsHomepageAction = () => {
const {
pageOnFront,
pageForPosts
} = (0, _data.useSelect)(select => {
const {
getEntityRecord
} = select(_coreData.store);
const siteSettings = getEntityRecord('root', 'site');
return {
pageOnFront: siteSettings?.page_on_front,
pageForPosts: siteSettings?.page_for_posts
};
});
return (0, _element.useMemo)(() => ({
id: 'set-as-homepage',
label: (0, _i18n.__)('Set as homepage'),
isEligible(post) {
if (post.status !== 'publish') {
return false;
}
if (post.type !== 'page') {
return false;
}
// Don't show the action if the page is already set as the homepage.
if (pageOnFront === post.id) {
return false;
}
// Don't show the action if the page is already set as the page for posts.
if (pageForPosts === post.id) {
return false;
}
return true;
},
RenderModal: SetAsHomepageModal
}), [pageForPosts, pageOnFront]);
};
exports.useSetAsHomepageAction = useSetAsHomepageAction;
//# sourceMappingURL=set-as-homepage.js.map