Fix JAWS screen reader Enter key not activating SortableItem inner pr…#87114
Conversation
…essables Add onClick handler to SortableItem wrapper to forward synthetic clicks from screen readers (e.g. JAWS Virtual PC Cursor mode) to the inner pressable element. JAWS activates elements via the accessibility API instead of dispatching keydown events, so the existing onKeyDownCapture handler never fires.
|
@ShridharGoel Please copy/paste the Reviewer Checklist from here into a new comment on this PR and complete it. If you have the K2 extension, you can simply click: [this button] |
|
I used VoiceOver because I use a Mac but should work all the same. |
Codecov Report✅ Changes either increased or maintained existing code coverage, great job!
|
Reviewer Checklist
Screenshots/VideosMacOSScreen.Recording.2026-04-04.at.5.17.52.PM.mov |
|
@MobileMage Can you check the TS failures? |
Place role="button" and tabIndex={0} after {...attributes}
spread so they override dnd-kit defaults instead of being
silently overwritten.
|
@ShridharGoel TS failures handled |
|
🚧 @AndrewGable has triggered a test Expensify/App build. You can view the workflow run here. |
|
🧪🧪 Use the links below to test this adhoc build on Android, iOS, and Web. Happy testing! 🧪🧪
|
|
🚀 Deployed to staging by https://github.com/AndrewGable in version: 9.3.55-0 🚀
Bundle Size Analysis (Sentry): |
|
No help site changes are required for this PR. This is a purely technical accessibility fix to |
Explanation of Change
Add an
onClickhandler to theSortableItemwrapper div that forwards screen reader synthetic clicks to the inner pressable. JAWS (in Virtual PC Cursor mode) activates focused elements via the accessibility API, producing a click on the wrapper div instead of dispatching a keydown event. The existingonKeyDownCapturehandler never fires in this case. The new handler checks that the click target is the wrapper itself (not a child) to avoid interfering with normal mouse clicks.Fixed Issues
$ #85900
PROPOSAL: #85900 (comment)
Tests
Offline tests
N/A - This is a screen reader accessibility fix that does not involve network requests.
QA Steps
PR Author Checklist
### Fixed Issuessection aboveTestssectionOffline stepssectionQA stepssectiontoggleReportand notonIconClick)src/languages/*files and using the translation methodSTYLE.md) were followedAvatar, I verified the components usingAvatarare working as expected)StyleUtils.getBackgroundAndBorderStyle(theme.componentBG))npm run compress-svg)Avataris modified, I verified thatAvataris working as expected in all cases)Designlabel and/or tagged@Expensify/designso the design team can review the changes.ScrollViewcomponent to make it scrollable when more elements are added to the page.mainbranch was merged into this PR after a review, I tested again and verified the outcome was still expected according to theTeststeps.Screenshots/Videos
Android: Native
Android: mWeb Chrome
iOS: Native
iOS: mWeb Safari
MacOS: Chrome / Safari
Kapture.2026-04-03.at.18.53.44.mp4