UNPKG

@wordpress/block-library

Version:
137 lines (136 loc) 4.98 kB
/** * WordPress dependencies */ import { privateApis as blockEditorPrivateApis, InspectorControls, store as blockEditorStore } from '@wordpress/block-editor'; import { PanelBody, __experimentalHStack as HStack, __experimentalHeading as Heading, Spinner } from '@wordpress/components'; import { useSelect, useDispatch } from '@wordpress/data'; import { __, sprintf } from '@wordpress/i18n'; /** * Internal dependencies */ import NavigationMenuSelector from './navigation-menu-selector'; import { unlock } from '../../lock-unlock'; import DeletedNavigationWarning from './deleted-navigation-warning'; import useNavigationMenu from '../use-navigation-menu'; import LeafMoreMenu from './leaf-more-menu'; import { updateAttributes } from '../../navigation-link/update-attributes'; import { LinkUI } from '../../navigation-link/link-ui'; import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; const actionLabel = /* translators: %s: The name of a menu. */__("Switch to '%s'"); const BLOCKS_WITH_LINK_UI_SUPPORT = ['core/navigation-link', 'core/navigation-submenu']; const { PrivateListView } = unlock(blockEditorPrivateApis); function AdditionalBlockContent({ block, insertedBlock, setInsertedBlock }) { const { updateBlockAttributes } = useDispatch(blockEditorStore); const supportsLinkControls = BLOCKS_WITH_LINK_UI_SUPPORT?.includes(insertedBlock?.name); const blockWasJustInserted = insertedBlock?.clientId === block.clientId; const showLinkControls = supportsLinkControls && blockWasJustInserted; if (!showLinkControls) { return null; } const setInsertedBlockAttributes = _insertedBlockClientId => _updatedAttributes => { if (!_insertedBlockClientId) { return; } updateBlockAttributes(_insertedBlockClientId, _updatedAttributes); }; return /*#__PURE__*/_jsx(LinkUI, { clientId: insertedBlock?.clientId, link: insertedBlock?.attributes, onClose: () => { setInsertedBlock(null); }, onChange: updatedValue => { updateAttributes(updatedValue, setInsertedBlockAttributes(insertedBlock?.clientId), insertedBlock?.attributes); setInsertedBlock(null); }, onCancel: () => { setInsertedBlock(null); } }); } const MainContent = ({ clientId, currentMenuId, isLoading, isNavigationMenuMissing, onCreateNew }) => { const hasChildren = useSelect(select => { return !!select(blockEditorStore).getBlockCount(clientId); }, [clientId]); const { navigationMenu } = useNavigationMenu(currentMenuId); if (currentMenuId && isNavigationMenuMissing) { return /*#__PURE__*/_jsx(DeletedNavigationWarning, { onCreateNew: onCreateNew, isNotice: true }); } if (isLoading) { return /*#__PURE__*/_jsx(Spinner, {}); } const description = navigationMenu ? sprintf(/* translators: %s: The name of a menu. */ __('Structure for Navigation Menu: %s'), navigationMenu?.title || __('Untitled menu')) : __('You have not yet created any menus. Displaying a list of your Pages'); return /*#__PURE__*/_jsxs("div", { className: "wp-block-navigation__menu-inspector-controls", children: [!hasChildren && /*#__PURE__*/_jsx("p", { className: "wp-block-navigation__menu-inspector-controls__empty-message", children: __('This Navigation Menu is empty.') }), /*#__PURE__*/_jsx(PrivateListView, { rootClientId: clientId, isExpanded: true, description: description, showAppender: true, blockSettingsMenu: LeafMoreMenu, additionalBlockContent: AdditionalBlockContent })] }); }; const MenuInspectorControls = props => { const { createNavigationMenuIsSuccess, createNavigationMenuIsError, currentMenuId = null, onCreateNew, onSelectClassicMenu, onSelectNavigationMenu, isManageMenusButtonDisabled, blockEditingMode } = props; return /*#__PURE__*/_jsx(InspectorControls, { group: "list", children: /*#__PURE__*/_jsxs(PanelBody, { title: null, children: [/*#__PURE__*/_jsxs(HStack, { className: "wp-block-navigation-off-canvas-editor__header", children: [/*#__PURE__*/_jsx(Heading, { className: "wp-block-navigation-off-canvas-editor__title", level: 2, children: __('Menu') }), blockEditingMode === 'default' && /*#__PURE__*/_jsx(NavigationMenuSelector, { currentMenuId: currentMenuId, onSelectClassicMenu: onSelectClassicMenu, onSelectNavigationMenu: onSelectNavigationMenu, onCreateNew: onCreateNew, createNavigationMenuIsSuccess: createNavigationMenuIsSuccess, createNavigationMenuIsError: createNavigationMenuIsError, actionLabel: actionLabel, isManageMenusButtonDisabled: isManageMenusButtonDisabled })] }), /*#__PURE__*/_jsx(MainContent, { ...props })] }) }); }; export default MenuInspectorControls; //# sourceMappingURL=menu-inspector-controls.js.map