9.4.27-2
coaidev/coai9.4.27-2Jul 6, 2026by github-actions[bot]
AI Summary
A mobile app update emphasizing component decomposition, UX improvements, and fixes for navigation, report actions, and email template editing issues.
Key Highlights
- Decomposed `ReportActionsList` into smaller components.
- Added a tooltip on hover for the Paid report label.
- Fixed 'LHN within the Spend tab' memory retention issue.
- Migrated Xero and Quickbooks connection flows to modal screens.
- Refactored `getLoginsByAccountIDs` and `isReportInGroupPolicy` logic.
New Features
- Added Tag GL code column to expense tables.
- Added People Admin workspace approval access.
- Added custom unit rate out of date range violation.
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