-
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: scroll block into view on insert #61418
Conversation
Size Change: +151 B (+0.01%) Total Size: 1.74 MB
ℹ️ View Unchanged
|
Flaky tests detected in e20cff2. 🔍 Workflow run URL: https://github.com/WordPress/gutenberg/actions/runs/8994977163
|
@@ -2751,7 +2751,7 @@ export function wasBlockJustInserted( state, clientId, source ) { | |||
* @return {boolean} True if the block is visible. | |||
*/ | |||
export function isBlockVisible( state, clientId ) { | |||
return state.blockVisibility?.[ clientId ] ?? 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 added in #41104 and was always defaulted to true.
The following accounts have interacted with this PR and/or linked issues. I will continue to update these lists as activity occurs. You can also manually ask me to refresh this list by adding the If you're merging code through a pull request on GitHub, copy and paste the following into the bottom of the merge commit message.
To understand the WordPress project's expectations around crediting contributors, please review the Contributor Attribution page in the Core Handbook. |
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 can't break it!
6b7b3c7
to
8543cfd
Compare
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.
There is a bug where the scroll into view happens w/o insertion:
wring-scroll.mp4
if ( ! defaultView.IntersectionObserver ) { | ||
return; | ||
} | ||
const observer = new defaultView.IntersectionObserver( |
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.
Do we really need an intersection observer here? Can't we just scroll into view directly? Or check the position at the moment of the block selection. An observer is something that runs constantly.
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 know this calls disconnect on first observe but still.
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.
It disconnects immediately, the observer will always immediately call the callback with the initial intersecting state of the element. As for as I know this is the only way to check if an element is visible without using a library.
The Intersection Observer API allows you to configure a callback that is called when either of these circumstances occur:
- A target element intersects either the device's viewport or a specified element. That specified element is called the root element or root for the purposes of the Intersection Observer API.
- The first time the observer is initially asked to watch a target element.
What?
When inserting a block (at the bottom, or after the selected block), the inserted block should be scrolled into view.
Why?
You currently don't know if anything has been inserted.
How?
When a block becomes selected, we can check if the block is in view, and if not, scroll it into view.
Testing Instructions
Screenshots or screencast
May-07-2024.12-17-40.mp4