From fd0b056a7921e5439d1ff857b2b12f2ed5edde12 Mon Sep 17 00:00:00 2001 From: Dave Smith Date: Thu, 4 May 2023 12:11:20 +0100 Subject: [PATCH 1/4] Normalize menu used in sidebar with fallback algorithm From c807b20ea06935adc25a8cb2602614c289782d9a Mon Sep 17 00:00:00 2001 From: Dave Smith Date: Thu, 22 Jun 2023 10:03:39 +0100 Subject: [PATCH 2/4] Make fallback retrieval invalidate query cache for Navigation entities --- packages/core-data/src/resolvers.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/core-data/src/resolvers.js b/packages/core-data/src/resolvers.js index 6437b759976901..e0c29fbc4b7b16 100644 --- a/packages/core-data/src/resolvers.js +++ b/packages/core-data/src/resolvers.js @@ -588,7 +588,9 @@ export const getNavigationFallbackId = dispatch.receiveEntityRecords( 'postType', 'wp_navigation', - record + record, + undefined, + true ); // Resolve to avoid further network requests. From 1b22268fdb99ba491555ccd202bcbf50d3855761 Mon Sep 17 00:00:00 2001 From: Dave Smith Date: Thu, 22 Jun 2023 10:04:02 +0100 Subject: [PATCH 3/4] Conditionally trigger fallback creation if no menus are found --- .../index.js | 35 +++++++++++++++---- 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/packages/edit-site/src/components/sidebar-navigation-screen-navigation-menus/index.js b/packages/edit-site/src/components/sidebar-navigation-screen-navigation-menus/index.js index 2234f1e1bbdeea..099612151f7747 100644 --- a/packages/edit-site/src/components/sidebar-navigation-screen-navigation-menus/index.js +++ b/packages/edit-site/src/components/sidebar-navigation-screen-navigation-menus/index.js @@ -2,7 +2,8 @@ * WordPress dependencies */ import { __, sprintf } from '@wordpress/i18n'; -import { useEntityRecords } from '@wordpress/core-data'; +import { useEntityRecords, store as coreStore } from '@wordpress/core-data'; +import { useSelect } from '@wordpress/data'; import { decodeEntities } from '@wordpress/html-entities'; import { @@ -41,15 +42,35 @@ function buildMenuLabel( title, id, status ) { } export default function SidebarNavigationScreenNavigationMenus() { - const { records: navigationMenus, isResolving: isLoading } = - useEntityRecords( - 'postType', - `wp_navigation`, - PRELOADED_NAVIGATION_MENUS_QUERY - ); + const { + records: navigationMenus, + isResolving: isResolvingNavigationMenus, + hasResolved: hasResolvedNavigationMenus, + } = useEntityRecords( + 'postType', + `wp_navigation`, + PRELOADED_NAVIGATION_MENUS_QUERY + ); + + const isLoading = + isResolvingNavigationMenus && ! hasResolvedNavigationMenus; + + const getNavigationFallbackId = useSelect( + ( select ) => select( coreStore ).getNavigationFallbackId + ); const firstNavigationMenu = navigationMenus?.[ 0 ]; + // If there is no navigation menu found + // then trigger fallback algorithm to create one. + if ( + ! firstNavigationMenu && + ! isResolvingNavigationMenus && + hasResolvedNavigationMenus + ) { + getNavigationFallbackId(); + } + const { handleSave, handleDelete, handleDuplicate } = useNavigationMenuHandlers(); From d4120f526d1825e8ce8c897b2c1e5a9dbd802cdf Mon Sep 17 00:00:00 2001 From: Dave Smith Date: Thu, 22 Jun 2023 10:05:38 +0100 Subject: [PATCH 4/4] Make code self documenting --- packages/core-data/src/resolvers.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/core-data/src/resolvers.js b/packages/core-data/src/resolvers.js index e0c29fbc4b7b16..32baa691ddd822 100644 --- a/packages/core-data/src/resolvers.js +++ b/packages/core-data/src/resolvers.js @@ -585,12 +585,14 @@ export const getNavigationFallbackId = dispatch.receiveNavigationFallbackId( fallback?.id ); if ( record ) { + const invalidateNavigationQueries = true; + dispatch.receiveEntityRecords( 'postType', 'wp_navigation', record, undefined, - true + invalidateNavigationQueries ); // Resolve to avoid further network requests.