-
Notifications
You must be signed in to change notification settings - Fork 1.5k
fix: #8686 prevent useGridCell from overriding child focus restoration loops #10228
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
Open
jsmitrah
wants to merge
11
commits into
adobe:main
Choose a base branch
from
jsmitrah:bug-fix/8686/table-cell-incorrectly-returns-focus-to-button
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
+98
−9
Open
Changes from all commits
Commits
Show all changes
11 commits
Select commit
Hold shift + click to select a range
11a8867
fix: prevent useGridCell from overriding child focus restoration loops
jsmitrah 7e8bcfe
fix: resolve lint and CI test compilation errors
jsmitrah adbba17
changed the type for focus event.
jsmitrah bce1556
Merge branch 'main' into bug-fix/8686/table-cell-incorrectly-returns-…
jsmitrah 24667bf
Merge branch 'main' into bug-fix/8686/table-cell-incorrectly-returns-…
jsmitrah e9c5635
Merge branch 'main' into bug-fix/8686/table-cell-incorrectly-returns-…
jsmitrah cf9fb80
fix: improve button interaction handling.
jsmitrah 6a6f158
Merge branch 'main' into bug-fix/8686/table-cell-incorrectly-returns-…
jsmitrah 70b8a96
chore: clear remote build cache
jsmitrah 04dda2d
Merge branch 'bug-fix/8686/table-cell-incorrectly-returns-focus-to-bu…
jsmitrah 2bce577
chore: clear remote build cache
jsmitrah File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Some comments aren't visible on the classic Files Changed page.
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
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 seems like an important comment. JSDOM and the act environment is not a reliable test against this as it's simulating real browsers.
Did you run this against real browsers? If I recall, document.activeElement can be updated at different times depending on the browser you're in as well.
Uh oh!
There was an error while loading. Please reload this page.
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.
Good catch, @snowystinger. To avoid the timing issues of the document.activeElement across different real browsers, I updated the approach to use e.relatedTarget.
By checking e.relatedTarget synchronously, we can instantly determine if focus is moving directly into a nested child element. This provides identical, reliable accuracy in both JSDOM and real browsers without needing to wait for a frame
I've pushed the update.
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 don't see any update with relatedTarget?
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.
Apologies for the confusion, @snowystinger . I initially tried an implementation using e.relatedTarget, but it completely broke the React 16 test suite (test-16) on CircleCI due to synthetic event pooling limitations in older environments.
Because asynchronous timeouts/frames break the synchronous act() testing clock, I reverted to the synchronous approach using getActiveElement(). I have also restored the original comment regarding focus propagation to keep the documentation clear.
Uh oh!
There was an error while loading. Please reload this page.
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 the explanation. I'm going to be level with you. I have low confidence in this PR. It appears to be AI driven with a focus just on the tests and not on the browser. In addition, it doesn't explain how we've moved away from this requestAnimationFrame in a satisfactory way. The comment still says "wait a frame" which isn't what it's doing. Finally, the test seems fairly contrived as I note in my other comment.
This may very well be the correct solution, but we need a lot more due diligence. Help us help you get this PR merged.
Thank you for understanding.