Skip to content

Use a floating action bar for bulk actions - #100291

Merged
JS00001 merged 35 commits into
Expensify:mainfrom
Krishna2323:krishna2323/issue/98651
Sep 17, 2026
Merged

JS00001 merged 35 commits into
Expensify:mainfrom
Krishna2323:krishna2323/issue/98651

Conversation

@Krishna2323

@Krishna2323 Krishna2323 commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

Explanation of Change

Fixed Issues

$ #98651
PROPOSAL:

Tests

  1. Wide layout, Spend → Expenses: Select 2 rows. Floating bar appears centred at the bottom; search input and filter chips remain visible.
  2. Bar geometry: 68px tall, 20px from the list bottom, 16px radius. Buttons are 28px, count is 13px, close button matches button height.
  3. ≤3 actions: All render as buttons, no More.
  4. >3 actions: Exactly 3 buttons + More; remaining actions are in More.
  5. More menu: Opens upward, right-aligned with More, uses the inverted dark theme with dividers. Caret changes to .
  6. Sub-menu (Export): Opens upward, aligned to the button's left edge. Selecting an item performs the action and closes the menu.
  7. Hover: Leading icon turns green, matching More menu items.
  8. Bottom of long list: Last row clears the bar with a 16px gap and remains fully readable/clickable. Deselecting causes no visible jump.
  9. Select all matching: Show a spinner instead of the count until the server total arrives; don't flash the loaded-row count.
  10. Bulk pay: Select payable expenses → Pay → choose payment method. Verify KYC wall for an unverified account and successful payment.
  11. Expense reports & grouped rows: Bar appears and counts correctly; these use a different selection path.
  12. Card statements / totals footer: Bar sits above the footer.
  13. Narrow layout: Unchanged — old green N selected dropdown, no floating bar.
  14. Report view: Unchanged — header dropdown. Out of scope.
  15. Dark theme: Bar renders light (true inversion). Confirm this is expected.
  • Verify that no errors appear in the JS console

Offline tests

  1. Go Offline: With rows selected, verify the offline indicator and bar don't overlap.

QA Steps

  • Same as tests

  • Verify that no errors appear in the JS console

