@wordpress/block-library
Version:
Block library for the WordPress editor.
101 lines (93 loc) • 3.52 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = useNavigationMenu;
var _coreData = require("@wordpress/core-data");
var _data = require("@wordpress/data");
/**
* WordPress dependencies
*/
function useNavigationMenu(ref) {
const permissions = (0, _coreData.useResourcePermissions)('navigation', ref);
return (0, _data.useSelect)(select => {
const {
canCreate,
canUpdate,
canDelete,
isResolving,
hasResolved
} = permissions;
const {
navigationMenus,
isResolvingNavigationMenus,
hasResolvedNavigationMenus
} = selectNavigationMenus(select, ref);
const {
navigationMenu,
isNavigationMenuResolved,
isNavigationMenuMissing
} = selectExistingMenu(select, ref);
return {
navigationMenus,
isResolvingNavigationMenus,
hasResolvedNavigationMenus,
navigationMenu,
isNavigationMenuResolved,
isNavigationMenuMissing,
canSwitchNavigationMenu: ref ? (navigationMenus === null || navigationMenus === void 0 ? void 0 : navigationMenus.length) > 1 : (navigationMenus === null || navigationMenus === void 0 ? void 0 : navigationMenus.length) > 0,
canUserCreateNavigationMenu: canCreate,
isResolvingCanUserCreateNavigationMenu: isResolving,
hasResolvedCanUserCreateNavigationMenu: hasResolved,
canUserUpdateNavigationMenu: canUpdate,
hasResolvedCanUserUpdateNavigationMenu: ref ? hasResolved : undefined,
canUserDeleteNavigationMenu: canDelete,
hasResolvedCanUserDeleteNavigationMenu: ref ? hasResolved : undefined
};
}, [ref, permissions]);
}
function selectNavigationMenus(select) {
const {
getEntityRecords,
hasFinishedResolution,
isResolving
} = select(_coreData.store);
const args = ['postType', 'wp_navigation', {
per_page: -1,
status: ['publish', 'draft']
}];
return {
navigationMenus: getEntityRecords(...args),
isResolvingNavigationMenus: isResolving('getEntityRecords', args),
hasResolvedNavigationMenus: hasFinishedResolution('getEntityRecords', args)
};
}
function selectExistingMenu(select, ref) {
if (!ref) {
return {
isNavigationMenuResolved: false,
isNavigationMenuMissing: true
};
}
const {
getEntityRecord,
getEditedEntityRecord,
hasFinishedResolution
} = select(_coreData.store);
const args = ['postType', 'wp_navigation', ref];
const navigationMenu = getEntityRecord(...args);
const editedNavigationMenu = getEditedEntityRecord(...args);
const hasResolvedNavigationMenu = hasFinishedResolution('getEditedEntityRecord', args); // Only published Navigation posts are considered valid.
// Draft Navigation posts are valid only on the editor,
// requiring a post update to publish to show in frontend.
// To achieve that, index.php must reflect this validation only for published.
const isNavigationMenuPublishedOrDraft = editedNavigationMenu.status === 'publish' || editedNavigationMenu.status === 'draft';
return {
isNavigationMenuResolved: hasResolvedNavigationMenu,
isNavigationMenuMissing: hasResolvedNavigationMenu && (!navigationMenu || !isNavigationMenuPublishedOrDraft),
// getEditedEntityRecord will return the post regardless of status.
// Therefore if the found post is not published then we should ignore it.
navigationMenu: isNavigationMenuPublishedOrDraft ? editedNavigationMenu : null
};
}
//# sourceMappingURL=use-navigation-menu.js.map