@@ -13,6 +13,8 @@ namespace WalletConnect.Web3Modal
1313{
1414 public class ConnectPresenter : Presenter < VisualElement >
1515 {
16+ private bool _disposed ;
17+
1618 public override string Title
1719 {
1820 get => "Connect wallet" ;
@@ -22,10 +24,17 @@ public ConnectPresenter(RouterController router, VisualElement parent) : base(ro
2224 {
2325 Build ( ) ;
2426
25- // Rebuild UI after wallet disconnects
26- Web3Modal . Initialized += ( _ , _ ) =>
27- Web3Modal . AccountDisconnected += async ( _ , _ ) =>
28- await RebuildAsync ( ) ;
27+ Web3Modal . Initialized += Web3ModalInitializedHandler ;
28+ }
29+
30+ private void Web3ModalInitializedHandler ( object sender , EventArgs e )
31+ {
32+ Web3Modal . AccountDisconnected += AccountDisconnectedHandler ;
33+ }
34+
35+ private async void AccountDisconnectedHandler ( object sender , EventArgs e )
36+ {
37+ await RebuildAsync ( ) ;
2938 }
3039
3140 private async void Build ( )
@@ -50,11 +59,11 @@ protected virtual async Task RebuildAsync()
5059
5160 protected virtual async Task BuildAsync ( )
5261 {
53- ShowWalletConnectButton ( ) ;
62+ CreateWalletConnectButton ( ) ;
5463
5564 var recentWalletExists = WalletUtils . TryGetRecentWallet ( out var recentWallet ) ;
5665 if ( recentWalletExists )
57- ShowRecentWalletButton ( recentWallet ) ;
66+ CreateRecentWalletButton ( recentWallet ) ;
5867
5968 int count = DeviceUtils . GetDeviceType ( ) is DeviceType . Phone
6069 ? Web3Modal . Config . connectViewWalletsCountMobile
@@ -71,28 +80,55 @@ protected virtual async Task BuildAsync()
7180 if ( recentWalletExists && recentWallet . Id == wallet . Id )
7281 continue ;
7382
74- var remoteSprite =
75- RemoteSpriteFactory . GetRemoteSprite < Image > (
76- $ "https://api.web3modal.com/getWalletImage/{ wallet . ImageId } ") ;
77-
78- var walletClosure = wallet ;
79- var isWalletInstalled = WalletUtils . IsWalletInstalled ( wallet ) ;
80- var walletStatusIcon = isWalletInstalled ? StatusIconType . Success : StatusIconType . None ;
81- View . Add ( new ListItem ( wallet . Name , remoteSprite , ( ) => OnWalletListItemClick ( walletClosure ) , statusIconType : walletStatusIcon ) ) ;
83+ var walletListItem = BuildWalletListItem ( wallet ) ;
84+ View . Add ( walletListItem ) ;
8285 }
8386
84- var allWalletsListItem = new ListItem ( "All wallets" , ( Sprite ) null , ( ) => Router . OpenView ( ViewType . WalletSearch ) ) ;
85- var roundedCount = MathF . Round ( ( float ) response . Count / 10 ) * 10 ;
86- allWalletsListItem . RightSlot . Add ( new Tag ( $ "{ roundedCount } +", Tag . TagType . Info ) ) ;
87- View . Add ( allWalletsListItem ) ;
87+ var responseCount = response . Count ;
88+ CreateAllWalletsListItem ( responseCount ) ;
8889 }
8990
90- protected virtual void ShowWalletConnectButton ( )
91+ protected virtual void CreateWalletConnectButton ( )
9192 {
9293 var deviceType = DeviceUtils . GetDeviceType ( ) ;
9394
9495 if ( deviceType is DeviceType . Phone )
9596 return ;
97+ var listItem = BuildWalletConnectListItem ( ) ;
98+ View . Add ( listItem ) ;
99+ }
100+
101+ protected virtual void CreateRecentWalletButton ( Wallet recentWallet )
102+ {
103+ var remoteSprite =
104+ RemoteSpriteFactory . GetRemoteSprite < Image > (
105+ $ "https://api.web3modal.com/getWalletImage/{ recentWallet . ImageId } ") ;
106+ var listItem = new ListItem ( recentWallet . Name , remoteSprite , ( ) => OnWalletListItemClick ( recentWallet ) ) ;
107+ listItem . RightSlot . Add ( new Tag ( "RECENT" , Tag . TagType . Info ) ) ;
108+ View . Add ( listItem ) ;
109+ }
110+
111+ protected virtual void CreateAllWalletsListItem ( int responseCount )
112+ {
113+ var allWalletsListItem = BuildAllWalletsListItem ( responseCount ) ;
114+ View . Add ( allWalletsListItem ) ;
115+ }
116+
117+ protected virtual ListItem BuildWalletListItem ( Wallet wallet )
118+ {
119+ var remoteSprite =
120+ RemoteSpriteFactory . GetRemoteSprite < Image > (
121+ $ "https://api.web3modal.com/getWalletImage/{ wallet . ImageId } ") ;
122+
123+ var walletClosure = wallet ;
124+ var isWalletInstalled = WalletUtils . IsWalletInstalled ( wallet ) ;
125+ var walletStatusIcon = isWalletInstalled ? StatusIconType . Success : StatusIconType . None ;
126+ var walletListItem = new ListItem ( wallet . Name , remoteSprite , ( ) => OnWalletListItemClick ( walletClosure ) , statusIconType : walletStatusIcon ) ;
127+ return walletListItem ;
128+ }
129+
130+ protected virtual ListItem BuildWalletConnectListItem ( )
131+ {
96132 var wcLogo =
97133 RemoteSpriteFactory . GetRemoteSprite < Image > (
98134 $ "https://api.web3modal.com/public/getAssetImage/ef1a1fcf-7fe8-4d69-bd6d-fda1345b4400") ;
@@ -102,23 +138,36 @@ protected virtual void ShowWalletConnectButton()
102138 Router . OpenView ( ViewType . QrCode ) ;
103139 } ) ;
104140 listItem . RightSlot . Add ( new Tag ( "QR CODE" , Tag . TagType . Accent ) ) ;
105- View . Add ( listItem ) ;
141+ return listItem ;
106142 }
107143
108- protected virtual void ShowRecentWalletButton ( Wallet recentWallet )
144+ protected virtual ListItem BuildAllWalletsListItem ( int responseCount )
109145 {
110- var remoteSprite =
111- RemoteSpriteFactory . GetRemoteSprite < Image > (
112- $ "https://api.web3modal.com/getWalletImage/{ recentWallet . ImageId } ") ;
113- var listItem = new ListItem ( recentWallet . Name , remoteSprite , ( ) => OnWalletListItemClick ( recentWallet ) ) ;
114- listItem . RightSlot . Add ( new Tag ( "RECENT" , Tag . TagType . Info ) ) ;
115- View . Add ( listItem ) ;
146+ var allWalletsListItem = new ListItem ( "All wallets" , ( Sprite ) null , ( ) => Router . OpenView ( ViewType . WalletSearch ) ) ;
147+ var roundedCount = MathF . Round ( ( float ) responseCount / 10 ) * 10 ;
148+ allWalletsListItem . RightSlot . Add ( new Tag ( $ "{ roundedCount } +", Tag . TagType . Info ) ) ;
149+ return allWalletsListItem ;
116150 }
117151
118152 protected virtual void OnWalletListItemClick ( Wallet wallet )
119153 {
120154 WalletUtils . SetLastViewedWallet ( wallet ) ;
121155 Router . OpenView ( ViewType . Wallet ) ;
122156 }
157+
158+ protected override void Dispose ( bool disposing )
159+ {
160+ if ( _disposed )
161+ return ;
162+
163+ if ( disposing )
164+ {
165+ Web3Modal . Initialized -= Web3ModalInitializedHandler ;
166+ Web3Modal . AccountDisconnected -= AccountDisconnectedHandler ;
167+ }
168+
169+ _disposed = true ;
170+ base . Dispose ( disposing ) ;
171+ }
123172 }
124173}
0 commit comments