PR Author Checklist

  • I linked the correct issue in the ### Fixed Issues section above
  • I wrote clear testing steps that cover the changes made in this PR
    • I added steps for local testing in the Tests section
    • I added steps for the expected offline behavior in the Offline steps section
    • I added steps for Staging and/or Production testing in the QA steps section
    • I added steps to cover failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
    • I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)
    • I tested this PR with a High Traffic account against the staging or production API to ensure there are no regressions (e.g. long loading states that impact usability).
  • I included screenshots or videos for tests on all platforms
  • I ran the tests on all platforms & verified they passed on:
    • Android: Native
    • Android: mWeb Chrome
    • iOS: Native
    • iOS: mWeb Safari
    • MacOS: Chrome / Safari
    • MacOS: Desktop
  • I verified there are no console errors (if there's a console error not related to the PR, report it or open an issue for it to be fixed)
  • I verified there are no new alerts related to the canBeMissing param for useOnyx
  • I followed proper code patterns (see Reviewing the code)
    • I verified that any callback methods that were added or modified are named for what the method does and never what callback they handle (i.e. toggleReport and not onIconClick)
    • I verified that comments were added to code that is not self explanatory
    • I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
    • I verified any copy / text shown in the product is localized by adding it to src/languages/* files and using the translation method
      • If any non-english text was added/modified, I used JaimeGPT to get English > Spanish translation. I then posted it in #expensify-open-source and it was approved by an internal Expensify engineer. Link to Slack message:
    • I verified all numbers, amounts, dates and phone numbers shown in the product are using the localization methods
    • I verified any copy / text that was added to the app is grammatically correct in English. It adheres to proper capitalization guidelines (note: only the first word of header/labels should be capitalized), and is either coming verbatim from figma or has been approved by marketing (in order to get marketing approval, ask the Bug Zero team member to add the Waiting for copy label to the issue)
    • I verified proper file naming conventions were followed for any new files or renamed files. All non-platform specific files are named after what they export and are not named "index.js". All platform-specific files are named for the platform the code supports as outlined in the README.
    • I verified the JSDocs style guidelines (in STYLE.md) were followed
  • If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
  • I followed the guidelines as stated in the Review Guidelines
  • I tested other components that can be impacted by my changes (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar are working as expected)
  • I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
  • I verified any variables that can be defined as constants (ie. in CONST.ts or at the top of the file that uses the constant) are defined as such
  • I verified that if a function's arguments changed that all usages have also been updated correctly
  • If any new file was added I verified that:
    • The file has a description of what it does and/or why is needed at the top of the file if the code is not self explanatory
  • If a new CSS style is added I verified that:
    • A similar style doesn't already exist
    • The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(theme.componentBG))
  • If new assets were added or existing ones were modified, I verified that:
    • The assets are optimized and compressed (for SVG files, run npm run compress-svg)
    • The assets load correctly across all supported platforms.
  • If the PR modifies code that runs when editing or sending messages, I tested and verified there is no unexpected behavior for all supported markdown - URLs, single line code, code blocks, quotes, headings, bold, strikethrough, and italic.
  • If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
  • If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
  • If the PR modifies a component or page that can be accessed by a direct deeplink, I verified that the code functions as expected when the deeplink is used - from a logged in and logged out account.
  • If the PR modifies the UI (e.g. new buttons, new UI components, changing the padding/spacing/sizing, moving components, etc) or modifies the form input styles:
    • I verified that all the inputs inside a form are aligned with each other.
    • I added Design label and/or tagged @Expensify/design so the design team can review the changes.
  • If a new page is added, I verified it's using the ScrollView component to make it scrollable when more elements are added to the page.
  • I added unit tests for any new feature or bug fix in this PR to help automatically prevent regressions in this user flow.
  • If the main branch was merged into this PR after a review, I tested again and verified the outcome was still expected according to the Test steps.

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

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

codecov Bot commented Sep 3, 2026

Copy link
Copy Markdown

Codecov Report

✅ Changes either increased or maintained existing code coverage, great job!

Files with missing lines Coverage Δ
src/CONST/index.ts 91.52% <ø> (ø)
src/components/BulkActionBar/popoverPosition.ts 100.00% <100.00%> (ø)
src/components/Search/index.tsx 58.17% <100.00%> (+0.44%) ⬆️
src/libs/shouldPopoverUseScrollView.ts 100.00% <100.00%> (ø)
src/styles/index.ts 64.03% <100.00%> (+0.17%) ⬆️
src/styles/variables.ts 100.00% <ø> (ø)
...ponents/Search/hooks/useShouldShowBulkActionBar.ts 83.33% <83.33%> (ø)
src/hooks/useInvertedThemePreference.ts 50.00% <50.00%> (ø)
src/hooks/useSearchBulkActions.ts 76.08% <75.00%> (+1.32%) ⬆️
src/pages/Search/SearchPageWide.tsx 0.00% <0.00%> (ø)
... and 6 more
... and 186 files with indirect coverage changes

Signed-off-by: krishna2323 <belivethatkg@gmail.com>
@github-actions

github-actions Bot commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

🚧 dannymcclain has triggered a test Expensify/App build. You can view the workflow run here.

@github-actions

This comment has been minimized.

@shawnborton

Copy link
Copy Markdown
Contributor

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.

@shawnborton

Copy link
Copy Markdown
Contributor

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?)

@dannymcclain

Copy link
Copy Markdown
Contributor

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.

Agree, I think this would be really helpful.

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?)

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.

@dannymcclain

Copy link
Copy Markdown
Contributor

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 Esc to deselect/dismiss the floating bar—are y'all against adding that behavior here?

@shawnborton

Copy link
Copy Markdown
Contributor

Love that idea Danny.

@dubielzyk-expensify

Copy link
Copy Markdown
Contributor

I wonder if we should have a min-width on the number here itself so we don't see this minor pixel jumping:

CleanShot.2026-09-04.at.10.08.18.mp4

I was kinda expecting the popover menu to be in light mode but I guess it being dark makes sense!?

CleanShot 2026-09-04 at 10 08 57@2x

@JmillsExpensify

Copy link
Copy Markdown
Contributor

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).

@shawnborton

Copy link
Copy Markdown
Contributor

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 wonder if we should have a min-width on the number here itself so we don't see this minor pixel jumping:

I like this idea a lot! We should probably optimize for 3 digits since users can select more than the current view.

I was kinda expecting the popover menu to be in light mode but I guess it being dark makes sense!?

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?

@dannymcclain

Copy link
Copy Markdown
Contributor

We should probably optimize for 3 digits since users can select more than the current view.

Makes sense to meeee

I was kinda expecting the popover menu to be in light mode but I guess it being dark makes sense!?

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?

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!

@dubielzyk-expensify

Copy link
Copy Markdown
Contributor

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>
@Krishna2323

Copy link
Copy Markdown
Contributor Author

@Expensify/design @JmillsExpensify

All the feedback above is in. Recapping what changed:

  • Fixed width for selected count
  • Slide-in animation
  • Overflow at in-between widths is fixed. The bar measures itself against the container and moves buttons into More before reaching the edges, so it can’t overflow anymore. In-between widths default to 2 buttons + More, and that only drops further if the content genuinely doesn’t fit.
  • Esc clears the selection.
Monosnap.screencast.2026-09-07.16-19-50.mp4

Also, here’s how the actions bar would look if we don’t invert the theme.

dark_mode light_mode

@JmillsExpensify
JmillsExpensify requested review from JmillsExpensify and removed request for heyjennahay September 16, 2026 19:35

@JmillsExpensify JmillsExpensify left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks really great to product.

@shubham1206agra

Copy link
Copy Markdown
Contributor

Reviewer Checklist

  • I have verified the author checklist is complete (all boxes are checked off).
  • I verified the correct issue is linked in the ### Fixed Issues section above
  • I verified testing steps are clear and they cover the changes made in this PR
    • I verified the steps for local testing are in the Tests section
    • I verified the steps for Staging and/or Production testing are in the QA steps section
    • I verified the steps cover any possible failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
    • I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)
  • I checked that screenshots or videos are included for tests on all platforms
  • I included screenshots or videos for tests on all platforms
  • I verified that the composer does not automatically focus or open the keyboard on mobile unless explicitly intended. This includes checking that returning the app from the background does not unexpectedly open the keyboard.
  • I verified tests pass on all platforms & I tested again on:
    • Android: HybridApp
    • Android: mWeb Chrome
    • iOS: HybridApp
    • iOS: mWeb Safari
    • MacOS: Chrome / Safari
  • If there are any errors in the console that are unrelated to this PR, I either fixed them (preferred) or linked to where I reported them in Slack
  • I verified proper code patterns were followed (see Reviewing the code)
    • I verified that any callback methods that were added or modified are named for what the method does and never what callback they handle (i.e. toggleReport and not onIconClick).
    • I verified that comments were added to code that is not self explanatory
    • I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
    • I verified any copy / text that was added to the app is grammatically correct in English. It adheres to proper capitalization guidelines (note: only the first word of header/labels should be capitalized), and is either coming verbatim from figma or has been approved by marketing (in order to get marketing approval, ask the Bug Zero team member to add the Waiting for copy label to the issue)
  • If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
  • I verified that this PR follows the guidelines as stated in the Review Guidelines
  • I verified other components that can be impacted by these changes have been tested, and I retested again (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar have been tested & I retested again)
  • If a new component is created I verified that:
    • A similar component doesn't exist in the codebase
    • All props are defined accurately and each prop has a /** comment above it */
    • The file is named correctly
    • The component has a clear name that is non-ambiguous and the purpose of the component can be inferred from the name alone
    • The only data being stored in the state is data necessary for rendering and nothing else
    • For Class Components, any internal methods passed to components event handlers are bound to this properly so there are no scoping issues (i.e. for onClick={this.submit} the method this.submit should be bound to this in the constructor)
    • Any internal methods bound to this are necessary to be bound (i.e. avoid this.submit = this.submit.bind(this); if this.submit is never passed to a component event handler like onClick)
    • All JSX used for rendering exists in the render method
    • The component has the minimum amount of code necessary for its purpose, and it is broken down into smaller components in order to separate concerns and functions
  • If any new file was added I verified that:
    • The file has a description of what it does and/or why is needed at the top of the file if the code is not self explanatory
  • If a new CSS style is added I verified that:
    • A similar style doesn't already exist
    • The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(theme.componentBG)
  • If the PR modifies code that runs when editing or sending messages, I tested and verified there is no unexpected behavior for all supported markdown - URLs, single line code, code blocks, quotes, headings, bold, strikethrough, and italic.
  • If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
  • If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
  • If the PR modifies a component or page that can be accessed by a direct deeplink, I verified that the code functions as expected when the deeplink is used - from a logged in and logged out account.
  • If the PR modifies the UI (e.g. new buttons, new UI components, changing the padding/spacing/sizing, moving components, etc) or modifies the form input styles:
    • I verified that all the inputs inside a form are aligned with each other.
    • I added Design label and/or tagged @Expensify/design so the design team can review the changes.
  • For any bug fix or new feature in this PR, I verified that sufficient unit tests are included to prevent regressions in this flow.
  • If the main branch was merged into this PR after a review, I tested again and verified the outcome was still expected according to the Test steps.
  • I have checked off every checkbox in the PR reviewer checklist, including those that don't apply to this PR.

Screenshots/Videos

Screen.Recording.2026-09-17.at.2.54.18.PM.mov

@shubham1206agra

Copy link
Copy Markdown
Contributor
Screen.Recording.2026-09-17.at.3.00.33.PM.mov

NAB: The position of More menu does not change with width change.

@melvin-bot
melvin-bot Bot requested a review from JS00001 September 17, 2026 09:31

@JS00001 JS00001 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looking good, a few comments

Comment thread src/components/Search/SearchPageHeader/SearchActionsBarWide.tsx Outdated
Comment thread src/components/Search/hooks/useShouldShowBulkActionBar.ts
Comment thread src/components/Search/SearchBulkActionsBarWide.tsx Outdated
Comment thread src/components/Search/SearchBulkActionsButton.tsx
Comment thread src/components/Search/index.tsx Outdated
Comment thread src/libs/shouldPopoverUseScrollView.ts
Signed-off-by: krishna2323 <belivethatkg@gmail.com>
@JS00001
JS00001 merged commit 704785e into Expensify:main Sep 17, 2026
52 of 77 checks passed
@JS00001

JS00001 commented Sep 17, 2026

Copy link
Copy Markdown
Contributor

Nice work on this! lets move to the other tables

@github-actions

Copy link
Copy Markdown
Contributor

🚧 JS00001 has triggered a test Expensify/App build. You can view the workflow run here.

@OSBotify

Copy link
Copy Markdown
Contributor

✋ This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release.

@OSBotify

Copy link
Copy Markdown
Contributor

🚀 Deployed to staging by https://github.com/JS00001 in version: 9.4.82-0 🚀

platform result
🕸 web 🕸 success ✅
🤖 android 🤖 cancelled 🔪
🍎 iOS 🍎 cancelled 🔪

@MelvinBot

MelvinBot commented Sep 17, 2026

Copy link
Copy Markdown
Contributor

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 App/docs/articles tell web users to click Selected at the top of the page. This PR removed that control on the wide layout, so those steps now lead nowhere.

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:

3. Select **Delete**:
   - **Web:** In the bulk action bar at the bottom of the list, select **Delete**. If you don't see it, select **More**, then **Delete**.
   - **Mobile:** Tap **Selected**, then tap **Delete**.

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 Esc), so the per-step instructions stay short.

