-
Notifications
You must be signed in to change notification settings - Fork 4.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Only request fallback navigation menu if necessary #52775
base: trunk
Are you sure you want to change the base?
Conversation
Size Change: +7 B (0%) Total Size: 1.44 MB
ℹ️ View Unchanged
|
__unstableMarkNextChangeAsNotPersistent(); | ||
setRef( navigationFallbackId ); | ||
setRef( getNavigationFallbackId() ); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The first time this runs the ref
may end up being set to null
because the selector has an async resolver.
if ( ref || hasUnsavedBlocks || ! navigationFallbackId ) { | ||
if ( | ||
! navMenuResolvedButMissing || | ||
navigationMenus.length > 0 || |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"Fallback" is an interesting concept. It doesn't mean "create a fallback". I mean "get the most appropriate menu to use as a fallback".
This will run
- if there are no menus at all
- if there are menus but this particular nav block does not have a
ref
Prior to this we just had lots of "use the first menu" scattered all over the place so the fallback selector
helps to unify this.
That said, if the selector doesn't immediately return data from state, then it will trigger a resolver which is async and thus we do need to conditionalise it.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hmmm... So we need to make a request for the fallback if there are no menus, or if we don't know what menu they want. So, it was decided to be better UX to show some menu over an error/no menu?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes that's it. So we want to avoid a "no menus" situation.
So we
- get the most recently created Navigation Menu post (if available). If not we fall back to...
- convert a most recently created Classic Menu to a Navigation Menu and use that. If no classic menu we fall back to...
- create a Navigation Menu and use that.
That logic is all server side in a dedicated class that is called from the fallback endpoint.
What?
The navigation fallback menu is being requested unnecessarily.
Why?
To save network requests 🐎
How?
If there are navigation menus available, we don't need a fallback (I think).
It may be better to add a
needsFallbackMenu
or something touseNavigationMenu
that can handle this more easily across other places.Testing Instructions
Testing Instructions for Keyboard
Screenshots or screencast