Follow navigation-only deep links without waiting for wallets - #6152
Open
j0ntz wants to merge 3 commits into
Open
Follow navigation-only deep links without waiting for wallets#6152j0ntz wants to merge 3 commits into
j0ntz wants to merge 3 commits into
Conversation
Contributor
Author
j0ntz
marked this pull request as ready for review
August 13, 2026 20:35
j0ntz
force-pushed
the
jon/ramps-deeplink-redirect-time
branch
from
August 13, 2026 20:35
3004fa7 to
ff92679
Compare
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using high effort and found 2 potential issues.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit ff92679. Configure here.
Add explicit return types, type the catch callback as unknown, and replace the direct react-native-vector-icons import with a themed BellIcon.
DeepLinkingManager held one gate for every link type, and it required every wallet in activeWalletIds to finish loading. A link that only navigates, such as the ramps buy/sell entry, sat pending for as long as wallet loading took. Each link type now declares the lightest app state it can safely run in, and the manager releases the link as soon as the app reaches it. Link types that search currencyWallets or open a wallet picker keep waiting for wallets, and promotion links keep waiting for the account referral so activatePromotion cannot persist default state.
The placeholder was built by formatting the crypto currency code, which is undefined until the persisted wallet selection resolves, so the field read "Amount undefined". That window was invisible before, because the scene was only reachable once the wallets had loaded; a deep link now opens it earlier. Fall back to a plain "Amount" until the code is known.
j0ntz
force-pushed
the
jon/ramps-deeplink-redirect-time
branch
from
August 13, 2026 20:44
ff92679 to
70e5ddc
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.





Description
Asana: https://app.asana.com/0/1215088146871429/1217441639677994
A deep link that only needs to open a scene did not follow until every wallet on the account had finished loading.
DeepLinkingManagerheld a single gate for every link type:allWalletsLoadedwaits for every id inactiveWalletIdsto appear incurrencyWalletsorcurrencyWalletErrors. It was gating links such as the ramps buy/sell entry (#6141), whose handler is nothing butnavigation.navigate('buyTab', { screen: 'pluginListBuy', params }).Each link type now declares the lightest app state it can safely run in, and the manager releases a link as soon as the app reaches that state:
loggedOutpasswordRecovery,noopaccountedgeLogin,fiatProvider,price-change,ramp,rampCreate,scene,swapreferralpromotion,affiliateactivatePromotionwrites the account referral, so a defaultaccountReferralwould be persisted over the realCreationReason.jsonwalletsazteco,fiatPlugin,modal,other,paymentProto,paymentRedirect,plugin,requestAddress,rewards,walletConnectaccount.currencyWalletsor open a wallet picker (unchanged behavior).walletConnectis here becauseWcConnectionsSceneopens the picker as soon as it mounts with a uriaffiliatetakes the stricter ofreferraland its inner link.pluginandfiatPluginstay onwalletson purpose: they consultstate.ui.exchangeInfo[...].disablePlugins, which comes from the info-server rollup and has no readiness flag of its own, so the wallet wait is what currently gives that fetch time to land. Narrowing those two is a separate change.getDeepLinkReadinesslives next tohandleLinkand is exhaustive over theDeepLinkunion, so a new link type does not compile until it is classified.The second commit is a consequence of the first.
RampCreateScenebuilds its crypto amount placeholder by formatting the currency code, which is undefined while the persisted wallet selection loads, so the field readAmount undefined. That window used to be invisible because the scene was only reachable after the wallets loaded; a deep link now opens it earlier. It falls back to a plainAmountuntil the code is known.Measured on the iOS simulator (
edge-funds, cold start,edge://buy/moonpay/venmo), timestamps relative toDeepLinkingManagermount:Screenshots are in the test-evidence comment below: at 11 s the old gate still had the app on the wallet list, and at 7 s the new one is already on Buy Crypto with the wallets still loading behind it. Driving through to the options list shows Venmo / MoonPay pinned first, so the link's
providerIdandpaymentTypestill arrive when the link is dispatched that much earlier.CHANGELOG
Does this branch warrant an entry to the CHANGELOG?
Dependencies
none
Requirements
If you have made any visual changes to the GUI. Make sure you have: