Skip to content

Fix: Splits incorrectly highlighted in Inbox after splitting from Spend page - #94139

Merged
mountiny merged 11 commits into
Expensify:mainfrom
aswin-s:fix/split-highlight-spend-page-93967
Jul 24, 2026
Merged

mountiny merged 11 commits into
Expensify:mainfrom
aswin-s:fix/split-highlight-spend-page-93967

Conversation

@aswin-s

@aswin-s aswin-s commented Jun 22, 2026

Copy link
Copy Markdown
Contributor

Explanation of Change

Follow-up to #92506 (deploy blocker #93967).

When splitting an existing expense, #92506 registered the newly created split transaction IDs for the temporary highlight (addPendingNewTransactionIDs) before the navigation branch in updateSplitTransactionsFromSplitExpensesFlow. That registration therefore also ran on the Spend > Expenses (Search) path, where the flow navigates back via navigateBackToLastSuperWideRHPScreen and the expense report is never opened.

addPendingNewTransactionIDs writes {pendingNewTransactionIDs: {[id]: true}} into the report's REPORT_METADATA. Those flags are only consumed — and only cleared — when the expense report's MoneyRequestReportActionsList mounts and runs useNewTransactions. Since splitting from Spend never opens the report, the flags sat stranded in metadata until the user later opened that report from the Inbox, at which point the (no longer new) split rows were incorrectly highlighted.

The Spend/Search page has its own highlight mechanism (useSearchHighlightAndScroll / newSearchResultKeys) and does not rely on REPORT_METADATA.pendingNewTransactionIDs, so its highlight is unaffected.

Fix:

  • In SplitTransactionUpdate.ts, move the registration loop below the early-return branches so it runs only on the dismissModalWithReport path — the single path that actually opens the expense report and therefore consumes and clears the flags on mount. The Search/Spend page, selfDM, and last-transaction (report-emptied) cases all return before the loop, so they no longer pollute REPORT_METADATA with flags that would never be cleared.
  • Added a unit test covering the Spend/Search-page path (skips registration when splitting from the Search/Spend page).

Fixed Issues

$ #93967
PROPOSAL: #93967 (comment)

Tests

  1. Open a workspace chat and create two expenses.
  2. Go to Spend > Expenses.
  3. Select one of the expenses via the checkbox.
  4. Click the dropdown button > Split > Save.
  5. Verify the new split rows are briefly highlighted on the Spend > Expenses page (this is the expected location).
  6. Go back to Inbox and open the expense report.
  7. Verify the split rows are not highlighted in the report (regression being fixed).
  8. Separately, open an expense report directly, click More > Split > Save on an expense, and verify the new split rows are briefly highlighted in the report list.
  9. Verify the original expense is no longer visible in the list.
  • Verify that no errors appear in the JS console

Offline tests

N/A — split expense saving requires network. The highlight logic is optimistic (fires before the API response), so offline state does not affect it.

QA Steps

  1. Go to staging.new.expensify.com.
  2. Open a workspace chat and create two expenses.
  3. Go to Spend > Expenses.
  4. Select one of the expenses via the checkbox.
  5. Click the dropdown button > Split > Save.
  6. Verify the new split rows are briefly highlighted on the Spend > Expenses page.
  7. Go back to Inbox and open the expense report.
  8. Verify the split rows are not highlighted in the report.
  9. Separately, open an expense report directly, click More > Split > Save, and verify the new split rows are briefly highlighted in the report list.
  • 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
  • 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 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 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 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)
  • 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.
  • 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.mp4
Android: mWeb Chrome
android-web.mp4
iOS: Native
ios.mp4
iOS: mWeb Safari
ios-web.mp4
MacOS: Chrome / Safari
Mac.mp4

Scope pendingNewTransactionIDs registration to the dismissModalWithReport
path so it only runs when the expense report is actually opened. Splitting
from Spend > Expenses navigates back to Search and never mounts the expense
report, so the previously-registered flags were never consumed/cleared and
incorrectly highlighted rows when the report was later opened from Inbox.
@aswin-s
aswin-s marked this pull request as ready for review June 26, 2026 02:52
@aswin-s
aswin-s requested review from a team as code owners June 26, 2026 02:52
@melvin-bot
melvin-bot Bot requested a review from gijoe0295 June 26, 2026 02:52
@melvin-bot

melvin-bot Bot commented Jun 26, 2026

Copy link
Copy Markdown

@gijoe0295 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]

@gijoe0295

Copy link
Copy Markdown
Contributor

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. 🚀

Reviewed commit: 405896a55e

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

@gijoe0295

gijoe0295 commented Jun 28, 2026

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

