Use a floating action bar for bulk actions - #100291
Conversation
Signed-off-by: krishna2323 <belivethatkg@gmail.com>
Signed-off-by: krishna2323 <belivethatkg@gmail.com>
Signed-off-by: krishna2323 <belivethatkg@gmail.com>
Signed-off-by: krishna2323 <belivethatkg@gmail.com>
Signed-off-by: krishna2323 <belivethatkg@gmail.com>
Signed-off-by: krishna2323 <belivethatkg@gmail.com>
Codecov Report✅ Changes either increased or maintained existing code coverage, great job!
|
Signed-off-by: krishna2323 <belivethatkg@gmail.com>
|
🚧 dannymcclain has triggered a test Expensify/App build. You can view the workflow run here. |
This comment has been minimized.
This comment has been minimized.
|
Is it possible to make the action bar slide in a bit when it first appears? Mostly just to help draw the eye to it, since it will be in a new position. |
|
The inbetweener sizes can get smushed, we might want to guard against that somehow (throw buttons in the more Menu so we have max two visible buttons at the small inbetweener size?) |
Agree, I think this would be really helpful.
Also agree. I did some quick Figma explorations for changing the layout/wrapping the buttons when it gets to the those weird inbetweener sizes, but just moving things into the more menu that don't fit would be SO much better. |
|
This is feeling pretty good to me overall! @Expensify/product @Expensify/design Another common interaction I see with this type of bulk select is being able to hit |
|
Love that idea Danny. |
|
Adhoc looks very slick. One NAB thought: Is the bulk actions menu too small? We'll be working against over a decade of customer muscle memory to start, since bulk actions have been top-anchored for that long. I almost wonder if we want to start with a bigger FAB so that it's obvious to start (and we could dial in size over time). |
|
Hmm that's a fair shout, but our next button size up is quite large. Something we are planning to tackle... it might be nice if these were 32 instead of 28 for instance. Anyhoo, I say we keep the size for now.
I like this idea a lot! We should probably optimize for 3 digits since users can select more than the current view.
Similar feelings... I would be curious to see it in light mode popovers though, it might make the bar standout more in a good way? |
Makes sense to meeee
I intentionally designed these popovers to be inverted to match/keep them "linked" to the bar—but I'm not against trying them out the other way! |
|
I'd love to see how it looks even just a mock |
Signed-off-by: krishna2323 <belivethatkg@gmail.com>
Signed-off-by: krishna2323 <belivethatkg@gmail.com>
Signed-off-by: krishna2323 <belivethatkg@gmail.com>
Signed-off-by: krishna2323 <belivethatkg@gmail.com>
Signed-off-by: krishna2323 <belivethatkg@gmail.com>
Signed-off-by: krishna2323 <belivethatkg@gmail.com>
Signed-off-by: krishna2323 <belivethatkg@gmail.com>
|
@Expensify/design @JmillsExpensify All the feedback above is in. Recapping what changed:
Monosnap.screencast.2026-09-07.16-19-50.mp4Also, here’s how the actions bar would look if we don’t invert the theme.
|
JmillsExpensify
left a comment
There was a problem hiding this comment.
Looks really great to product.
Reviewer Checklist
Screenshots/VideosScreen.Recording.2026-09-17.at.2.54.18.PM.mov |
Screen.Recording.2026-09-17.at.3.00.33.PM.movNAB: The position of More menu does not change with width change. |
JS00001
left a comment
There was a problem hiding this comment.
Looking good, a few comments
Signed-off-by: krishna2323 <belivethatkg@gmail.com>
|
Nice work on this! lets move to the other tables |
|
🚧 JS00001 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! 🧪🧪
|
|
✋ This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release. |
|
🚀 Deployed to staging by https://github.com/JS00001 in version: 9.4.82-0 🚀
|
|
Yes, help site changes are required. Draft PR: Docs updates for E/A#100291 bulk action bar replaces Selected dropdown Why: 20 step-by-step instructions across 13 articles under I verified the new behavior against the live UI on web at 1600x900 before writing: selecting rows on Expenses or Reports opens a bar floating over the bottom of the list, with up to three actions as buttons and the rest behind More. What the docs PR does Each affected step now names both platforms, since only that one step differs: The "if you don't see it, select More" hedge is deliberate — the bar decides at render time which actions get buttons, so no article can safely promise a given action is a button. Getting-Started-with-the-Spend-Page.md also gets one new section explaining the bar once (button limit, More, the Select all spinner, and clearing the selection with the close button or Left alone on purpose
One thing worth your eye: I did update View-and-Reconcile-Expensify-Card-Expenses.md on the basis that the reconciliation view is a Search page and gets the bar (your test step 12 implies it does). If that view keeps the old dropdown, that file should revert.
@Krishna2323, please review the linked help site PR and confirm it reflects the current behavior. Then mark the linked help site PR view run · no recording available |
|
Deploy Blocker #101597 was identified to be related to this PR. |
|
🚀 Deployed to staging by https://github.com/JS00001 in version: 9.4.86-0 🚀
|
|
Yes — help site changes are required, and I opened a draft PR for them: Docs updates for E/A#100291 floating bulk action bar replaces Selected dropdown Why: on wide layouts the Search pages no longer swap the search input and filter chips for the green Selected dropdown. The filters stay put and a floating bar appears at the bottom of the list with the count, the top actions as buttons, a More menu for the rest, and a close icon. 15 help articles still tell web readers to click Selected at the top, which no longer exists on a wide screen. Narrow layouts and the report view are unchanged, so those steps were left alone. What changed, and what I deliberately left aloneUpdated (15 files) — every web-facing step that pointed at the old dropdown on the Spend page's Expenses / Reports lists and the Expensify Card reconciliation view:
Mobile steps keep Selected; articles covering both platforms now split the two. Not changed:
How I verified the labels — driven in a live wide-layout web session, not read off the diff:
Since which actions sit inline versus behind More depends on the action count and window width, the steps name the action and add "select More if you don't see it" rather than hard-coding a position. Written against @Krishna2323, please review the linked help site PR and confirm it reflects the current behavior. Then mark the linked help site PR |
|
🚀 Deployed to staging by https://github.com/JS00001 in version: 9.4.89-0 🚀
|
|
Already done — no second PR needed. The help site changes for this PR are in [No QA] Docs updates for E/A#100291 floating bulk action bar replaces Selected dropdown, still open as a draft, labeled I re-verified it rather than opening a duplicate:
Two notes:
@Krishna2323, please review the linked help site PR and confirm it reflects the current behavior. Then mark the linked help site PR |
|
🚀 Deployed to production by https://github.com/luacmartins in version: 9.4.89-0 🚀
Bundle Size Analysis (Sentry): |



Explanation of Change
Fixed Issues
$ #98651
PROPOSAL:
Tests
More.More; remaining actions are inMore.Moremenu: Opens upward, right-aligned withMore, uses the inverted dark theme with dividers. Caret changes to⌃.Export): Opens upward, aligned to the button's left edge. Selecting an item performs the action and closes the menu.Moremenu items.Pay→ choose payment method. Verify KYC wall for an unverified account and successful payment.N selecteddropdown, no floating bar.Offline tests
QA Steps
Same as tests
Verify that no errors appear in the JS console
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
android_hybrid.mp4
Android: mWeb Chrome
android_mWeb.mp4
iOS: Native
ios_hybrid.mp4
iOS: mWeb Safari
ios_mWeb.mp4
MacOS: Chrome / Safari
web_chrome.mp4