@@ -22,6 +22,9 @@ import {
22
22
KeyringAccountType ,
23
23
///: END:ONLY_INCLUDE_IF
24
24
} from '@metamask/keyring-api' ;
25
+ ///: BEGIN:ONLY_INCLUDE_IF(multi-srp)
26
+ import { CaipChainId } from '@metamask/utils' ;
27
+ ///: END:ONLY_INCLUDE_IF
25
28
///: BEGIN:ONLY_INCLUDE_IF(build-flask)
26
29
import {
27
30
BITCOIN_WALLET_NAME ,
@@ -77,10 +80,8 @@ import {
77
80
getIsSolanaSupportEnabled ,
78
81
///: END:ONLY_INCLUDE_IF
79
82
///: BEGIN:ONLY_INCLUDE_IF(multi-srp,solana)
80
- getMetaMaskHdKeyrings ,
81
- ///: END:ONLY_INCLUDE_IF
82
- ///: BEGIN:ONLY_INCLUDE_IF(multi-srp)
83
83
getHdKeyringOfSelectedAccountOrPrimaryKeyring ,
84
+ getMetaMaskHdKeyrings ,
84
85
///: END:ONLY_INCLUDE_IF
85
86
} from '../../../selectors' ;
86
87
import { setSelectedAccount } from '../../../store/actions' ;
@@ -131,6 +132,9 @@ import {
131
132
AccountOverviewTabKey ,
132
133
} from '../../../../shared/constants/app-state' ;
133
134
import { CreateEthAccount } from '../create-eth-account' ;
135
+ ///: BEGIN:ONLY_INCLUDE_IF(multi-srp)
136
+ import { CreateSnapAccount } from '../create-snap-account' ;
137
+ ///: END:ONLY_INCLUDE_IF
134
138
import { ImportAccount } from '../import-account' ;
135
139
///: BEGIN:ONLY_INCLUDE_IF(solana)
136
140
import {
@@ -159,6 +163,10 @@ const ACTION_MODES = {
159
163
// Same but for testnet
160
164
ADD_BITCOIN_TESTNET : 'add-bitcoin-testnet' ,
161
165
///: END:ONLY_INCLUDE_IF
166
+ ///: BEGIN:ONLY_INCLUDE_IF(solana)
167
+ // Displays the add account form controls (for solana account)
168
+ ADD_SOLANA : 'add-solana' ,
169
+ ///: END:ONLY_INCLUDE_IF
162
170
// Displays the import account form controls
163
171
IMPORT : 'import' ,
164
172
///: BEGIN:ONLY_INCLUDE_IF(multi-srp)
@@ -190,6 +198,10 @@ export const getActionTitle = (
190
198
case ACTION_MODES . ADD_BITCOIN_TESTNET :
191
199
return t ( 'addAccount' ) ;
192
200
///: END:ONLY_INCLUDE_IF
201
+ ///: BEGIN:ONLY_INCLUDE_IF(solana)
202
+ case ACTION_MODES . ADD_SOLANA :
203
+ return t ( 'addAccount' ) ;
204
+ ///: END:ONLY_INCLUDE_IF
193
205
case ACTION_MODES . IMPORT :
194
206
return t ( 'importPrivateKey' ) ;
195
207
///: BEGIN:ONLY_INCLUDE_IF(multi-srp)
@@ -252,6 +264,11 @@ export const AccountListMenu = ({
252
264
///: END:ONLY_INCLUDE_IF
253
265
const [ searchQuery , setSearchQuery ] = useState ( '' ) ;
254
266
const [ actionMode , setActionMode ] = useState ( ACTION_MODES . LIST ) ;
267
+ ///: BEGIN:ONLY_INCLUDE_IF(multi-srp)
268
+ const [ previousActionMode , setPreviousActionMode ] = useState (
269
+ ACTION_MODES . LIST ,
270
+ ) ;
271
+ ///: END:ONLY_INCLUDE_IF(multi-srp)
255
272
const hiddenAddresses = useSelector ( getHiddenAccountsList ) ;
256
273
const updatedAccountsList = useSelector ( getUpdatedAndSortedAccounts ) ;
257
274
const filteredUpdatedAccountList = useMemo (
@@ -267,6 +284,9 @@ export const AccountListMenu = ({
267
284
///: BEGIN:ONLY_INCLUDE_IF(keyring-snaps)
268
285
const addSnapAccountEnabled = useSelector ( getIsAddSnapAccountEnabled ) ;
269
286
///: END:ONLY_INCLUDE_IF
287
+ ///: BEGIN:ONLY_INCLUDE_IF(multi-srp)
288
+ const multiSrpEnabled = true ;
289
+ ///: END:ONLY_INCLUDE_IF
270
290
///: BEGIN:ONLY_INCLUDE_IF(build-flask)
271
291
const isAddWatchEthereumAccountEnabled = useSelector (
272
292
getIsWatchEthereumAccountEnabled ,
@@ -363,7 +383,7 @@ export const AccountListMenu = ({
363
383
onBack = ( ) => setActionMode ( ACTION_MODES . LIST ) ;
364
384
///: BEGIN:ONLY_INCLUDE_IF(multi-srp)
365
385
} else if ( actionMode === ACTION_MODES . SELECT_SRP ) {
366
- onBack = ( ) => setActionMode ( ACTION_MODES . ADD ) ;
386
+ onBack = ( ) => setActionMode ( previousActionMode ) ;
367
387
///: END:ONLY_INCLUDE_IF
368
388
} else {
369
389
onBack = ( ) => setActionMode ( ACTION_MODES . MENU ) ;
@@ -445,6 +465,55 @@ export const AccountListMenu = ({
445
465
searchQuery ,
446
466
] ) ;
447
467
468
+ const onActionComplete = useCallback (
469
+ async ( confirmed : boolean ) => {
470
+ if ( confirmed ) {
471
+ onClose ( ) ;
472
+ } else {
473
+ setActionMode ( ACTION_MODES . LIST ) ;
474
+ }
475
+ } ,
476
+ [ onClose , setActionMode ] ,
477
+ ) ;
478
+
479
+ /**
480
+ * Determines the client type and chain ID based on the action mode
481
+ *
482
+ * @param mode - The current action mode
483
+ * @returns An object containing the client type and chain ID, or null values if not a snap account creation mode
484
+ */
485
+ ///: BEGIN:ONLY_INCLUDE_IF(multi-srp)
486
+ const getSnapClientConfig = (
487
+ mode : string ,
488
+ ) : { clientType : WalletClientType | null ; chainId : CaipChainId | null } => {
489
+ switch ( mode ) {
490
+ case ACTION_MODES . ADD_BITCOIN :
491
+ return {
492
+ clientType : WalletClientType . Bitcoin ,
493
+ chainId : MultichainNetworks . BITCOIN ,
494
+ } ;
495
+ case ACTION_MODES . ADD_BITCOIN_TESTNET :
496
+ return {
497
+ clientType : WalletClientType . Bitcoin ,
498
+ chainId : MultichainNetworks . BITCOIN_TESTNET ,
499
+ } ;
500
+ case ACTION_MODES . ADD_SOLANA :
501
+ return {
502
+ clientType : WalletClientType . Solana ,
503
+ chainId : MultichainNetworks . SOLANA ,
504
+ } ;
505
+ default :
506
+ return {
507
+ clientType : null ,
508
+ chainId : null ,
509
+ } ;
510
+ }
511
+ } ;
512
+
513
+ // Use the helper function to get client type and chain ID
514
+ const { clientType, chainId } = getSnapClientConfig ( actionMode ) ;
515
+ ///: END:ONLY_INCLUDE_IF
516
+
448
517
return (
449
518
< Modal isOpen onClose = { onClose } >
450
519
< ModalOverlay />
@@ -463,36 +532,43 @@ export const AccountListMenu = ({
463
532
{ actionMode === ACTION_MODES . ADD ? (
464
533
< Box paddingLeft = { 4 } paddingRight = { 4 } paddingBottom = { 4 } >
465
534
< CreateEthAccount
466
- onActionComplete = { ( confirmed ) => {
467
- if ( confirmed ) {
468
- onClose ( ) ;
469
- } else {
470
- setActionMode ( ACTION_MODES . LIST ) ;
471
- }
472
- } }
535
+ onActionComplete = { onActionComplete }
473
536
///: BEGIN:ONLY_INCLUDE_IF(multi-srp)
474
537
selectedKeyringId = { selectedKeyringId }
475
- onSelectSrp = { ( ) => setActionMode ( ACTION_MODES . SELECT_SRP ) }
538
+ onSelectSrp = { ( ) => {
539
+ setPreviousActionMode ( ACTION_MODES . ADD ) ;
540
+ setActionMode ( ACTION_MODES . SELECT_SRP ) ;
541
+ } }
476
542
///: END:ONLY_INCLUDE_IF(multi-srp)
477
543
/>
478
544
</ Box >
479
545
) : null }
546
+ {
547
+ ///: BEGIN:ONLY_INCLUDE_IF(multi-srp)
548
+ clientType && chainId ? (
549
+ < Box paddingLeft = { 4 } paddingRight = { 4 } paddingBottom = { 4 } >
550
+ < CreateSnapAccount
551
+ onActionComplete = { onActionComplete }
552
+ selectedKeyringId = { selectedKeyringId }
553
+ onSelectSrp = { ( ) => {
554
+ setPreviousActionMode ( actionMode ) ;
555
+ setActionMode ( ACTION_MODES . SELECT_SRP ) ;
556
+ } }
557
+ clientType = { clientType }
558
+ chainId = { chainId }
559
+ />
560
+ </ Box >
561
+ ) : null
562
+ ///: END:ONLY_INCLUDE_IF(multi-srp)
563
+ }
480
564
{ actionMode === ACTION_MODES . IMPORT ? (
481
565
< Box
482
566
paddingLeft = { 4 }
483
567
paddingRight = { 4 }
484
568
paddingBottom = { 4 }
485
569
paddingTop = { 0 }
486
570
>
487
- < ImportAccount
488
- onActionComplete = { ( confirmed ) => {
489
- if ( confirmed ) {
490
- onClose ( ) ;
491
- } else {
492
- setActionMode ( ACTION_MODES . LIST ) ;
493
- }
494
- } }
495
- />
571
+ < ImportAccount onActionComplete = { onActionComplete } />
496
572
</ Box >
497
573
) : null }
498
574
{
@@ -505,15 +581,7 @@ export const AccountListMenu = ({
505
581
paddingTop = { 0 }
506
582
style = { { overflowY : 'scroll' } }
507
583
>
508
- < ImportSrp
509
- onActionComplete = { ( confirmed : boolean ) => {
510
- if ( confirmed ) {
511
- onClose ( ) ;
512
- } else {
513
- setActionMode ( ACTION_MODES . LIST ) ;
514
- }
515
- } }
516
- />
584
+ < ImportSrp onActionComplete = { onActionComplete } />
517
585
</ Box >
518
586
)
519
587
///: END:ONLY_INCLUDE_IF
@@ -524,7 +592,7 @@ export const AccountListMenu = ({
524
592
< SrpList
525
593
onActionComplete = { ( keyringId : string ) => {
526
594
setSelectedKeyringId ( keyringId ) ;
527
- setActionMode ( ACTION_MODES . ADD ) ;
595
+ setActionMode ( previousActionMode ) ;
528
596
} }
529
597
/>
530
598
)
@@ -582,12 +650,16 @@ export const AccountListMenu = ({
582
650
} ,
583
651
} ) ;
584
652
653
+ if ( multiSrpEnabled ) {
654
+ return setActionMode ( ACTION_MODES . ADD_SOLANA ) ;
655
+ }
656
+
585
657
// The account creation + renaming is handled by the
586
658
// Snap account bridge, so we need to close the current
587
659
// modal
588
660
onClose ( ) ;
589
661
590
- await solanaWalletSnapClient . createAccount (
662
+ return await solanaWalletSnapClient . createAccount (
591
663
MultichainNetworks . SOLANA ,
592
664
primaryKeyring . metadata . id ,
593
665
) ;
0 commit comments