-
Notifications
You must be signed in to change notification settings - Fork 4.3k
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
Block Patterns tab: Handle receiving the category name as a string #68806
base: trunk
Are you sure you want to change the base?
Conversation
Size Change: +35 B (0%) Total Size: 1.84 MB
ℹ️ View Unchanged
|
Even if the modal is used instead, there is still a problem with passing any category to the pattern preview in an unexpected format. |
const [ selectedPatternCategory, setSelectedPatternCategory ] = useState( | ||
__experimentalInitialCategory | ||
); |
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 above logic can be inlined here.
diff --git packages/block-editor/src/components/inserter/menu.js packages/block-editor/src/components/inserter/menu.js
index f1e387c5a59..caec6adef78 100644
--- packages/block-editor/src/components/inserter/menu.js
+++ packages/block-editor/src/components/inserter/menu.js
@@ -68,9 +68,9 @@ function InserterMenu(
const [ filterValue, setFilterValue, delayedFilterValue ] =
useDebouncedInput( __experimentalFilterValue );
const [ hoveredItem, setHoveredItem ] = useState( null );
- const [ selectedPatternCategory, setSelectedPatternCategory ] = useState(
- __experimentalInitialCategory
- );
+ const [ selectedPatternCategory, setSelectedPatternCategory ] = useState( {
+ name: __experimentalInitialCategory,
+ } );
const [ patternFilter, setPatternFilter ] = useState( 'all' );
const [ selectedMediaCategory, setSelectedMediaCategory ] =
useState( null );
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.
I am not sure I understand. Should the check for the string format be removed? Right now in Gutenberg, the requesting components passes a string, or: I only found two places where a category name is passed at all. But the expected received format is still meant to be an object
, no? So it needs to handle both string and object.
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.
Currently, only selectedPatternCategory
and selectedMediaCategory
values are expected to be objects with the name
property. The remaining code can use string value.
Inlining object as initial state value can simplify things, IMO.
const [ selectedPatternCategory, setSelectedPatternCategory ] = useState( {
name: __experimentalInitialCategory,
} );
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.
But it assumes __experimentalInitialCategory
is always a string? If it is already an object it will be placed inside name
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.
If it is truly never and object, then shouldn't the block patterns tab and the preview be updated to use strings?
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.
Correct. The __experimentalInitialCategory
should always be a string, but pattern tabs will use an object internally because of how the Tabs
component works.
P.S. This is probably unimportant now, considering we will revert the feature - #68736 (comment).
Edit: But we'll have to deal with this issue anyway, so let's keep this open.
packages/block-editor/src/components/block-tools/zoom-out-mode-inserters.js
Show resolved
Hide resolved
The missing fallback for invalid categories - I think this predates changes from #66836 and was only highlighted. While I would like to see it resolved, it isn't a blocker for this PR. |
@carolinan, should we remove this from the WP 6.8 project board in favor of #69081? |
Ok |
What?
This started as a bug fix related to the page creation flow, where the
starter content
pattern category was meant to show when you create a new page.But it turned out the problem was not only with the patterns that are meant to show on page creation, but with passing any category name to the block patterns tab as a string.
That is why there is no separate issue opened for this PR.
Partial for #68736
Alternative to #68801
In the pattern category preview, the expected format of the category is an object with a
name
andlabel
parameter.However, in the components that pass the category to the previewer, the category is a string.
The
ZoomOutModeInserterButton
passes the value "all" -and this is not recognized as a category by the previewer.The previewer is expecting the name parameter with the value "allPatterns":
https://github.com/WordPress/gutenberg/blob/trunk/packages/block-editor/src/components/inserter/block-patterns-tab/utils.js#L18
The
StartPageOptions
passes the value "core/starter-content" and the previewer is expecting thename
parameter with this value.So what this PR does is:
name
, so that the previewer receives the correct identifier for the categoryTesting Instructions
Activate a block theme that has starter content patterns, for example Twenty Twenty-Five.
Create a new page and observe which pattern category that is shown in the inserter sidebar.
Edit a template and observe which pattern category that is shown when adding a pattern in zoom out mode.