Skip to content

Commit 860b80b

Browse files
committed
CustomAccountPresenter
1 parent 47e3077 commit 860b80b

7 files changed

Lines changed: 229 additions & 20 deletions

File tree

Packages/com.walletconnect.web3modal/Runtime/Controllers/RouterController.cs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,16 @@ public PresenterBase CurrentPresenter
1616
get => _modalViews[_history.Peek()];
1717
}
1818

19-
private readonly VisualElement _routerVisualElement;
19+
public VisualElement RootVisualElement { get; }
2020

2121
public RouterController(VisualElement parent)
2222
{
23-
_routerVisualElement = new VisualElement
23+
RootVisualElement = new VisualElement
2424
{
2525
name = "router"
2626
};
2727

28-
parent.Add(_routerVisualElement);
28+
parent.Add(RootVisualElement);
2929

3030
RegisterDefaultModalViews();
3131
}
@@ -89,13 +89,13 @@ public void RegisterModalView(ViewType viewType, PresenterBase modalView)
8989

9090
private void RegisterDefaultModalViews()
9191
{
92-
RegisterModalView(ViewType.Connect, new ConnectPresenter(this, _routerVisualElement));
93-
RegisterModalView(ViewType.QrCode, new QrCodePresenter(this, _routerVisualElement));
94-
RegisterModalView(ViewType.Wallet, new WalletPresenter(this, _routerVisualElement));
95-
RegisterModalView(ViewType.WalletSearch, new WalletSearchPresenter(this, _routerVisualElement));
96-
RegisterModalView(ViewType.Account, new AccountPresenter(this, _routerVisualElement));
97-
RegisterModalView(ViewType.NetworkSearch, new NetworkSearchPresenter(this, _routerVisualElement));
98-
RegisterModalView(ViewType.NetworkLoading, new NetworkLoadingPresenter(this, _routerVisualElement));
92+
RegisterModalView(ViewType.Connect, new ConnectPresenter(this, RootVisualElement));
93+
RegisterModalView(ViewType.QrCode, new QrCodePresenter(this, RootVisualElement));
94+
RegisterModalView(ViewType.Wallet, new WalletPresenter(this, RootVisualElement));
95+
RegisterModalView(ViewType.WalletSearch, new WalletSearchPresenter(this, RootVisualElement));
96+
RegisterModalView(ViewType.Account, new AccountPresenter(this, RootVisualElement));
97+
RegisterModalView(ViewType.NetworkSearch, new NetworkSearchPresenter(this, RootVisualElement));
98+
RegisterModalView(ViewType.NetworkLoading, new NetworkLoadingPresenter(this, RootVisualElement));
9999
}
100100
}
101101

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

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System;
12
using System.Collections.Generic;
23
using System.ComponentModel;
34
using UnityEngine;
@@ -16,8 +17,9 @@ public override bool HeaderBorder
1617
get => false;
1718
}
1819

19-
// List of buttons at the bottom of the account view
20-
private readonly HashSet<ListItem> _buttons = new();
20+
// List of buttons at the bottom of the account view.
21+
// This list is used to enable/disable all buttons at once when needed.
22+
protected readonly HashSet<ListItem> Buttons = new();
2123

2224
private bool _disposed;
2325
private ListItem _networkButton;
@@ -46,8 +48,6 @@ public AccountPresenter(RouterController router, VisualElement parent) : base(ro
4648

4749
private void InitializeButtons(VisualElement buttonsListView)
4850
{
49-
// This method is non-virtual and is called from the constructor
50-
// It calls the virtual method which can be overridden by derived classes
5151
CreateButtons(buttonsListView);
5252
}
5353

@@ -76,6 +76,7 @@ private void ChainChangedHandler(object sender, NetworkController.ChainChangedEv
7676
UpdateNetworkButton(e.Chain);
7777
}
7878

79+
// Creates the buttons at the bottom of the account view.
7980
protected virtual void CreateButtons(VisualElement buttonsListView)
8081
{
8182
CreateNetworkButton(buttonsListView);
@@ -91,24 +92,23 @@ protected virtual void CreateNetworkButton(VisualElement buttonsListView)
9192
vectorImage = Resources.Load<VectorImage>("WalletConnect/Web3Modal/Icons/icon_medium_info")
9293
}
9394
};
94-
_buttons.Add(_networkButton);
95+
Buttons.Add(_networkButton);
9596
buttonsListView.Add(_networkButton);
9697
}
9798