Android: HybridApp
Screen.Recording.2026-07-21.at.00.58.14.mov
Android: mWeb Chrome
Screen.Recording.2026-07-04.at.02.24.39.mov
iOS: HybridApp
Screen.Recording.2026-07-21.at.00.34.41.mov
iOS: mWeb Safari
Screen.Recording.2026-07-21.at.00.12.34.mov
MacOS: Chrome / Safari
Screen.Recording.2026-06-30.at.00.35.21.mov

@gijoe0295

gijoe0295 commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

@aswin-s
Splitted expenses is not highlighted on Spend page in offline mode. Please check

MacOS: Chrome

Screen.Recording.2026-06-30.at.01.15.39.mov

aswin-s added 2 commits July 1, 2026 23:15
Splitting an expense from the Spend/Search page relied on the auto re-search
path in useSearchHighlightAndScroll, which is skipped while offline, so the
new split rows never highlighted offline.

Register the new split transaction IDs via mergeTransactionIdsHighlightOnSearchRoute
(TRANSACTION_IDS_HIGHLIGHT_ON_SEARCH_ROUTE) on the Search-page branch. This
highlights the rows optimistically without a server re-search, so it works
offline too. Reverse splits and existing children are skipped.
@aswin-s

aswin-s commented Jul 1, 2026

Copy link
Copy Markdown
Contributor Author

@gijoe0295 Fixed the highlights in offline mode.

@codecov

codecov Bot commented Jul 1, 2026

Copy link
Copy Markdown

Codecov Report

❌ Looks like you've decreased code coverage for some files. Please write tests to increase, or at least maintain, the existing level of code coverage. See our documentation here for how to interpret this table.

Files with missing lines Coverage Δ
src/libs/actions/IOU/SplitTransactionUpdate.ts 85.37% <89.47%> (-0.02%) ⬇️
.../TransactionListItem/TransactionListItemNarrow.tsx 0.00% <0.00%> (ø)
... and 9 files with indirect coverage changes

@gijoe0295

This comment was marked as off-topic.

@gijoe0295

Copy link
Copy Markdown
Contributor

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Swish!

