feat(receive): draft new desktop receive screen - #29708
Conversation
1f7c63d to
c2467d9
Compare
6c0486a to
064377b
Compare
|
✅ Previously successful run of [Test] suite-native Android E2E workflow has been found. |
aab9182 to
3e8a612
Compare
fc93311 to
d3f0df7
Compare
c85cc73 to
1eaeff9
Compare
0bca55a to
7886989
Compare
7886989 to
81ceb13
Compare
61ba6ee to
f461da6
Compare
| }, | ||
| TR_BCH_ADDRESS_INFO: { | ||
| defaultMessage: | ||
| 'Bitcoin Cash changed the address format to cashaddr. Find more info about how to convert your address on our blog. {TR_LEARN_MORE}', |
There was a problem hiding this comment.
unused strings.
| address: string; | ||
| }; | ||
|
|
||
| type CopyReceiveAddressThunkDeps = { services: DesktopAnalyticsDep }; |
|
|
||
| type ShareReceiveAddressThunkDeps = { services: DesktopAnalyticsDep }; | ||
|
|
||
| export const shareReceiveAddressThunk = |
f461da6 to
5e48028
Compare
5e48028 to
1957ee2
Compare
| ReceiveRootState & | ||
| SelectLabeledUnusedAddressesState; | ||
|
|
||
| export const deriveCurrentFreshAddressThunk = |
There was a problem hiding this comment.
Native already has setCurrentFreshAddressForFlowEntryThunk, while this PR adds a desktop-only deriveCurrentFreshAddressThunk that reimplements the same job with slightly different logic. Since the behavior is not platform-specific, it should live in common and be called by both platforms.
I wasn't sure what you'd need and hoped we would sync before merging this so you could reuse the already existing functionality rather than reinventing it. I believe it should be reusable with slight parametrization if necessary.
There was a problem hiding this comment.
There is a platform difference, desktop needs to be able to re-derivate and native is trigged on entry.
I want to unify it / refactor in followup PR.
|
|
||
| type RevealNextAddressThunkDeps = { services: DesktopAnalyticsDep }; | ||
|
|
||
| export const revealNextAddressThunk = |
There was a problem hiding this comment.
Please check addReceiveAddressThunk from native. I believe these can also be unified in common.
1957ee2 to
4372223
Compare
| intent="neutral" | ||
| priority="secondary" | ||
| icon={PlusIcon} | ||
| isDisabled={isAddressLimitReached} |
There was a problem hiding this comment.
In ReceiveContent you are using isReceiveDisabled when device is isAuthenticityCheckFailed || isDeviceBackupUnfinished || deviceLocked. Is that not relevant here as well? I'm not sure actually.
| const handleVerify = async () => { | ||
| await onVerify(addressPath); | ||
| onDismiss(); | ||
| }; |
There was a problem hiding this comment.
Should this dismiss on failed verification as well? I guess there will be at least a toast notification automagically from connect?
There was a problem hiding this comment.
Failed IMHO means only "Canceled" verification, which is a user decision. In any other device fails - the device error should be present
| defaultMessage: 'Show full address', | ||
| RECEIVE_ADDRESS_COPIED_TITLE: { | ||
| id: 'RECEIVE_ADDRESS_COPIED_TITLE', | ||
| defaultMessage: 'Address copied. Verify before you send.', |
There was a problem hiding this comment.
Could we please unify this translation string to match the mobile version?
Context here: https://satoshilabs.slack.com/archives/C07D260JB4H/p1785854122548179
4372223 to
bae4617
Compare
bae4617 to
ee1a5f2
Compare
Description
Receive flow was completely redesigned following the Figma
Removed 12 translation keys orphaned by the redesign, including the BCH/LTC address-format
tooltips - the same guidance still fires on the send form via
isAddressDeprecated, so nothing islost where it's actionable.
Notes for QA
❗ Share button is only available in the web flow as electron does not support native share API.
Happy paths
Edge cases
Related Issue
Resolves #29624
Resolves #29626
Screenshots:
To be added.
🌐 Preview deployments
🌐 Suite Web preview: https://dev.suite.sldev.cz/suite-web/receive-desktop/web/
🔍 Currents Test Results
🔍 Suite web test results: View in Currents
🔍 Suite native android test results: View in Currents
🔍 Suite desktop test results: View in Currents
🔒 Quarantined E2E Tests
Trezor Suite (web) — 3 test(s)
Updated: 2026-08-05T13:17:12.468Z • 3 test(s) total
Trezor Suite (desktop) — 2 test(s)
Updated: 2026-08-05T13:16:31.782Z • 2 test(s) total
🤖 LLM Test Recommendations
Summary: This PR touches the receive-address flow (Receive.tsx, ReceiveContent, AddressHistoryCard, NewestAddressCard, AddressCopiedModal, shareAddress, useReceiveAddresses), the address confirmation modal stack (ConfirmAddressModal, ConfirmUnverifiedAddressModal, DeviceContextModal, UserContextModal), and receive-related thunks/state (showAddressThunk, openAddressModal, suite/receive index, modal type definitions). The modal components map to 132 tests statically, but that is because they are globally shared UI infrastructure — only tests that actually exercise address reveal/verification/copy flows are meaningfully at risk. The recommended strategy is to run the dedicated wallet receive and passphrase-hidden-wallet receive tests (which directly exercise device address confirmation, address history display, and copy-to-clipboard) plus a few metadata tests that render labels on the receive screen; broad regression across unrelated flows (staking, trading, onboarding, etc.) is unlikely since those don't touch the receive/address-confirmation code paths.
Changed files (16)
packages/suite/src/components/suite/modals/ReduxModal/ConfirmAddressModal.tsxpackages/suite/src/components/suite/modals/ReduxModal/DeviceContextModal/DeviceContextModal.tsxpackages/suite/src/components/suite/modals/ReduxModal/UserContextModal/ConfirmUnverifiedAddressModal.tsxpackages/suite/src/components/suite/modals/ReduxModal/UserContextModal/UserContextModal.tsxpackages/suite/src/views/wallet/receive/Receive.tsxpackages/suite/src/views/wallet/receive/components/AddressCopiedModal.tsxpackages/suite/src/views/wallet/receive/components/AddressHistoryCard.tsxpackages/suite/src/views/wallet/receive/components/NewestAddressCard.tsxpackages/suite/src/views/wallet/receive/components/ReceiveContent.tsxpackages/suite/src/views/wallet/receive/components/shareAddress.tspackages/suite/src/views/wallet/receive/hooks/useReceiveAddresses.tssuite-common/suite-types/src/modal.tssuite/intl/src/messages.tssuite/receive/src/index.tssuite/receive/src/openAddressModal.tssuite/receive/src/showAddressThunk.tsRecommended tests (10)
🔴 High priority (6)
suite/e2e/tests/wallet/receive.test.ts— This test directly exercises the core receive address flow (reveal, copy, verify address on device) which maps directly to Receive.tsx, ReceiveContent.tsx, AddressCopiedModal.tsx, shareAddress.ts, useReceiveAddresses.ts, ConfirmAddressModal.tsx, and the showAddressThunk/openAddressModal changes - the exact files changed in this PR.suite/e2e/tests/wallet/global-receive-send.test.ts— Directly tests the global receive flow, address reveal/verification on device, and copy address functionality, which is the primary functionality touched by Receive.tsx, ReceiveContent.tsx, and the address confirmation modals changed in this PR.suite/e2e/tests/passphrase/passphrase.test.ts— This test extensively exercises revealing receive addresses across multiple hidden wallets, on-device confirmation, address history table, and copy-to-clipboard - all core paths through Receive.tsx, AddressHistoryCard.tsx, NewestAddressCard.tsx and ConfirmAddressModal.tsx that were modified.suite/e2e/tests/passphrase/passphrase-cardano.test.ts— Tests Cardano receive address verification flow including correct/incorrect passphrase scenarios, verify address error toast, and reveal-address modal - directly touching Receive.tsx, ConfirmUnverifiedAddressModal.tsx, and showAddressThunk.ts changes.suite/e2e/tests/passphrase/passphrase-reconnection.test.ts— Exercises revealing a receive address, device reconnection re-prompting passphrase confirmation, and repeated address reveals without re-prompting - directly covering the modal and thunk logic changed in ConfirmAddressModal.tsx, DeviceContextModal.tsx, and showAddressThunk.ts.suite/e2e/tests/wallet/receive.test.ts— Duplicate entry removed🟡 Medium priority (4)
suite/e2e/tests/wallet/cardano.test.ts— Includes a Cardano receive flow (reveal address, confirm on device, copy address) that touches Receive.tsx and the address confirmation modal logic, though the majority of the test covers unrelated account-detail behaviors.suite/e2e/tests/metadata/legacy/address-metadata.test.ts— Uses the receive screen and address list UI (AddressHistoryCard) to add/edit address labels, so changes to Receive.tsx and AddressHistoryCard.tsx could affect label placement/rendering, though the core focus is metadata not address confirmation.suite/e2e/tests/metadata/suite-sync/sync-from-relay.test.ts— Verifies address labels synced via Suite Sync are visible on the receive screen, which depends on Receive.tsx and AddressHistoryCard rendering logic that was modified.suite/e2e/tests/metadata/suite-sync/update-and-remove-labels.test.ts— Updates and removes address labels on the receive screen, exercising the same Receive.tsx/AddressHistoryCard rendering paths affected by this change.suite-common/suite-types/src/modal.tssuite/intl/src/messages.tsUpdated: 2026-07-20T14:44:45.410Z