Skip to content

Commit a25c396

Browse files
committed
Update ConnectPresenter
1 parent 42ce275 commit a25c396

4 files changed

Lines changed: 83 additions & 35 deletions

File tree

Packages/com.walletconnect.web3modal/Resources/WalletConnect/Web3Modal/Views/AccountView/AccountView.uxml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
variant="Shade"
1313
/>
1414
</ui:VisualElement>
15-
1615
</ui:VisualElement>
1716
<ui:VisualElement name="account-view__profile-balance-container">
1817
<ui:Label name="account-view__profile-balance-value"/>

Packages/com.walletconnect.web3modal/Runtime/Presenters/AccountPresenter.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public AccountPresenter(RouterController router, VisualElement parent) : base(ro
3939

4040
private void InitializeButtons(VisualElement buttonsListView)
4141
{
42-
BuildButtons(buttonsListView);
42+
CreateButtons(buttonsListView);
4343
}
4444

4545
private void AccountPropertyChangedHandler(object sender, PropertyChangedEventArgs e)
@@ -68,13 +68,13 @@ private void ChainChangedHandler(object sender, NetworkController.ChainChangedEv
6868
}
6969

7070
// Creates the buttons at the bottom of the account view.
71-
protected virtual void BuildButtons(VisualElement buttonsListView)
71+
protected virtual void CreateButtons(VisualElement buttonsListView)
7272
{
73-
BuildNetworkButton(buttonsListView);
74-
BuildDisconnectButton(buttonsListView);
73+
CreateNetworkButton(buttonsListView);
74+
CreateDisconnectButton(buttonsListView);
7575
}
7676

77-
protected virtual void BuildNetworkButton(VisualElement buttonsListView)
77+
protected virtual void CreateNetworkButton(VisualElement buttonsListView)
7878
{
7979
_networkButton = new ListItem("Network", OnNetworkButtonClick, null, ListItem.IconType.Circle)
8080
{
@@ -87,7 +87,7 @@ protected virtual void BuildNetworkButton(VisualElement buttonsListView)
8787
buttonsListView.Add(_networkButton);
8888
}
8989

90-
protected virtual void BuildDisconnectButton(VisualElement buttonsListView)
90+
protected virtual void CreateDisconnectButton(VisualElement buttonsListView)
9191
{
9292
var disconnectIcon = Resources.Load<VectorImage>("WalletConnect/Web3Modal/Icons/icon_medium_disconnect");
9393
var disconnectButton = new ListItem("Disconnect", OnDisconnectButtonClick, disconnectIcon, ListItem.IconType.Circle, ListItem.IconStyle.Accent);

Packages/com.walletconnect.web3modal/Runtime/Presenters/ConnectPresenter.cs

Lines changed: 76 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -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
}

Packages/com.walletconnect.web3modal/Runtime/Presenters/Presenter.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ protected virtual void Dispose(bool disposing)
7373
protected abstract void OnDisableCore();
7474
}
7575

76-
public abstract class Presenter<TView> : PresenterBase where TView : VisualElement, new()
76+
public class Presenter<TView> : PresenterBase where TView : VisualElement, new()
7777
{
7878
protected TView View { get; set; }
7979

0 commit comments

Comments
 (0)