Reviewed commit: bb4556406e

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment on lines +1907 to +1925
// Register newly created split transaction IDs so they briefly highlight on the Search/Spend page.
// The Search page reads TRANSACTION_IDS_HIGHLIGHT_ON_SEARCH_ROUTE, which highlights matching rows
// optimistically without waiting for a server re-search. Unlike the auto-detect path in
// useSearchHighlightAndScroll (skipped while offline), this makes the highlight work offline too.
// Reverse splits create no new transactions, and existing children are already in the list, so both are skipped.
if (isSearchPageTopmostFullScreenRoute && !isReverseSplitOperation) {
const currentSearchType = getCurrentSearchQueryJSON()?.type;
if (currentSearchType) {
const existingChildTransactionIDs = new Set(allChildTransactions.map((tx) => tx?.transactionID).filter(Boolean));
const newTransactionIDsToHighlight: Record<string, boolean> = {};
for (const splitExpense of splitExpenses) {
if (!splitExpense.transactionID || existingChildTransactionIDs.has(splitExpense.transactionID)) {
continue;
}
newTransactionIDsToHighlight[splitExpense.transactionID] = true;
}
if (!isEmptyObject(newTransactionIDsToHighlight)) {
mergeTransactionIdsHighlightOnSearchRoute(currentSearchType, newTransactionIDsToHighlight);
}

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.

Avoid deep nested if. Please consider these solution:

  1. Create helper function
  2. Early return
    For example:
  • Helper function to get new split transaction IDs
function getNewSplitTransactionIDs(): string[] {
        const existingChildTransactionIDs = new Set(allChildTransactions.map((tx) => tx?.transactionID).filter(Boolean));
        const newTransactionIDs: string[] = [];

        for (const splitExpense of splitExpenses) {
            if (!splitExpense.transactionID || existingChildTransactionIDs.has(splitExpense.transactionID)) {
                continue;
            }
            newTransactionIDs.push(splitExpense.transactionID);
        }

        return newTransactionIDs;
    }
  • Register search rows which is highlighted:
function registerSearchRouteHighlight() {
        // Register newly created split transaction IDs so they briefly highlight on the Search/Spend page.
        // The Search page reads TRANSACTION_IDS_HIGHLIGHT_ON_SEARCH_ROUTE, which highlights matching rows
        // optimistically without waiting for a server re-search. Unlike the auto-detect path in
        // useSearchHighlightAndScroll (skipped while offline), this makes the highlight work offline too.
        // Reverse splits create no new transactions, and existing children are already in the list, so both are skipped.
        if (!isSearchPageTopmostFullScreenRoute || isReverseSplitOperation) {
            return;
        }

        const currentSearchType = getCurrentSearchQueryJSON()?.type;
        if (!currentSearchType) {
            return;
        }

        const newSplitTransactionIDs = getNewSplitTransactionIDs();
        const newTransactionIDsToHighlight = Object.fromEntries(newSplitTransactionIDs.map((transactionID) => [transactionID, true]));

        if (isEmptyObject(newTransactionIDsToHighlight)) {
            return;
        }

        mergeTransactionIdsHighlightOnSearchRoute(currentSearchType, newTransactionIDsToHighlight);
    }
  • Usage:
if (isSearchPageTopmostFullScreenRoute || !params.transactionReport?.parentReportID) {
        registerSearchRouteHighlight();

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Fixed

Comment thread src/libs/actions/IOU/SplitTransactionUpdate.ts

@gijoe0295 gijoe0295 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.

@aswin-s Please take a look

@gijoe0295

Copy link
Copy Markdown
Contributor

@aswin-s Here you go!

…ghlight helpers

Addresses review feedback: dedupe the new-split-ID filtering into a shared
getNewSplitTransactionIDs helper reused by both the search-route and
report-metadata highlight paths, and flatten the deeply nested search-branch
highlight into registerSearchRouteHighlight with early returns.
@gijoe0295

gijoe0295 commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

@aswin-s

  • Only one splited item is highlighted
  • iOS: mWeb Safari
Screen.Recording.2026-07-14.at.01.44.09.mov

aswin-s added 2 commits July 15, 2026 10:56
After splitting an expense, the newly-created row that receives focus on the
Search/Spend page never appeared highlighted on the mobile (narrow) layout.
The highlight animation renders on the row wrapper, but a focused row paints an
opaque background on the pressable in front of it, covering the highlight.

Suppress the opaque focus background for the duration of the post-create
highlight animation so the highlight is visible on the focused row too.
@aswin-s
aswin-s force-pushed the fix/split-highlight-spend-page-93967 branch from 0baaa50 to 4e6a393 Compare July 18, 2026 13:58
Initialize the highlight latch from item.shouldAnimateInHighlight so a row that
mounts already flagged for highlight suppresses the focus background immediately,
instead of only when the flag transitions during a later render. Prevents the
opaque focus background from covering the highlight on first mount.
@aswin-s

aswin-s commented Jul 18, 2026

Copy link
Copy Markdown
Contributor Author

@gijoe0295 Fixed the highlight issue on mobile resolution.

Simulator.Screen.Recording.-.iPhone.17.Pro.Max.-.2026-07-18.at.20.44.54-1.mov

@gijoe0295

Copy link
Copy Markdown
Contributor

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Delightful!

Reviewed commit: 3834660956

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

@gijoe0295 gijoe0295 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.

LGTM!

@melvin-bot
melvin-bot Bot requested a review from mountiny July 22, 2026 00:41
aswin-s and others added 2 commits July 24, 2026 11:47
…TransactionListItemNarrow.tsx

Co-authored-by: Vit Horacek <36083550+mountiny@users.noreply.github.com>
@aswin-s

aswin-s commented Jul 24, 2026

Copy link
Copy Markdown
Contributor Author

@mountiny Applied the suggested fix and merged latest main.

@aswin-s
aswin-s requested a review from mountiny July 24, 2026 06:19
@mountiny
mountiny merged commit 7a6187c into Expensify:main Jul 24, 2026
34 checks passed
@github-actions

Copy link
Copy Markdown
Contributor

🚧 mountiny 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/mountiny in version: 9.4.45-0 🚀

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

@MelvinBot

Copy link
Copy Markdown
Contributor

🤖 Help site review — no changes required.

I reviewed the changes in this PR against Expensify's help site files under App/docs/articles.

This PR is an internal bug fix for a transient highlight-animation issue: it moves the pendingNewTransactionIDs registration so newly created split rows only get briefly highlighted on the path that actually opens the expense report (and adds a Search/Spend-page highlight registration + a focus-background suppression tweak). It does not change the split-expense feature itself, any workflow step, setting, tab, or button label.

The help articles that mention splitting (e.g. Add-an-expense.md, Edit-expenses.md) document how to split an expense — the temporary row-highlight animation is not documented behavior, so none of that content becomes inaccurate as a result of this change.

Because no help site content is affected, I did not create a docs draft PR.

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

@IuliiaHerets

Copy link
Copy Markdown

Hi @aswin-s. QA team failed this PR with an original issue

1785179628716.Recording__1265.mp4

@aswin-s

aswin-s commented Jul 29, 2026

Copy link
Copy Markdown
Contributor Author

@gijoe0295 The underlying logic was modified while this PR was in review through this PR #94670. Looks like we need to fix the logic again.

@mountiny

Copy link
Copy Markdown
Contributor

Can you please follow up? Thanks

@OSBotify

Copy link
Copy Markdown
Contributor

🚀 Deployed to production by https://github.com/marcaaron in version: 9.4.45-14 🚀

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

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.

7 participants