@wordpress/block-library
Version:
Block library for the WordPress editor.
179 lines (178 loc) • 5.82 kB
JavaScript
// packages/block-library/src/navigation/edit/menu-inspector-controls.js
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";
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 {
LinkUI,
updateAttributes,
useEntityBinding
} from "../../navigation-link/shared";
import { jsx, jsxs } from "react/jsx-runtime";
var actionLabel = (
/* translators: %s: The name of a menu. */
__("Switch to '%s'")
);
var BLOCKS_WITH_LINK_UI_SUPPORT = [
"core/navigation-link",
"core/navigation-submenu"
];
var { PrivateListView } = unlock(blockEditorPrivateApis);
function AdditionalBlockContent({ block, insertedBlock, setInsertedBlock }) {
const { updateBlockAttributes, removeBlock } = useDispatch(blockEditorStore);
const supportsLinkControls = BLOCKS_WITH_LINK_UI_SUPPORT?.includes(
insertedBlock?.name
);
const blockWasJustInserted = insertedBlock?.clientId === block.clientId;
const showLinkControls = supportsLinkControls && blockWasJustInserted;
const { createBinding, clearBinding } = useEntityBinding({
clientId: insertedBlock?.clientId,
attributes: insertedBlock?.attributes || {}
});
if (!showLinkControls) {
return null;
}
const cleanupInsertedBlock = () => {
const shouldAutoSelectBlock = false;
if (!insertedBlock?.attributes?.url && insertedBlock?.clientId) {
removeBlock(insertedBlock.clientId, shouldAutoSelectBlock);
}
setInsertedBlock(null);
};
const setInsertedBlockAttributes = (_insertedBlockClientId) => (_updatedAttributes) => {
if (!_insertedBlockClientId) {
return;
}
updateBlockAttributes(_insertedBlockClientId, _updatedAttributes);
};
const handleSetInsertedBlock = (newBlock) => {
const shouldAutoSelectBlock = false;
if (insertedBlock?.clientId && newBlock) {
removeBlock(insertedBlock.clientId, shouldAutoSelectBlock);
}
setInsertedBlock(newBlock);
};
return /* @__PURE__ */ jsx(
LinkUI,
{
clientId: insertedBlock?.clientId,
link: insertedBlock?.attributes,
onBlockInsert: handleSetInsertedBlock,
onClose: () => {
cleanupInsertedBlock();
},
onChange: (updatedValue) => {
const { isEntityLink, attributes: updatedAttributes } = updateAttributes(
updatedValue,
setInsertedBlockAttributes(insertedBlock?.clientId),
insertedBlock?.attributes
);
if (isEntityLink) {
createBinding(updatedAttributes);
} else {
clearBinding();
}
setInsertedBlock(null);
}
}
);
}
var 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, 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,
showAppender: true,
blockSettingsMenu: LeafMoreMenu,
additionalBlockContent: AdditionalBlockContent
}
)
] });
};
var 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,
onSelectClassicMenu,
onSelectNavigationMenu,
onCreateNew,
createNavigationMenuIsSuccess,
createNavigationMenuIsError,
actionLabel,
isManageMenusButtonDisabled
}
)
] }),
/* @__PURE__ */ jsx(MainContent, { ...props })
] }) });
};
var menu_inspector_controls_default = MenuInspectorControls;
export {
menu_inspector_controls_default as default
};
//# sourceMappingURL=menu-inspector-controls.js.map