9.4.27-2
Expensify/App9.4.27-2Jul 6, 2026by github-actions[bot]
AI Summary
This release focuses on refactoring existing components, such as decomposing the ReportActionsList and migrating accounting flows to React Navigation modal screens. It also includes several performance optimizations, bug fixes for UI glitches and navigation issues, and the addition of new features like People Admin approval access and a GL code column in expense tables.
Key Highlights
- Migrate ConnectToQuickbooksOnlineFlow and ConnectToXeroFlow to @react-navigation modal screens
- [Performance] Cancel telemetry span when user discards expense without submitting
- Decompose ReportActionsList (multiple PRs)
- Add People Admin workspace approval access
- Fix workspaces list flash on narrow when creating a workspace
New Features
- Add People Admin workspace approval access
- Add Tag GL code column to expense tables
- feat(card): prompt for personal details before virtual card reveal
- Add Rillet integration
- Add telemetry span for Share Extension submit flow
Full Release Notes
## What's Changed * Add a tooltip on hover of the Paid report label by @dukenv0307 in https://github.com/Expensify/App/pull/94690 * [Submit] Submit button with manager email prompt take 2 by @hungvu193 in https://github.com/Expensify/App/pull/94392 * Decompose ReportActionsList: 10 by @LukasMod in https://github.com/Expensify/App/pull/94149 * Decompose ReportActionsList: 11 by @LukasMod in https://github.com/Expensify/App/pull/94817 * Fix: Delete error only shows the updated message after opening Expensify Card by @staszekscp in https://github.com/Expensify/App/pull/94416 * [No QA] Always show switch to classic button in dev by @arosiclair in https://github.com/Expensify/App/pull/94885 * Mark as done cta follow up 1 by @jayeshmangwani in https://github.com/Expensify/App/pull/94413 * [Performance] Cancel telemetry span when user discards expense without submitting by @JakubKorytko in https://github.com/Expensify/App/pull/94451 * Add allReportActionsList to updateSplitTransactions function by @cretadn22 in https://github.com/Expensify/App/pull/94301 * Fix distance rate auto-selection and tax sync on date change by @Krishna2323 in https://github.com/Expensify/App/pull/93237 * [NO QA] Prevent error on country selection screen when opened without a selected country by @blimpich in https://github.com/Expensify/App/pull/94632 * Open parent report in super wide RHP from Home and fix background on refresh by @MelvinBot in https://github.com/Expensify/App/pull/93614 * [Payment due @ikevin127] [No QA] Add directive to support blocking of BootSplash on devices with jailbreak by @mateuuszzzzz in https://github.com/Expensify/App/pull/94701 * fix: The LHN within the Spend tab is not remembered when navigating to Inbox by @nkdengineer in https://github.com/Expensify/App/pull/93396 * [CP Staging] Fix bank account label not showing in search bar after reopen by @allgandalf in https://github.com/Expensify/App/pull/94987 * [No QA] perf: replace reduce with for-of in reportsByPolicyID to reduce GC pressure by @TMisiukiewicz in https://github.com/Expensify/App/pull/94980 * Victory Chart: Legend overlaps x-axis labels on vertical charts by @lorretheboy in https://github.com/Expensify/App/pull/94763 * Fix spend rule currency deploy blockers by @JS00001 in https://github.com/Expensify/App/pull/94207 * Migrate ConnectToQuickbooksOnlineFlow and ConnectToXeroFlow to @react-navigation modal screens by @borys3kk in https://github.com/Expensify/App/pull/92512 * [No QA] Request reviewers when a PR adds a new Onyx.connectWithoutView call by @cristipaval in https://github.com/Expensify/App/pull/94846 * [Payment due @hoangzinh] Fixed Attendee type to match with BE by @shubham1206agra in https://github.com/Expensify/App/pull/94784 * Fix workspaces list flash on narrow when creating a workspace by @sumo-slonik in https://github.com/Expensify/App/pull/93915 * [No QA] fix: polar chart label spacing, text clarity by @daledah in https://github.com/Expensify/App/pull/93245 * Refactor getLoginsByAccountIDs to accept personalDetailsList and update related usages by @bernhardoj in https://github.com/Expensify/App/pull/94759 * Harden font loading for charts by @roryabraham in https://github.com/Expensify/App/pull/93647 * Logged-out sign-in page URL shows /Home instead of root by @sumo-slonik in https://github.com/Expensify/App/pull/94433 * Fix stale navigation and empty Plaid step on offline to online in USD VBBA by @VickyStash in https://github.com/Expensify/App/pull/93037 * Pass originalReportActions from useOnyx to deleteReportComment by @bernhardoj in https://github.com/Expensify/App/pull/94765 * Migrate workspace per diem page to the new Table component by @Krishna2323 in https://github.com/Expensify/App/pull/94912 * [No QA] fix - NetworkTest flaky by @rinej in https://github.com/Expensify/App/pull/94862 * Migrate InteractionManager - (Newly added usages) part 2 by @collectioneur in https://github.com/Expensify/App/pull/94474 * Fix: show generic "Make admin" copy for group chat members by @MelvinBot in https://github.com/Expensify/App/pull/94989 * Fix approval workflows help link to point to existing Add-Approvals article by @MelvinBot in https://github.com/Expensify/App/pull/94397 * refactor: extract shared Search list view scaffold (hook + layout) by @BartekObudzinski in https://github.com/Expensify/App/pull/94573 * Fix: Card name in card list and card name field are blank on admin side by @nyomanjyotisa in https://github.com/Expensify/App/pull/93554 * Add Tag GL code column to expense tables by @mukhrr in https://github.com/Expensify/App/pull/93146 * [No QA] Update submitter's ability to split expenses by @VictoriaExpensify in https://github.com/Expensify/App/pull/94799 * Fix withdrawal subtitle overlapping amount on mobile Bank Reconciliation list by @MelvinBot in https://github.com/Expensify/App/pull/94749 * Refactor settlement button to use dynamic verify account by @jmusial in https://github.com/Expensify/App/pull/94177 * [No QA]Rename selectors/Attributes to ReportAttributes by @mountiny in https://github.com/Expensify/App/pull/94838 * Move ONYXKEYS.DERIVED.FLAGGED_EXPENSES into custom hook by @LukasMod in https://github.com/Expensify/App/pull/94299 * Reinitialize Pusher during delegate account transitions by @nabi-ebrahimi in https://github.com/Expensify/App/pull/93265 * [Payment due @truph01] Fix attendees fallback by @lakchote in https://github.com/Expensify/App/pull/94481 * Add customUnitRateOutOfDateRange violation for date-bound mileage rates by @Krishna2323 in https://github.com/Expensify/App/pull/93555 * Add People Admin workspace approval access by @ShridharGoel in https://github.com/Expensify/App/pull/92875 * Add conciergeReportID handling across various components by @cretadn22 in https://github.com/Expensify/App/pull/94991 * refactor createDraftTransactionAndNavigateToParticipantSelector to use useOnyx data by @daledah in https://github.com/Expensify/App/pull/93550 * fix: Wallet - "Choose an account" page shows extra left margin by @mhawryluk in https://github.com/Expensify/App/pull/94680 * refactor isReportInGroupPolicy to use isGroupPolicy instead part 2 by @daledah in https://github.com/Expensify/App/pull/93549 * Fix duplicate supportal sign-in that trips the support-token rate limit by @allgandalf in https://github.com/Expensify/App/pull/95042 * Fix duplicate Limit type row after revealing virtual card details by @MelvinBot in https://github.com/Expensify/App/pull/94068 * Require date in new manual expense flow for distance, time, and invoice by @MelvinBot in https://github.com/Expensify/App/pull/94545 * [Onyx bump] Bump react-native-onyx from 3.0.86 to 3.0.88 by @elirangoshen in https://github.com/Expensify/App/pull/95044 * [No QA] Import CLI, SafeString, and Str.dedent from expensify-common by @roryabraham in https://github.com/Expensify/App/pull/93222 * [No QA] Gate git fetch --depth=1 behind CI to avoid shallowing local clones by @MelvinBot in https://github.com/Expensify/App/pull/95073 * [Payment due @QichenZhu] Update Announcements widget with June 30 newsletter by @MelvinBot in https://github.com/Expensify/App/pull/95055 * Migrate InteractionManager - (Newly added usages) batch 1 by @mrejdak in https://github.com/Expensify/App/pull/94171 * Part 2: Remove Onyx.connect() for the key: ONYXKEYS.NETWORK in src/libs/ReportActionsUtils.ts by @thelullabyy in https://github.com/Expensify/App/pull/92899 * Hide the Agent rules enforced-by row when RuleBot is removed by @yuwenmemon in https://github.com/Expensify/App/pull/94663 * Fix workspace LHN order: Receipt Partners before HR by @MelvinBot in https://github.com/Expensify/App/pull/94798 * fix: show Per Diem tab for members whose policy is missing arePerDiemRatesEnabled by @mukhrr in https://github.com/Expensify/App/pull/94692 * [Payment due @truph01] [No QA] Docs updates for E/A#92275 bulk Download as PDF for reports by @MelvinBot in https://github.com/Expensify/App/pull/94228 * Docs updates for E/A#93451 Add Recently added slot to Home Overview by @MelvinBot in https://github.com/Expensify/App/pull/94230 * [No QA] Docs updates for E/A#93937 saved searches sorted alphabetically by @MelvinBot in https://github.com/Expensify/App/pull/94231 * [Rules Revamp] Release 2: Move category-based creation into Rules; add Require fields and Flag for review by @Krishna2323 in https://github.com/Expensify/App/pull/94696 * [No QA] Docs updates for E/A#94131 surface RuleBot in Agent rules section by @MelvinBot in https://github.com/Expensify/App/pull/94636 * fix: Created expense at submitted report then create expense at ws chat add to the submitted report by @nkdengineer in https://github.com/Expensify/App/pull/93783 * Guard P2P participant selection against negative-amount expenses from self DM by @MelvinBot in https://github.com/Expensify/App/pull/94661 * Add Rillet integration by @s77rt in https://github.com/Expensify/App/pull/93897 * [No QA] Block eslint-disable bypasses of the Onyx.connect() ban by @cristipaval in https://github.com/Expensify/App/pull/94829 * [Payment due @daledah] Add certificate pinning for NewDot by @staszekscp in https://github.com/Expensify/App/pull/92503 * [CP Staging] Fix bulk delete in Search dropping deletions during confirm modal dismiss by @MelvinBot in https://github.com/Expensify/App/pull/95130 * migrate workspace company cards by @huult in https://github.com/Expensify/App/pull/94280 * 83833 migrate tags part 2 by @huult in https://github.com/Expensify/App/pull/94935 * Make Attendees and Per attendee columns sortable in expense report view by @MelvinBot in https://github.com/Expensify/App/pull/94511 * [No QA] Add support for dynamic routes that host an onyx tab navigator by @collectioneur in https://github.com/Expensify/App/pull/94172 * refactor navigateToAndCreateGroupChat to use useOnyx data by @daledah in https://github.com/Expensify/App/pull/94431 * [No QA] Fix flaky SessionTest timeout on CI job 8 by @marcochavezf in https://github.com/Expensify/App/pull/95153 * [NoQA] feat: add ME PR support to Publish React Native Android Artifacts workflow by @jakubstec in https://github.com/Expensify/App/pull/95142 * [Performance] Reduce `DEFAULT` handler fallthrough for unrecognized-tab submissions by @JakubKorytko in https://github.com/Expensify/App/pull/94454 * [Payment due @ZhenjaHorbach] Fix domain force-2FA disable routing by avoiding dynamic suffix collision by @mountiny in https://github.com/Expensify/App/pull/95040 * [No QA] Docs updates for E/A#92289 legal name and physical address VBBA copy by @MelvinBot in https://github.com/Expensify/App/pull/94501 * [CP Staging] Fix missing per diem subtitle on Android by re-adding flexRow wrapper by @MelvinBot in https://github.com/Expensify/App/pull/95164 * [No QA] Fix remote iOS build by @staszekscp in https://github.com/Expensify/App/pull/95167 * refactor: add dedicated ChatSearchView by @BartekObudzinski in https://github.com/Expensify/App/pull/94816 * [CP Staging] [Submit] Fix blockers for submit email submitter by @hungvu193 in https://github.com/Expensify/App/pull/95115 * Show workspace owner as Editor in Members tab on Submit workspaces by @carlosmiceli in https://github.com/Expensify/App/pull/95064 * [CP Staging] Fix marking an unread message as unread does not mark the conversation as unread by @VickyStash in https://github.com/Expensify/App/pull/95166 * [Submit] Show "Needs approval" for Submit approvers in Search/Spend by @abzokhattab in https://github.com/Expensify/App/pull/94610 * refactor: add dedicated ExpenseGroupedSearchView by @BartekObudzinski in https://github.com/Expensify/App/pull/95028 * Removed useOptionsList hook from the codebase by @shubham1206agra in https://github.com/Expensify/App/pull/94883 * Use freshly computed report totals from backend instead of potentially stale stored total by @allgandalf in https://github.com/Expensify/App/pull/91798 * [NoQA] Fix duplicate searchListContent declaration breaking main typecheck/lint by @mountiny in https://github.com/Expensify/App/pull/95189 * fix: Home - Action button disappears the second time an expense is opened from "Recently Added" by @mhawryluk in https://github.com/Expensify/App/pull/94466 * refactor: add dedicated ExpenseReportSearchView by @BartekObudzinski in https://github.com/Expensify/App/pull/94822 * [No QA] feat: add telemetry span for Share Extension submit flow by @jmgraa in https://github.com/Expensify/App/pull/94948 * Revert "[CP Staging] Fix bulk delete in Search dropping deletions during confirm modal dismiss" by @cristipaval in https://github.com/Expensify/App/pull/95198 * [CP Staging] Fix: open flagged expense thread when its report holds multiple transactions by @MelvinBot in https://github.com/Expensify/App/pull/95163 * refactor: add dedicated TaskSearchView by @BartekObudzinski in https://github.com/Expensify/App/pull/94820 * [No QA] Remove stale throttled translation key by @heekinho in https://github.com/Expensify/App/pull/95020 * Remove Onyx.connect() usage for ONYXKEYS.COLLECTION.POLICY_TAGS in updateSplitTransactions function from src/libs/actions/IOU/SplitTransactionUpdate.ts by @Guccio163 in https://github.com/Expensify/App/pull/89759 * [Payment due @ikevin127] Optimistically show thinking indicator in custom agent dms by @inimaga in https://github.com/Expensify/App/pull/94982 * Skip Skia web charts when WebGL shader precision is unavailable by @wildan-m in https://github.com/Expensify/App/pull/92874 * Move pre-selected vacation delegates and workspace members to top by @marufsharifi in https://github.com/Expensify/App/pull/92765 * [No QA] Revert "Restore ios/CertificatePinning.swift to match main" by @Guccio163 in https://github.com/Expensify/App/pull/95215 * Show card name on narrow Expensify Card table rows by @luacmartins in https://github.com/Expensify/App/pull/95009 * Refactor: migrate getRate to use usePersonalPolicy hook (part 3) by @shubham1206agra in https://github.com/Expensify/App/pull/95067 * Preserve Search context when leaving a thread by @marufsharifi in https://github.com/Expensify/App/pull/94114 * [NoQA] [HR Import] Error states + reconnect prompt on the HR card by @mhawryluk in https://github.com/Expensify/App/pull/91975 * Fix - Chat - Unread marker is not displayed when receiving messages on a new conversation. by @FitseTLT in https://github.com/Expensify/App/pull/94460 * [CP Staging] Fix Spend-Not able to delete expenses in bulk in Spend by @hungvu193 in https://github.com/Expensify/App/pull/95220 * Truncate long RuleBot name in Agent rules Enforced by pill by @MelvinBot in https://github.com/Expensify/App/pull/94837 * [No QA] Replace Copy AgentZero request ID with View AgentZero trace by @jasperhuangg in https://github.com/Expensify/App/pull/95074 * [No QA] docs: set threshold for ShareExtensionOpenSubmitFlow by @jmgraa in https://github.com/Expensify/App/pull/95205 * Refactor: migrate getRate to use usePersonalPolicy hook (part 2) by @shubham1206agra in https://github.com/Expensify/App/pull/95052 * [No QA] Docs updates for E/A#86932 disabled category and tag expense alerts by @MelvinBot in https://github.com/Expensify/App/pull/93865 * [No QA] Docs updates for E/A#93941 Workspace member role filter availability and reset by @MelvinBot in https://github.com/Expensify/App/pull/94067 * Add policy copy change log messages by @shubham1206agra in https://github.com/Expensify/App/pull/94189 * [No QA] Docs updates for E/A#93884 future-dated card transaction start dates by @MelvinBot in https://github.com/Expensify/App/pull/94065 * Fix flickering lock icon on Consolidated Travel Billing toggle by @allgandalf in https://github.com/Expensify/App/pull/95047 * feat(card): prompt for personal details before virtual card reveal by @DylanDylann in https://github.com/Expensify/App/pull/91634 * [No QA] Support Dual-Initial Avatars in App by @grgia in https://github.com/Expensify/App/pull/94567 * Fix: include member workspace chats in search router for admins by @MelvinBot in https://github.com/Expensify/App/pull/92226 * [No QA] Upgrade eslint-config-expensify to 4.0.6 by @roryabraham in https://github.com/Expensify/App/pull/93333 * Fix Share button being unresponsive when sharing an image to a new email by @MelvinBot in https://github.com/Expensify/App/pull/94905 * [No QA] Improve Copilot feature documentation and discoverability by @MelvinBot in https://github.com/Expensify/App/pull/91786 * Enhance odometer reading handling by introducing a baseline compariso… by @DylanDylann in https://github.com/Expensify/App/pull/95039 * fix: back button issue when opening concierge by @truph01 in https://github.com/Expensify/App/pull/94660 * Fix iOS freeze on locked-account pay in selection mode (#95026) by @Krishna2323 in https://github.com/Expensify/App/pull/95063 * Fix Blank space is shown below the empty state content by @GCyganek in https://github.com/Expensify/App/pull/94151 * [No QA] Fix broken OptionsListUtils test and repo-wide ESLint resolution error by @jasperhuangg in https://github.com/Expensify/App/pull/95244 * [No QA] Switch from Prettier to Oxfmt by @roryabraham in https://github.com/Expensify/App/pull/93994 * [No QA] Extend Oxfmt formatting to YAML files by @roryabraham in https://github.com/Expensify/App/pull/95254 * [No QA] Add lefthook pre-commit hook for oxfmt by @roryabraham in https://github.com/Expensify/App/pull/95255 * [CP Staging] Revert PR #94784 to stop loginToAccountIDMap massive logs by @mountiny in https://github.com/Expensify/App/pull/95233 * [No QA] Use oxfmt instead of prettier in Claude auto-format hook by @roryabraham in https://github.com/Expensify/App/pull/95263 * [No QA] Add YAML to lefthook oxfmt glob by @roryabraham in https://github.com/Expensify/App/pull/95264 * Update Original to Purchase in expense thread for Expensify Cards by @MelvinBot in https://github.com/Expensify/App/pull/88002 * [No QA] Clarify card request process in documentation by @stephanieelliott in https://github.com/Expensify/App/pull/94141 * added first approver and first approved columns by @mukhrr in https://github.com/Expensify/App/pull/93169 * Recalculate split shares to 0 when clearing the amount field by @MelvinBot in https://github.com/Expensify/App/pull/95236 * [CP Staging + Prod] Revert "feat: Enable react-native-nitro-fetch (V2)" by @mountiny in https://github.com/Expensify/App/pull/95284 * Getting started: show Issue Expensify cards step when Expensify Card is selected during onboarding by @MelvinBot in https://github.com/Expensify/App/pull/94423 * perf(search): replace useTransition with TransitionTracker for autocomplete list render by @WojtekBoman in https://github.com/Expensify/App/pull/94875 * [No QA] Growl: add action button and loading variant by @borys3kk in https://github.com/Expensify/App/pull/94865 * Replace getDisplayNameOrDefault with temporaryGetDisplayNameOrDefault - batch 2 by @cretadn22 in https://github.com/Expensify/App/pull/94990 ## New Contributors * @jmgraa made their first contribution in https://github.com/Expensify/App/pull/94948 **Full Changelog**: https://github.com/Expensify/App/compare/9.4.25-2...9.4.27-2