fix: Screen Reader: Workspace: 3-dot More button in Workspace container not focusable or operable#84124
Conversation
|
@ikevin127 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] |
…bility-Tracking-Make-Element-Focusable
…bility-Tracking-Make-Element-Focusable
Reviewer Checklist
Screenshots/VideosScreen.Recording.2026-02-25.at.19.37.43.mov |
|
Conflicts unfortunately. |
…bility-Tracking-Make-Element-Focusable # Conflicts: # src/pages/workspace/WorkspacesListRow.tsx
trjExpensify
left a comment
There was a problem hiding this comment.
Re-work of an accessibility project PR 👍
|
✋ This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release. |
|
🚧 @yuwenmemon 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/yuwenmemon in version: 9.3.32-0 🚀
|
|
Deploy Blocker #84426 was identified to be related to this PR. |
The workspaceListRBR style (marginTop: 10, flexDirection: column) was causing vertical misalignment of the RBR indicator in workspace list rows at narrow viewport widths (< 1024px). After PR #84124 moved the ThreeDotsSection outside PressableWithoutFeedback, the marginTop offset no longer aligns with the workspace name row. The parent Views already have alignItemsCenter for proper vertical centering. Co-authored-by: Marco Chávez <marcochavezf@users.noreply.github.com>
|
🚀 Deployed to production by https://github.com/blimpich in version: 9.3.32-3 🚀
|
Explanation of Change
The parent
PressableWithoutFeedbackinWorkspacesListPage.tsxdefaults toaccessible={true}, which groups all children into a single VoiceOver element — making the ThreeDotsMenu invisible to screen readers.Fix:
Set
accessible={false}on the parent and moved accessibility intoWorkspacesListRow.tsx— the content area gets its ownPressableWithoutFeedbackwith a descriptive label, while ThreeDotsMenu sits outside it so VoiceOver can focus both independently. Wide layoutThreeDotMenuOrPendingIconis left untouched to preserve column alignment.Fixed Issues
$ #77471
$ #79231
$ #83965
PROPOSAL: #79231 (comment)
Tests
VoiceOver (iOS) — #77471 fix:
Column alignment (wide layout) — #82727 regression check:
7. Open the app on web (desktop/wide viewport)
8. Go to the Workspaces list with 2+ workspaces
9. Verify Owner and Workspace Type columns are properly aligned across rows
Arrow click (wide layout) — #82739 regression check:
10. On web (desktop/wide viewport), click the arrow icon on any workspace row
11. Verify it navigates to the workspace page
Padding dead zone (wide layout) — #83965 regression check:
12. On web (desktop/wide viewport), click the empty area above or below the workspace avatar within a row
13. Verify it navigates to the workspace page (same as clicking the row content)
Offline tests
Same as tests
QA Steps
// TODO: These must be filled out, or the issue title must include "[No QA]."
Same as tests
PR Author Checklist
### Fixed Issuessection aboveTestssectionOffline stepssectionQA stepssectioncanBeMissingparam foruseOnyxtoggleReportand 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
Screen_Recording_20260224_172300_New.Expensify.Dev.mp4
Android: mWeb Chrome
Screen_Recording_20260224_172721_Chrome.mp4
iOS: Native
Screen.Recording.2026-02-24.at.4.57.28.in.the.afternoon.mov
iOS: mWeb Safari
MacOS: Chrome / Safari
Screen.Recording.2026-02-24.at.4.40.07.in.the.afternoon.mov
Screen.Recording.2026-03-04.at.12.23.31.in.the.afternoon.mov