@wordpress/editor
Version:
Enhanced block editor for WordPress posts.
228 lines (227 loc) • 6.54 kB
JavaScript
// packages/editor/src/dataviews/store/private-actions.ts
import { store as coreStore } from "@wordpress/core-data";
import { doAction } from "@wordpress/hooks";
import {
viewPost,
viewPostRevisions,
duplicatePost,
duplicatePattern,
reorderPage,
exportPattern,
permanentlyDeletePost,
restorePost,
trashPost,
renamePost,
resetPost,
deletePost,
duplicateTemplatePart,
excerptField,
featuredImageField,
dateField,
parentField,
passwordField,
commentStatusField,
pingStatusField,
discussionField,
slugField,
statusField,
authorField,
titleField,
templateField,
templateTitleField,
pageTitleField,
patternTitleField,
notesField,
scheduledDateField,
formatField,
postContentInfoField,
stickyField
} from "@wordpress/fields";
import {
altTextField,
attachedToField,
authorField as mediaAuthorField,
captionField,
dateAddedField,
descriptionField,
filenameField,
filesizeField,
mediaDimensionsField,
mimeTypeField
} from "@wordpress/media-fields";
import { store as editorStore } from "../../store/index.mjs";
import { ATTACHMENT_POST_TYPE, DESIGN_POST_TYPES } from "../../store/constants.mjs";
import postPreviewField from "../fields/content-preview/index.mjs";
import { unlock } from "../../lock-unlock.mjs";
function hasEditorNotesSupport(supports) {
const editor = supports?.editor;
if (Array.isArray(editor)) {
return !!editor[0]?.notes;
}
return false;
}
function registerEntityAction(kind, name, config) {
return {
type: "REGISTER_ENTITY_ACTION",
kind,
name,
config
};
}
function unregisterEntityAction(kind, name, actionId) {
return {
type: "UNREGISTER_ENTITY_ACTION",
kind,
name,
actionId
};
}
function registerEntityField(kind, name, config) {
return {
type: "REGISTER_ENTITY_FIELD",
kind,
name,
config
};
}
function unregisterEntityField(kind, name, fieldId) {
return {
type: "UNREGISTER_ENTITY_FIELD",
kind,
name,
fieldId
};
}
function setIsReady(kind, name) {
return {
type: "SET_IS_READY",
kind,
name
};
}
var ORDERED_MEDIA_FIELDS = [
// Metadata in panels (collapsed by default).
dateAddedField,
mediaAuthorField,
filenameField,
mimeTypeField,
filesizeField,
mediaDimensionsField,
attachedToField,
// Regular layout fields (always visible).
titleField,
altTextField,
captionField,
descriptionField
];
var registerPostTypeSchema = (postType) => async ({ registry }) => {
const isReady = unlock(registry.select(editorStore)).isEntityReady(
"postType",
postType
);
if (isReady) {
return;
}
unlock(registry.dispatch(editorStore)).setIsReady(
"postType",
postType
);
const postTypeConfig = await registry.resolveSelect(coreStore).getPostType(postType);
const canCreate = await registry.resolveSelect(coreStore).canUser("create", {
kind: "postType",
name: postType
});
const currentTheme = await registry.resolveSelect(coreStore).getCurrentTheme();
const { disablePostFormats } = registry.select(editorStore).getEditorSettings();
let canDuplicate = !["wp_block", "wp_template_part"].includes(
postTypeConfig.slug
) && canCreate && duplicatePost;
if (!globalThis.IS_GUTENBERG_PLUGIN) {
if ("wp_template" !== postTypeConfig.slug) {
canDuplicate = void 0;
}
}
if (postTypeConfig.slug === "wp_template" && !window?.__experimentalTemplateActivate) {
canDuplicate = void 0;
}
const actions = [
postTypeConfig.viewable ? viewPost : void 0,
!!postTypeConfig.supports?.revisions ? viewPostRevisions : void 0,
// @ts-ignore
canDuplicate,
postTypeConfig.slug === "wp_template_part" && canCreate && currentTheme?.is_block_theme ? duplicateTemplatePart : void 0,
canCreate && postTypeConfig.slug === "wp_block" ? duplicatePattern : void 0,
postTypeConfig.supports?.title ? renamePost : void 0,
postTypeConfig.supports?.["page-attributes"] ? reorderPage : void 0,
postTypeConfig.slug === "wp_block" ? exportPattern : void 0,
restorePost,
resetPost,
deletePost,
trashPost,
permanentlyDeletePost
].filter(Boolean);
let fields;
if (postType === ATTACHMENT_POST_TYPE) {
fields = ORDERED_MEDIA_FIELDS;
} else {
fields = [
postTypeConfig.supports?.thumbnail && currentTheme?.theme_supports?.["post-thumbnails"] && featuredImageField,
postTypeConfig.supports?.author && authorField,
statusField,
!DESIGN_POST_TYPES.includes(postTypeConfig.slug) && dateField,
!DESIGN_POST_TYPES.includes(postTypeConfig.slug) && scheduledDateField,
slugField,
!DESIGN_POST_TYPES.includes(postTypeConfig.slug) && postTypeConfig.supports?.excerpt && excerptField,
postTypeConfig.supports?.["page-attributes"] && parentField,
postTypeConfig.supports?.comments && commentStatusField,
postTypeConfig.supports?.trackbacks && pingStatusField,
(postTypeConfig.supports?.comments || postTypeConfig.supports?.trackbacks) && discussionField,
templateField,
postTypeConfig.supports?.["post-formats"] && !disablePostFormats && formatField,
!DESIGN_POST_TYPES.includes(postTypeConfig.slug) && postTypeConfig.supports?.editor && postContentInfoField,
passwordField,
postTypeConfig.slug === "post" && stickyField,
postTypeConfig.supports?.editor && postTypeConfig.viewable && postPreviewField,
hasEditorNotesSupport(postTypeConfig.supports) && notesField
].filter(Boolean);
if (postTypeConfig.supports?.title) {
let _titleField;
if (postType === "page") {
_titleField = pageTitleField;
} else if (postType === "wp_template") {
_titleField = templateTitleField;
} else if (postType === "wp_block") {
_titleField = patternTitleField;
} else {
_titleField = titleField;
}
fields.push(_titleField);
}
}
registry.batch(() => {
actions.forEach((action) => {
unlock(registry.dispatch(editorStore)).registerEntityAction(
"postType",
postType,
action
);
});
fields.forEach((field) => {
unlock(registry.dispatch(editorStore)).registerEntityField(
"postType",
postType,
field
);
});
});
doAction("core.registerPostTypeSchema", postType);
};
export {
registerEntityAction,
registerEntityField,
registerPostTypeSchema,
setIsReady,
unregisterEntityAction,
unregisterEntityField
};
//# sourceMappingURL=private-actions.mjs.map