ActionList: Prevent scroll when an item is selected with Space #4259
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.
But is it safe??
The way to prevent unwanted scroll is to
event.preventDefaulton ActionList keypress.const itemKeyPressHandler = (event: React.KeyboardEvent<HTMLLIElement>) => { + if (event.key === 'Space') { + event.preventDefault() // prevent scrolling on Space + + // immediately reset defaultPrevented once it's job is done + // so as to not disturb the functions that use that event after this + event.defaultPrevented = false; + }; // Enter and Space both select item if (event.key === 'Enter' || event.key === 'Space') onSelect(event, afterSelect) }We don't want this to have any unwanted side effects. This is the code block that is affected, simplified for readability:
afterSelectis called when it should, closing the menu automatically 🟢ActionList.LinkItem: Links don't respond toSpace, so this is unaffected 🟢onSelectin dotcom that check forevent.defaultPrevented, There are none, so this breaks nothing 🟢