UNPKG

@wordpress/block-library

Version:
101 lines (93 loc) 3.52 kB
"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