@wordpress/edit-post
Version:
Edit Post module for WordPress.
144 lines (126 loc) • 4.12 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = exports.Slot = exports.Fill = void 0;
var _element = require("@wordpress/element");
var _components = require("@wordpress/components");
var _compose = require("@wordpress/compose");
var _plugins = require("@wordpress/plugins");
var _data = require("@wordpress/data");
var _warning = _interopRequireDefault(require("@wordpress/warning"));
var _options = require("../../preferences-modal/options");
var _store = require("../../../store");
/**
* Defines as extensibility slot for the Settings sidebar
*/
/**
* WordPress dependencies
*/
/**
* Internal dependencies
*/
const {
Fill,
Slot
} = (0, _components.createSlotFill)('PluginDocumentSettingPanel');
exports.Slot = Slot;
exports.Fill = Fill;
const PluginDocumentSettingFill = ({
isEnabled,
panelName,
opened,
onToggle,
className,
title,
icon,
children
}) => {
return (0, _element.createElement)(_element.Fragment, null, (0, _element.createElement)(_options.EnablePluginDocumentSettingPanelOption, {
label: title,
panelName: panelName
}), (0, _element.createElement)(Fill, null, isEnabled && (0, _element.createElement)(_components.PanelBody, {
className: className,
title: title,
icon: icon,
opened: opened,
onToggle: onToggle
}, children)));
};
/**
* Renders items below the Status & Availability panel in the Document Sidebar.
*
* @param {Object} props Component properties.
* @param {string} [props.name] The machine-friendly name for the panel.
* @param {string} [props.className] An optional class name added to the row.
* @param {string} [props.title] The title of the panel
* @param {WPBlockTypeIconRender} [props.icon=inherits from the plugin] The [Dashicon](https://developer.wordpress.org/resource/dashicons/) icon slug string, or an SVG WP element, to be rendered when the sidebar is pinned to toolbar.
*
* @example
* ```js
* // Using ES5 syntax
* var el = wp.element.createElement;
* var __ = wp.i18n.__;
* var registerPlugin = wp.plugins.registerPlugin;
* var PluginDocumentSettingPanel = wp.editPost.PluginDocumentSettingPanel;
*
* function MyDocumentSettingPlugin() {
* return el(
* PluginDocumentSettingPanel,
* {
* className: 'my-document-setting-plugin',
* title: 'My Panel',
* },
* __( 'My Document Setting Panel' )
* );
* }
*
* registerPlugin( 'my-document-setting-plugin', {
* render: MyDocumentSettingPlugin
* } );
* ```
*
* @example
* ```jsx
* // Using ESNext syntax
* import { registerPlugin } from '@wordpress/plugins';
* import { PluginDocumentSettingPanel } from '@wordpress/edit-post';
*
* const MyDocumentSettingTest = () => (
* <PluginDocumentSettingPanel className="my-document-setting-plugin" title="My Panel">
* <p>My Document Setting Panel</p>
* </PluginDocumentSettingPanel>
* );
*
* registerPlugin( 'document-setting-test', { render: MyDocumentSettingTest } );
* ```
*
* @return {WPComponent} The component to be rendered.
*/
const PluginDocumentSettingPanel = (0, _compose.compose)((0, _plugins.withPluginContext)((context, ownProps) => {
if (undefined === ownProps.name) {
typeof process !== "undefined" && process.env && process.env.NODE_ENV !== "production" ? (0, _warning.default)('PluginDocumentSettingPanel requires a name property.') : void 0;
}
return {
icon: ownProps.icon || context.icon,
panelName: `${context.name}/${ownProps.name}`
};
}), (0, _data.withSelect)((select, {
panelName
}) => {
return {
opened: select(_store.store).isEditorPanelOpened(panelName),
isEnabled: select(_store.store).isEditorPanelEnabled(panelName)
};
}), (0, _data.withDispatch)((dispatch, {
panelName
}) => ({
onToggle() {
return dispatch(_store.store).toggleEditorPanelOpened(panelName);
}
})))(PluginDocumentSettingFill);
PluginDocumentSettingPanel.Slot = Slot;
var _default = PluginDocumentSettingPanel;
exports.default = _default;
//# sourceMappingURL=index.js.map