-
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
Block Editor: Fix 'isBlockSubtreeDisabled' private selector #54618
Conversation
Size Change: +49 B (0%) Total Size: 1.62 MB
ℹ️ View Unchanged
|
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.
Thanks for catching this @Mamaduka
Before
I can't edit the content inside a contentOnly locked template!
2023-09-20.12.07.10.mp4
After
Now I can edit the content inside a contentOnly locked template!
2023-09-20.12.07.24.mp4
Just left a question about the changed condition inside the selector.
return ( | ||
( mode === undefined || mode === 'disabled' ) && | ||
getBlockEditingMode( state, childClientId ) === 'disabled' && |
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.
Just checking, is the mode === undefined
check not required anymore?
getBlockEditingMode()
can still try to fetch from the blockEditingModes
Map: state.blockEditingModes.get( childClientId )
which will return undefined
if the key returns no value.
Just by reading the previous check, it seems to say, "if the parent's mode is not yet known, or has never been set, flag the tree as disabled if all the children are disabled"
Then again, I went through the test description of the PR that introduced the selector, and things still work as expected.
What do you think?
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 read through all PRs that touched this code and couldn't find the exact reason why the first check used the getBlockEditingMode
selector and the child subtree did not.
Just by reading the previous check, it seems to say, "if the parent's mode is not yet known, or has never been set, flag the tree as disabled if all the children are disabled"
This was causing false positives in the case. The paragraph mode is undefined
, but the check for its children will also resolve to true
because [].every( condition ) === true
.
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.
This was causing false positives in the case. The paragraph mode is undefined, but the check for its children will also resolve to true because [].every( condition ) === true.
Ah okay. I just wasn't sure whether a block tree whose children are disabled but whose parent isn't could be classed as "disabled". The function name implies it, but as you say there'd have to be further checks. If it's not being used this way, then it seems safe.
Thanks for confirming!
* Fix selector dependencies * Improve child subtree check * Add e2e tests
I just cherry-picked this PR to the release/16.7 branch to get it included in the next release: 9b9931f |
What?
Fixes #54561.
PR fixes a bug with the
isBlockSubtreeDisabled
private selector incorrectly marking deeply nested blocks in thecontentOnly
template locked parent as non-editable.Why?
The selector had two issues:
getBlockEditingMode
checks blocks for attributes with content roles.How?
getBlockEditingMode
for the child block checks.Testing Instructions
Example content
Testing Instructions for Keyboard
Same
Screenshots or screencast
CleanShot.2023-09-19.at.21.42.08.mp4