Commit 26ff5c8
authored
[wallet/symbol/mobile] feat: add remaining screens from the beta 2.0 version (#2068)
## Problem
The mobile wallet lacked several key user-facing features that are
essential for a full-featured Symbol wallet experience (which some of
them already implemented in Beta v2.0). Specifically:
Missing features:
- **Transaction Details** screen.
- **Harvesting** screen - delegated harvesting (start/stop, check
status, view node info).
- **Address Book**.
- **Multisig account** support - view and manage multisig accounts.
- **Actions** screen - as a central hub for wallet features.
- **QR code Scan** screen.
- **Assets** screen shows only current account mosaics, but didn't show
for other related accounts (such as multisig and bridge).
- Can send transfer only from Home screen button. On other screens send
button is not very visible.
- No receive button
Quality:
- The **Send** screen was a monolithic component without isolated state
hooks, making it difficult to extend and test, and lacked support for
pre-filled sender address and multisig flow.
- The **Home screen** was missing animated widget transitions.
- Several shared components (`AccountDetails`, `ContactDetails`, bridge
account screens) lacked unified send/receive entry points, leading to
navigation inconsistency.
- JS-Doc coverage was inconsistent and there were no lint rules
enforcing it.
---
## Solution
### New Screens
- **Actions screen** (`src/screens/actions/`) — Central hub screen
listing all major wallet feature entry points (external accounts,
address book, harvesting, transport, bridge) with illustrated
`ActionCard`.
- **Address Book screens** (`src/screens/address-book/`) — Full CRUD
flow: `ContactList`, `ContactDetails`, `CreateContact`, `EditContact`.
Includes `AddressBookWidget` for the Home screen, hooks
(`useContactList`, `useContactFormState`, `useAddressBookWidget`),
unique name/address validators, contact alert utils, and tab-based
filtering.
- **Harvesting screen** (`src/screens/harvesting/`) — `Harvesting`
screen with `HarvestingForm`, `HarvestingStatus`, `HarvestingSummary`
components and hooks (`useHarvestingFormState`,
`useHarvestingTransaction`, `useHarvestingAccountInfo`,
`useHarvestingSummary`, `useHarvestingWidget`, `useRandomNode`).
Supports start/stop delegation, status display, and harvesting info
caching.
- **Multisig screens** (`src/screens/multisig/`) —
`MultisigAccountList`, `MultisigAccountDetails`,
`CreateMultisigAccount`, `ModifyMultisigAccount`. Includes
`CosignatoryList`, `CosignatureCounter`, `MultisigAccountListItem`
components, hooks (`useMultisigAccountList`, `useMultisigTransaction`,
`useMultisigTransactionState`, `useCosignatureInput`,
`useMultisigWidget`), and `MultisigWidget` for the Home screen.
- **TransactionDetails screen**
(`src/screens/history/TransactionDetails.jsx`) — Full transaction
inspection with `TransactionGraphic`, `AmountBreakdown`, expandable raw
fields, cosignature status, safety warnings, and live polling via
`useLiveTransactionInfo`.
- **Transport / Scan screens** (`src/screens/transport/`) — `Scan`
screen (QR camera) and `TransportRequest` screen for reviewing and
acting on QR-encoded wallet action requests. Includes `RequestDetails`,
`WalletActionGroup`, `WalletActionListItem` components,
`useSupportedChains`, and full validation/description/result utils.
### New Shared Components
- **`AccountInfoCard`**
(`src/components/display/Account/AccountInfoCard.jsx`) — Reusable card
showing account name, address, avatar, and balance. Adopted across
`AccountDetails`, `ContactDetails`, `BridgeAccountDetails`, and
`MultisigAccountDetails` screens, replacing duplicated inline layouts.
- **`SendReceiveButtons`**
(`src/components/features/SendReceiveButtons.jsx`) — Paired Send/Receive
action buttons component added to `AccountDetails`, `ContactDetails`,
`TokenDetails`, `BridgeAccountDetails`, and `MultisigAccountDetails`.
- **`QrCodeView`** (`src/components/features/QrCodeView.jsx`) — Renders
a QR code from a given string value.
- **`TabSelector`** (`src/components/controls/TabSelector.jsx`) —
Reusable tab bar control (sourced from `wallet/common/symbol`).
- **`EmptyListMessage`**
(`src/components/feedback/EmptyListMessage.jsx`) — Standardized
empty-state message for list screens.
- **`AnimatedListItem`** (`src/components/layout/AnimatedListItem.jsx`)
— Animated insert/remove wrapper used in `BridgeHistory` and filtered
lists.
- **`Columns`** (`src/components/layout/Columns.jsx`) — Horizontal
column layout primitive.
- **`ExpandableCard`** (`src/components/layout/ExpandableCard.jsx`) —
Collapsible card for progressive disclosure (used on
`TransactionDetails`).
- **`StableHeightContainer`**
(`src/components/layout/StableHeightContainer.jsx`) — Prevents height
jitter on dynamic-height `Alert` in address book forms.
- **`MultiColumnList`** (`src/components/layout/MultiColumnList.jsx`) —
Multi-column list layout.
- **`WidgetContainer`** (`src/components/layout/WidgetContainer.jsx`) —
Standardized titled widget wrapper; refactors `AddressBook`, `History`,
and `Multisig` widgets.
- **`WidgetAnimatedWrapper`**
(`src/screens/home/components/WidgetAnimatedWrapper.jsx`) — Animated
entrance/exit wrapper for Home screen widgets.
- **`ScreenIllustration`**
(`src/components/visual/ScreenIllustration.jsx`) — Displays themed
screen art images (address book, harvesting, multisig, bridge, etc.).
### Common Library Additions (`wallet/common/symbol`)
- **`MultisigModule`** — Full multisig account management: persistent
caching, account fetch, aggregate transaction creation for account
modification.
- **`signTransactionBundle`** / **`announceTransactionBundle`** —
Extended to support cosignatures for multisig account modification
flows.
- **`signTransaction`** — Extended to support cosignatures.
- **`isPublicKey`** utility added.
- `AccountInfo` now exposes `minApproval` and `minRemoval`.
- Aggregate-bonded constants moved to shared constants.
- `fetchAccountTransaction` added to wallet controller for Ethereum and
Symbol.
### Refactoring & Improvements
- **Send screen** — Extracted into `useSendFormState`,
`useSendTransaction`, `useSenderInfo` hooks and `send-display` utils;
added `senderAddress` route param to support pre-filling sender in
multisig flows.
- **Home screen** — Pixel-perfect spacing, animated widget list
(`WidgetAnimatedWrapper`), `MultisigWidget` integrated.
- **`FilteredListScreenTemplate`** — Gained list item insert/remove
animation via `AnimatedListItem`.
- **`TableView`** — Added `delta` row type; fixed token resolution and
incorrect data property handling.
- **`InputAddress`** — Added `extraValidators` prop; added
`validateAddress` cross-chain validator.
- **`Passcode`** — Added verify animation (`usePasscodeJumpAnimation`).
- **`ButtonCircle`** — Added size variants.
- **`CopyButton`** — Added inverse color property.
- **`Divider`** — Added inversed color variant.
- **`DialogBox`** — Added disabled state.
- **`Alert`** — Added `customIcon` prop.
- **Color palette** — Added progress and accent semantic color tokens;
expanded primitive palette.
- **JS-Doc** — Added ESLint JS-Doc rules (`.eslintrc.yaml`); audited and
fixed JS-Doc across hooks, screens, components, and utilities.
- **Transaction history** — Local cache for unconfirmed/partial
transactions to prevent re-mount animation flashes; `useCosignFlow` for
cosign actions from history; more auto-refresh cases.
- **App launch** — Reduced startup time by rearranging initial calls in
`App.jsx`.
- **Asset images** — Added art illustrations, multisig component assets,
new icon variants (info-circle, cross-circle, question-circle, lock,
message, namespace, arrow, bridge symbol/ethereum).
### Tests
- Added tests for: `Actions`, `ContactList`, `ContactDetails`,
`CreateContact`, `EditContact`, `Harvesting`, `TransactionDetails`,
`MultisigAccountList`, `MultisigAccountDetails`,
`CreateMultisigAccount`, `ModifyMultisigAccount`, `Scan`,
`TransportRequest`, `transport-actions`.
- Added `ContactFixtureBuilder`, `multisig-test-helper`.
- Updated existing tests for `AccountDetails`, `AddSeedAccount`,
`Assets`, `TokenDetails`, `BridgeAccountDetails`, `BridgeSwap`,
`useBridgeHistory`, `History`, `useHistoryData`, `Home`, `TableView`,
`TransactionStatusDialog`, `PasscodeManager`, `MultisigModule`,
`PersistentStorageRepository`.1 parent 8d7d7c8 commit 26ff5c8
417 files changed
Lines changed: 19051 additions & 2564 deletions
File tree
- wallet
- common
- core
- src
- constants
- lib
- bridge
- controller
- storage
- tests/lib
- ethereum
- src/api
- tests/api
- symbol
- src
- api
- constants
- modules
- types
- utils
- tests
- __fixtures__/local
- api
- modules
- utils
- symbol/mobile
- __fixtures__/local
- __tests__
- components
- features
- templates/TransactionScreenTemplate/components
- lib
- screens
- account
- actions
- address-book
- assets
- bridge
- hooks
- harvesting
- history
- hooks
- home
- multisig
- transport
- utils
- src
- app
- components
- hooks
- layout
- assets/images
- accounts
- art
- components
- graphic
- multisig
- icons
- blue
- grey
- white
- components
- controls
- display
- Account
- RowWithButton
- Token
- Transaction
- features
- Passcode
- components
- hooks
- utils
- feedback
- layout
- templates
- FilteredListScreenTemplate
- TransactionScreenTemplate
- components
- hooks
- utils
- typography
- visual
- config
- constants
- hooks
- lib
- blockie
- vendors
- controller/symbol
- passcode
- storage
- transport
- localization/locales
- router
- screens
- account
- components
- hooks
- actions
- components
- types
- address-book
- components
- hooks
- types
- utils
- widgets
- assets
- components
- hooks
- types
- utils
- bridge
- components
- hooks
- types
- utils
- harvesting
- components
- constants
- hooks
- types
- utils
- widgets
- history
- components
- constants
- hooks
- types
- utils
- widgets
- home
- components
- multisig
- components
- hooks
- types
- utils
- widgets
- onboarding/components
- send
- hooks
- types
- utils
- settings
- components
- transport
- components
- hooks
- types
- utils
- styles
- colors
- sizes
- typography
- types
- utils
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
70 | 70 | | |
71 | 71 | | |
72 | 72 | | |
| 73 | + | |
73 | 74 | | |
74 | 75 | | |
75 | 76 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
6 | 6 | | |
7 | 7 | | |
8 | 8 | | |
| 9 | + | |
9 | 10 | | |
10 | 11 | | |
11 | 12 | | |
| |||
19 | 20 | | |
20 | 21 | | |
21 | 22 | | |
22 | | - | |
| 23 | + | |
23 | 24 | | |
24 | 25 | | |
25 | 26 | | |
| |||
47 | 48 | | |
48 | 49 | | |
49 | 50 | | |
| 51 | + | |
50 | 52 | | |
51 | 53 | | |
52 | 54 | | |
53 | 55 | | |
54 | 56 | | |
55 | 57 | | |
| 58 | + | |
| 59 | + | |
56 | 60 | | |
57 | 61 | | |
58 | 62 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
278 | 278 | | |
279 | 279 | | |
280 | 280 | | |
281 | | - | |
282 | 281 | | |
283 | 282 | | |
284 | 283 | | |
| |||
299 | 298 | | |
300 | 299 | | |
301 | 300 | | |
302 | | - | |
| 301 | + | |
| 302 | + | |
| 303 | + | |
303 | 304 | | |
304 | | - | |
305 | 305 | | |
306 | 306 | | |
307 | 307 | | |
| |||
Lines changed: 16 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
473 | 473 | | |
474 | 474 | | |
475 | 475 | | |
| 476 | + | |
476 | 477 | | |
477 | | - | |
| 478 | + | |
| 479 | + | |
| 480 | + | |
478 | 481 | | |
479 | 482 | | |
480 | 483 | | |
| |||
591 | 594 | | |
592 | 595 | | |
593 | 596 | | |
594 | | - | |
| 597 | + | |
595 | 598 | | |
596 | 599 | | |
597 | 600 | | |
| |||
753 | 756 | | |
754 | 757 | | |
755 | 758 | | |
| 759 | + | |
| 760 | + | |
| 761 | + | |
| 762 | + | |
| 763 | + | |
| 764 | + | |
| 765 | + | |
| 766 | + | |
| 767 | + | |
| 768 | + | |
| 769 | + | |
756 | 770 | | |
757 | 771 | | |
758 | 772 | | |
| |||
Lines changed: 61 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
24 | 24 | | |
25 | 25 | | |
26 | 26 | | |
27 | | - | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
28 | 31 | | |
29 | 32 | | |
30 | 33 | | |
| |||
259 | 262 | | |
260 | 263 | | |
261 | 264 | | |
| 265 | + | |
| 266 | + | |
| 267 | + | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
| 273 | + | |
| 274 | + | |
| 275 | + | |
| 276 | + | |
| 277 | + | |
| 278 | + | |
| 279 | + | |
| 280 | + | |
| 281 | + | |
| 282 | + | |
| 283 | + | |
| 284 | + | |
| 285 | + | |
| 286 | + | |
| 287 | + | |
| 288 | + | |
| 289 | + | |
| 290 | + | |
| 291 | + | |
| 292 | + | |
| 293 | + | |
| 294 | + | |
| 295 | + | |
| 296 | + | |
| 297 | + | |
| 298 | + | |
| 299 | + | |
| 300 | + | |
| 301 | + | |
| 302 | + | |
262 | 303 | | |
263 | 304 | | |
264 | 305 | | |
| |||
276 | 317 | | |
277 | 318 | | |
278 | 319 | | |
| 320 | + | |
| 321 | + | |
| 322 | + | |
| 323 | + | |
| 324 | + | |
| 325 | + | |
| 326 | + | |
| 327 | + | |
| 328 | + | |
| 329 | + | |
| 330 | + | |
| 331 | + | |
| 332 | + | |
| 333 | + | |
| 334 | + | |
| 335 | + | |
| 336 | + | |
| 337 | + | |
| 338 | + | |
279 | 339 | | |
280 | 340 | | |
281 | 341 | | |
| |||
Lines changed: 33 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
136 | 136 | | |
137 | 137 | | |
138 | 138 | | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
139 | 172 | | |
140 | 173 | | |
141 | 174 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
20 | 20 | | |
21 | 21 | | |
22 | 22 | | |
| 23 | + | |
23 | 24 | | |
24 | 25 | | |
25 | 26 | | |
| |||
432 | 433 | | |
433 | 434 | | |
434 | 435 | | |
435 | | - | |
| 436 | + | |
436 | 437 | | |
437 | 438 | | |
438 | 439 | | |
| |||
658 | 659 | | |
659 | 660 | | |
660 | 661 | | |
661 | | - | |
| 662 | + | |
| 663 | + | |
| 664 | + | |
| 665 | + | |
| 666 | + | |
| 667 | + | |
| 668 | + | |
| 669 | + | |
| 670 | + | |
662 | 671 | | |
663 | 672 | | |
664 | 673 | | |
665 | 674 | | |
666 | 675 | | |
667 | | - | |
| 676 | + | |
| 677 | + | |
668 | 678 | | |
669 | 679 | | |
670 | 680 | | |
671 | 681 | | |
672 | 682 | | |
673 | | - | |
| 683 | + | |
| 684 | + | |
674 | 685 | | |
675 | 686 | | |
676 | 687 | | |
677 | 688 | | |
678 | | - | |
| 689 | + | |
| 690 | + | |
| 691 | + | |
| 692 | + | |
| 693 | + | |
| 694 | + | |
| 695 | + | |
679 | 696 | | |
680 | 697 | | |
681 | 698 | | |
| |||
689 | 706 | | |
690 | 707 | | |
691 | 708 | | |
692 | | - | |
| 709 | + | |
693 | 710 | | |
694 | 711 | | |
695 | 712 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
39 | 39 | | |
40 | 40 | | |
41 | 41 | | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
42 | 60 | | |
43 | 61 | | |
44 | 62 | | |
| |||
Lines changed: 42 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
93 | 93 | | |
94 | 94 | | |
95 | 95 | | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
96 | 138 | | |
97 | 139 | | |
98 | 140 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
79 | 79 | | |
80 | 80 | | |
81 | 81 | | |
82 | | - | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
83 | 89 | | |
84 | 90 | | |
85 | 91 | | |
| |||
0 commit comments