[EuiSelectable] Disable arrow key navigation on non-search/listbox children#6631
Conversation
… the search or listbox
…-search/listbox children - active highlight should go away since focus is no longer on the search/listbox - blurring fix/workaround should still remain intact (goal is to DRY checks, not regress behavior)
| if ( | ||
| ((e.relatedTarget as Node)?.firstChild as HTMLElement)?.id === this.listId | ||
| ) { | ||
| if (this.isFocusOnSearchOrListBox(e.relatedTarget)) { |
There was a problem hiding this comment.
The goal of this change was just DRYness, I tested the 'double click' bug fixed/reported in #5021 fairly thoroughly in Chrome in EuiSelectable in a popover and EuiSelectableTemplateSitewide and am fairly sure there are no regressions.
| }; | ||
|
|
||
| onFocus = () => { | ||
| onFocus = (event?: FocusEvent) => { |
There was a problem hiding this comment.
[Attaching to a random line for threading]
@miukimiu, @1Copenut - should non-searchable EuiSelectable's have this slightly-but-not-really visible focus ring around the listbox? (Note: this is happening on production, not just this PR)
Above screenshot is from FF, but it's happening on Chrome/Edge/Safari as well.
There was a problem hiding this comment.
Thanks! I'll open up a follow-up issue for this since it's already happening in production: #6633
| onClick={() => { | ||
| inputRef?.focus(); | ||
| }} |
There was a problem hiding this comment.
@Heenawter FYI - it looks like the searchProps.inputRef has to be a function (e.g. a state setter) and not a useRef, but you should definitely be able to auto-focus back to the searchbox once users are done with your custom filter component.
|
Preview documentation changes for this PR: https://eui.elastic.co/pr_6631/ |
This reverts commit 419843c.
|
Preview documentation changes for this PR: https://eui.elastic.co/pr_6631/ |
## Summary eui@76.0.2 ⏩ eui@76.3.0 ## [`76.3.0`](https://github.com/elastic/eui/tree/v76.3.0) - Updated `EuiSkipLink`'s `fallbackDestination` prop to support an array of query selector strings ([#6646](elastic/eui#6646)) **Bug fixes** - Fixed `EuiFlyout` to preserve body scrollbar width on open ([#6645](elastic/eui#6645)) - Fixed `EuiImage`'s full screen mode to not scroll jump & to preserve body scrollbar width on open ([#6645](elastic/eui#6645)) - Fixed `EuiCodeBlock`'s full screen mode to not scroll jump & to preserve body scrollbar width on open ([#6645](elastic/eui#6645)) ## [`76.2.0`](https://github.com/elastic/eui/tree/v76.2.0) - Added new `renderCustomGridBody` escape hatch rendering prop to `EuiDataGrid` ([#6624](elastic/eui#6624)) **Bug fixes** - Fixed visual listbox focus ring bug on non-searchable `EuiSelectable`s ([#6637](elastic/eui#6637)) - Added a legacy `alert` alias for the `warning` `EuiIcon` type ([#6640](elastic/eui#6640)) - Fixed a type definition incorrectly coming from a dev dependency, which was causing issues for some consuming projects ([#6643](elastic/eui#6643)) ## [`76.1.0`](https://github.com/elastic/eui/tree/v76.1.0) - Added more detailed screen reader instructions to `EuiSelectable`, `EuiSuggest`, `EuiSelectableTemplateSitewide`, `EuiRange`, and `EuiDualRange`. ([#6589](elastic/eui#6589)) - Added new `placeholder` prop to `EuiSuperSelect` ([#6630](elastic/eui#6630)) - Added new `setCellPopoverProps` parameter callback to `EuiDataGrid`'s `renderCellPopover` prop ([#6632](elastic/eui#6632)) **Bug fixes** - Fixed an ARIA attribute in `EuiSelectableList` ([#6589](elastic/eui#6589)) - Fixed `EuiSelectable` to no longer show active selection state or respond to the Up/Down arrow keys when focus is inside the selectable container, but not on the searchbox or listbox. ([#6631](elastic/eui#6631)) --------- Co-authored-by: Tiago Costa <tiago.costa@elastic.co>
## Summary eui@76.0.2 ⏩ eui@76.3.0 ## [`76.3.0`](https://github.com/elastic/eui/tree/v76.3.0) - Updated `EuiSkipLink`'s `fallbackDestination` prop to support an array of query selector strings ([elastic#6646](elastic/eui#6646)) **Bug fixes** - Fixed `EuiFlyout` to preserve body scrollbar width on open ([elastic#6645](elastic/eui#6645)) - Fixed `EuiImage`'s full screen mode to not scroll jump & to preserve body scrollbar width on open ([elastic#6645](elastic/eui#6645)) - Fixed `EuiCodeBlock`'s full screen mode to not scroll jump & to preserve body scrollbar width on open ([elastic#6645](elastic/eui#6645)) ## [`76.2.0`](https://github.com/elastic/eui/tree/v76.2.0) - Added new `renderCustomGridBody` escape hatch rendering prop to `EuiDataGrid` ([elastic#6624](elastic/eui#6624)) **Bug fixes** - Fixed visual listbox focus ring bug on non-searchable `EuiSelectable`s ([elastic#6637](elastic/eui#6637)) - Added a legacy `alert` alias for the `warning` `EuiIcon` type ([elastic#6640](elastic/eui#6640)) - Fixed a type definition incorrectly coming from a dev dependency, which was causing issues for some consuming projects ([elastic#6643](elastic/eui#6643)) ## [`76.1.0`](https://github.com/elastic/eui/tree/v76.1.0) - Added more detailed screen reader instructions to `EuiSelectable`, `EuiSuggest`, `EuiSelectableTemplateSitewide`, `EuiRange`, and `EuiDualRange`. ([elastic#6589](elastic/eui#6589)) - Added new `placeholder` prop to `EuiSuperSelect` ([elastic#6630](elastic/eui#6630)) - Added new `setCellPopoverProps` parameter callback to `EuiDataGrid`'s `renderCellPopover` prop ([elastic#6632](elastic/eui#6632)) **Bug fixes** - Fixed an ARIA attribute in `EuiSelectableList` ([elastic#6589](elastic/eui#6589)) - Fixed `EuiSelectable` to no longer show active selection state or respond to the Up/Down arrow keys when focus is inside the selectable container, but not on the searchbox or listbox. ([elastic#6631](elastic/eui#6631)) --------- Co-authored-by: Tiago Costa <tiago.costa@elastic.co>


Summary
closes #6627
In #5613 and #5693, an early return was added to the space/enter keydown listeners to ensure the search clear button still worked without accidentally selecting an option.
It turns out we should have been more aggressive about this early return and put it in front of the entire listener so that the up/down arrow keys also did not function when on the clear button (or any other wildcard interactive content passed by consumers). The arrow keys and enter/space keys should only function when consumers are focused either on the searchbox, or on the listbox.
Before
After
Custom interactive child content within
<EuiSelectable>(should remove focus/active state):QA
General checklist
- [ ] Checked in both light and dark modes- [ ] Checked in mobile- [ ] Props have proper autodocs (using@defaultif default values are missing) and playground toggles- [ ] Added documentation- [ ] Checked Code Sandbox works for any docs examples- [ ] Checked for breaking changes and labeled appropriately- [ ] Updated the Figma library counterpart