Skip to content

Linearize Send Flow - #856

Merged
leofelix077 merged 41 commits into
mainfrom
lf-linearize-send-flow
Jun 4, 2026
Merged

leofelix077 merged 41 commits into
mainfrom
lf-linearize-send-flow

Conversation

@leofelix077

@leofelix077 leofelix077 commented May 6, 2026

Copy link
Copy Markdown
Contributor

Closes #809

iOS Build 1.18.26 (1778530225)

This PR linearizes the mobile Send flow so the user moves more cleanly from recipient selection to amount entry to review/processing, with less back-and-forth navigation.
It also tightens recipient handling, keyboard behavior, and state handoff across the send screens so the flow is more reliable
The new coverage now includes scenarios like searching/pasting recipients, choosing from recents or my wallets, and switching between token and collectible send paths.
It also covers amount entry and formatting, review sheet behavior, and navigation/state transitions when moving between recipient, amount, and review screens.

Side adjustments: Added a small change to code-style. as there was a misleading rule previously

the code-style tried to enforce e.g.
<Button onPress={() => void handleAsyncAction(id)} />, conflicting with the eslint rule that disables no-floating-promises

handleAsyncAction (no void and no explicit await) is a valid construct in the codebase


General smoke test for android, with some input validations

android-smoke-test.mov

Normal send flow, changing inputs, keyboard typing, deleting, and auto focus
Swapping from fiat to token
Input cursor and highlight while typing
Send flow with recents and account names
Send collectible flow

ScreenRecording_05-11-2026.18-16-37_1.mov

Sending to unknown address and recents

ScreenRecording_05-11-2026.18-51-31_1.MP4

PR structure

  • This PR does not mix refactoring changes with feature changes (break it down into smaller PRs if not).
  • This PR has reasonably narrow scope (break it down into smaller PRs if not).
  • This PR includes relevant before and after screenshots/videos highlighting these changes.
  • I took the time to review my own PR.

Testing

  • These changes have been tested and confirmed to work as intended on Android.
  • These changes have been tested and confirmed to work as intended on iOS.
  • These changes have been tested and confirmed to work as intended on small iOS screens.
  • These changes have been tested and confirmed to work as intended on small Android screens.
  • I have tried to break these changes while extensively testing them.
  • This PR adds tests for the new functionality or fixes.

Release

  • This is not a breaking change.
  • This PR updates existing JSDocs when applicable.
  • This PR adds JSDocs to new functionalities.
  • I've checked with the product team if we should add metrics to these changes.
  • I've shared relevant before and after screenshots/videos highlighting these changes with the design team and they've approved the changes.

@leofelix077 leofelix077 self-assigned this May 6, 2026
Copilot AI review requested due to automatic review settings May 6, 2026 22:06
@leofelix077 leofelix077 added the don't review yet Work in Progress / Draft PR / Code Review adjustments being worked on label May 6, 2026

Copilot AI 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.

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

Copilot AI 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.

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

Copilot AI 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.

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

Copilot AI 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.

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

Copilot AI 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.

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

Comment thread src/components/screens/SendScreen/screens/TransactionTokenScreen.tsx Outdated
Comment thread src/config/routes.ts Outdated
Comment thread src/components/screens/SendScreen/screens/TransactionAmountScreen.tsx Outdated
Comment thread src/components/screens/SendScreen/screens/TransactionAmountScreen.tsx Outdated
Comment thread src/components/screens/SendScreen/SendSearchContacts.tsx
Comment thread src/components/TokensCollectiblesInline.tsx
@leofelix077

leofelix077 commented May 29, 2026

Copy link
Copy Markdown
Contributor Author

UI Has also been adjusted to have the total balance above the token dropdown. Thread is centralized on the extension thread stellar/freighter#2764 (comment)

e.g.

Simulator Screenshot - iPhone 17 Pro - 2026-05-28 at 13 22 28 Simulator Screenshot - iPhone 17 Pro - 2026-05-28 at 13 22 48

Comment thread src/components/screens/SendScreen/screens/TransactionAmountScreen.tsx Outdated
@CassioMG

CassioMG commented May 29, 2026

Copy link
Copy Markdown
Contributor

@leofelix077 thanks for making the last UI changes/fixes. It appears there is bug related to the Send (federation) flow where the memo type is always being reset on the SendAmount rendering. The fix seems simple but I left the AI verbose description there which I think could be helpful for the agent to get the whole context/severity of it. Could you also please double check to see if there isn't any other part broken related to the Send-federation flow? Thanks

Comment thread src/components/screens/SendScreen/components/HighlightedAmountDisplay.tsx Outdated
@CassioMG

Copy link
Copy Markdown
Contributor

@leofelix077 I'm still seeing the bug in which the keyboard doesn't get dismissed after saving a memo on settings:

ScreenRecording_05-29-2026.16-46-00_1.mov

@leofelix077

Copy link
Copy Markdown
Contributor Author

@CassioMG the issue is fixed now on 1.18.26 (1780495145). can you verify? I also added a delay to open the settings screen to allow for the keyboard dismiss from number input -> settings modal

ScreenRecording_06-03-2026.11-14-55_1.MP4

@CassioMG

CassioMG commented Jun 3, 2026

Copy link
Copy Markdown
Contributor

@leofelix077 about the wait for keyboard dismiss strategy, would you be willing to try this approach instead? I think we could extract that function to a helper and try here on your PR, if that works then we don't need to rely on timeouts and will also have less duplicate code. Wdyt? If so, please check on both Android and iOS as I've only tested on iOS so far on my PR. Thanks

@leofelix077

Copy link
Copy Markdown
Contributor Author

@CassioMG much better approach. I forgot about the native events for keyboard. Will try it out and update it in a bit

@leofelix077

Copy link
Copy Markdown
Contributor Author

@CassioMG adjusted and retested with the native event handler on build 1.18.26 (1780503276)

ScreenRecording_06-03-2026.14-09-24_1.MP4

@leofelix077
leofelix077 merged commit 245d21c into main Jun 4, 2026
70 of 76 checks passed
@leofelix077
leofelix077 deleted the lf-linearize-send-flow branch June 4, 2026 17:05
CassioMG added a commit that referenced this pull request Jun 5, 2026
…stom 300ms duration

PR #856 (Linearize Send Flow) explicitly attached
getStackBottomNavigateOptions() to both SEND_PAYMENT_STACK and
SWAP_STACK on the root navigator, which pulled Swap from its previous
platform-default side-slide animation onto the helper's
slide_from_bottom + animationDuration: 300. Two changes here:

- Drop the explicit options prop from the SWAP_STACK route so the
  Swap stack falls back to React Navigation's native-stack default
  side-slide presentation, restoring the pre-merge transition.
- Remove the hardcoded animationDuration: 300 from
  getStackBottomNavigateOptions so the remaining callers (Send stack
  + a handful of bottom-presented screens) inherit the native default
  duration. The 300ms override read too slow in practice; defaulting
  is simpler and feels more responsive.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@github-actions github-actions Bot mentioned this pull request Jun 17, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Linearize Send flow from Home screen

3 participants