UNPKG

@wordpress/block-editor

Version:
62 lines (61 loc) 2.16 kB
// packages/block-editor/src/hooks/auto-inspector-controls.js import { getBlockType } from "@wordpress/blocks"; import { PanelBody } from "@wordpress/components"; import { useSelect } from "@wordpress/data"; import { DataForm } from "@wordpress/dataviews"; import { useMemo } from "@wordpress/element"; import { __ } from "@wordpress/i18n"; import InspectorControls from "../components/inspector-controls/index.mjs"; import { useBlockEditingMode } from "../components/block-editing-mode/index.mjs"; import { store as blockEditorStore } from "../store/index.mjs"; import { generateFieldsFromAttributes } from "./generate-fields-from-attributes.mjs"; import { jsx } from "react/jsx-runtime"; function hasAutoInspectorControlAttributes(blockTypeAttributes) { if (!blockTypeAttributes) { return false; } return Object.values(blockTypeAttributes).some( (attr) => attr?.__experimentalAutoInspectorControl ); } function AutoRegisterControls({ name, clientId, setAttributes }) { const blockEditingMode = useBlockEditingMode(); const attributes = useSelect( (select) => select(blockEditorStore).getBlockAttributes(clientId), [clientId] ); const blockType = getBlockType(name); const { fields, form } = useMemo(() => { if (!blockType?.attributes) { return { fields: [], form: { fields: [] } }; } return generateFieldsFromAttributes(blockType.attributes); }, [blockType?.attributes]); if (blockEditingMode !== "default") { return null; } if (!fields || fields.length === 0) { return null; } return /* @__PURE__ */ jsx(InspectorControls, { children: /* @__PURE__ */ jsx(PanelBody, { title: __("Settings"), children: /* @__PURE__ */ jsx( DataForm, { data: attributes, fields, form, onChange: setAttributes } ) }) }); } var auto_inspector_controls_default = { edit: AutoRegisterControls, attributeKeys: [], hasSupport(name) { const blockType = getBlockType(name); return hasAutoInspectorControlAttributes(blockType?.attributes); } }; export { auto_inspector_controls_default as default }; //# sourceMappingURL=auto-inspector-controls.mjs.map