@wordpress/block-library
Version:
Block library for the WordPress editor.
137 lines (136 loc) • 4.98 kB
JavaScript
/**
* 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