Left alone on purpose

  • Selecting expenses inside a report — the report view still uses Selected, per test step 14.
  • Narrow-layout and mobile-only steps — unchanged, per test step 13.
  • Workspace settings tables and the Expensify Card list — this PR only touched the Search pages.

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.

npm run spell-changed passes on all 13 files.

@Krishna2323, please review the linked help site PR and confirm it reflects the current behavior. Then mark the linked help site PR Ready for review


view run · no recording available

@lanitochka17

Copy link
Copy Markdown

Deploy Blocker #101597 was identified to be related to this PR.

@OSBotify

Copy link
Copy Markdown
Contributor

🚀 Deployed to staging by https://github.com/JS00001 in version: 9.4.86-0 🚀

platform result
🕸 web 🕸 success ✅
🤖 android 🤖 success ✅
🍎 iOS 🍎 success ✅

@MelvinBot

Copy link
Copy Markdown
Contributor

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 alone

Updated (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:

Getting-Started-with-the-Spend-Page.md, How-to-Export-Expenses.md, How-to-Export-Reports.md, Search-and-Download-Expenses.md, Edit-Expenses.md, Adding-Attendees.md, How-to-Delete-Expenses.md, How-to-Merge-Expenses.md, How-to-Duplicate-an-Expense.md, Duplicate-a-Report.md, Approve-Expenses.md, Create-and-Submit-Reports.md, Reimbursement-Payment-Methods.md, View-and-Reconcile-Expensify-Card-Expenses.md, Free-Features-in-Expensify.md.

Mobile steps keep Selected; articles covering both platforms now split the two. Getting-Started-with-the-Spend-Page.md explains the bar once — count, More, filters staying visible, and how to clear the selection.

Not changed:

  • The report view still uses the header dropdown, so Managing-Expenses-in-a-Report.md and the in-report steps in How-to-Merge-Expenses.md and How-to-Delete-Expenses.md stay as they are.
  • Workspace and settings lists (per diem, categories, tags, distance rates, personal expense rules) and the custom agents list use a different selection UI.
  • All mobile and mWeb steps.

How I verified the labels — driven in a live wide-layout web session, not read off the diff:

  • Expenses page, 2 selected: 2 selected, Edit multiple, Export, Hold, More, close icon. More held Merge, Move to report, Duplicate expenses, Delete.
  • Reports page, 2 selected: 2 selected, Export, Download reports, Duplicate reports, Delete, close icon — no More at that action count.
  • The search box and the Filters, Display, Save, Create controls stayed visible throughout.

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 docs/HELPSITE_NAMING_CONVENTIONS.md, docs/HELP_AUTHORING_GUIDELINES.md, and docs/TEMPLATE.md.

@Krishna2323, please review the linked help site PR and confirm it reflects the current behavior. Then mark the linked help site PR Ready for review

@OSBotify

Copy link
Copy Markdown
Contributor

🚀 Deployed to staging by https://github.com/JS00001 in version: 9.4.89-0 🚀

platform result
🕸 web 🕸 success ✅
🤖 android 🤖 success ✅
🍎 iOS 🍎 success ✅

@MelvinBot

Copy link
Copy Markdown
Contributor

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 HelpDot, assigned to you.

I re-verified it rather than opening a duplicate:

  • Still current. No docs/articles changes have landed on main since the branch point, so nothing new references the old Selected dropdown and nothing in the PR is stale.
  • Checks green. spellcheck, build, verify, and check all pass. The only failing check is Check independent approval, which is expected on a draft and not actionable.
  • Scope unchanged. 15 articles, 83 additions / 44 deletions — every web-facing step that pointed at the old Selected dropdown on the Spend page's Expenses / Reports lists and the Expensify Card reconciliation view. Mobile steps keep Selected; the report view and the workspace/settings lists were left alone because this PR did not change their selection UI.

Two notes:

  • The title now reads [No QA] Docs updates for E/A#100291 …. github-actions[bot] added that prefix automatically for a docs-only PR; I left it rather than reverting something the repo's own automation will re-apply.
  • Web - Spend - Floating bar disappear after cancel the Download action was flagged as a deploy blocker related to this PR. It is a bug inside the bar, not a removal of it, so the documented steps still hold. If the bar were reverted instead of fixed, the docs PR should be closed.

@Krishna2323, please review the linked help site PR and confirm it reflects the current behavior. Then mark the linked help site PR Ready for review

@OSBotify

Copy link
Copy Markdown
Contributor

🚀 Deployed to production by https://github.com/luacmartins in version: 9.4.89-0 🚀

platform result
🕸 web 🕸 success ✅
🤖 android 🤖 success ✅
🍎 iOS 🍎 failure ❌

Bundle Size Analysis (Sentry):

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

10 participants