9899
protected virtual void CreateDisconnectButton(VisualElement buttonsListView)
99100
{
100101
var disconnectIcon = Resources.Load<VectorImage>("WalletConnect/Web3Modal/Icons/icon_medium_disconnect");
101102
var disconnectButton = new ListItem("Disconnect", OnDisconnectButtonClick, disconnectIcon, ListItem.IconType.Circle, ListItem.IconStyle.Accent);
102-
_buttons.Add(disconnectButton);
103+
Buttons.Add(disconnectButton);
103104
buttonsListView.Add(disconnectButton);
104105
}
105106

106107
protected virtual void UpdateProfileName()
107108
{
108109
var profileName = Web3Modal.AccountController.ProfileName;
109-
profileName = profileName.Length > 15
110-
? profileName.Truncate(6)
111-
: profileName;
110+
if (profileName.Length > 15)
111+
profileName = profileName.Truncate(6);
112112

113113
View.SetProfileName(profileName);
114114
}
@@ -168,6 +168,10 @@ protected virtual async void OnDisconnectButtonClick()
168168
ButtonsSetEnabled(false);
169169
await Web3Modal.DisconnectAsync();
170170
}
171+
catch (Exception e)
172+
{
173+
Debug.LogException(e);
174+
}
171175
finally
172176
{
173177
ButtonsSetEnabled(true);
@@ -196,7 +200,7 @@ protected virtual void OnCopyAddressButtonClick()
196200

197201
private void ButtonsSetEnabled(bool value)
198202
{
199-
foreach (var button in _buttons)
203+
foreach (var button in Buttons)
200204
button.SetEnabled(value);
201205
}
202206

7.94 KB
Loading

Samples/Customization/Assets/Resources/OpenSea Logo.png.meta

Lines changed: 153 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
using UnityEngine;
2+
using UnityEngine.UIElements;
3+
using WalletConnect.UI;
4+
5+
namespace WalletConnect.Web3Modal.CustomizationSample
6+
{
7+
public class CustomAccountPresenter : AccountPresenter
8+
{
9+
public CustomAccountPresenter(RouterController router, VisualElement parent) : base(router, parent)
10+
{
11+
}
12+
13+
protected override void CreateButtons(VisualElement buttonsListView)
14+
{
15+
CreateOpenSeaButton(buttonsListView);
16+
17+
base.CreateButtons(buttonsListView);
18+
}
19+
20+
private void CreateOpenSeaButton(VisualElement buttonsListView)
21+
{
22+
var openSeaIcon = Resources.Load<Sprite>("OpenSea Logo");
23+
var openSeaButton = new ListItem(
24+
"OpenSea",
25+
openSeaIcon,
26+
OnOpenSeaButtonClick,
27+
iconType: ListItem.IconType.Circle,
28+
iconStyle: ListItem.IconStyle.Accent);
29+
30+
Buttons.Add(openSeaButton);
31+
buttonsListView.Add(openSeaButton);
32+
}
33+
34+
private void OnOpenSeaButtonClick()
35+
{
36+
var address = Web3Modal.AccountController.Address;
37+
var url = $"https://opensea.io/{address}";
38+
Application.OpenURL(url);
39+
}
40+
}
41+
}

Samples/Customization/Assets/Scripts/CustomAccountPresenter.cs.meta

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Samples/Customization/Assets/Scripts/Dapp.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,14 @@ private async void Start()
2525
{
2626
await Web3Modal.InitializeAsync();
2727

28+
var modalController = (ModalControllerUtk)Web3Modal.ModalController;
29+
if (modalController != null)
30+
{
31+
var routerController = modalController.RouterController;
32+
var customAccountPresenter = new CustomAccountPresenter(routerController, routerController.RootVisualElement);
33+
routerController.RegisterModalView(ViewType.Account, customAccountPresenter);
34+
}
35+
2836
Web3Modal.AccountConnected += async (_, e) =>
2937
{
3038
_connectButton.interactable = false;

0 commit comments

Comments
 (0)