Skip to content

Commit 47e3077

Browse files
committed
Made router extendable and presenter disposable
1 parent 306ec7a commit 47e3077

8 files changed

Lines changed: 177 additions & 118 deletions

File tree

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

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,49 +6,49 @@ namespace WalletConnect.Web3Modal
66
public abstract class ModalController
77
{
88
public bool IsOpen { get; private set; }
9-
9+
1010
public event EventHandler<ModalOpenStateChangedEventArgs> OpenStateChanged;
11-
11+
1212
private bool _isInitialized;
13-
13+
1414
public async Task InitializeAsync()
1515
{
1616
if (_isInitialized)
1717
throw new Exception("Already initialized"); // TODO: use custom ex type
18-
18+
1919
OpenStateChanged += OpenStateChangedHandler;
2020
await InitializeAsyncCore();
21-
21+
2222
_isInitialized = true;
2323
}
2424

2525
public void Open(ViewType view)
2626
{
2727
OpenCore(view);
2828
}
29-
29+
3030
public void Close()
3131
{
3232
CloseCore();
3333
}
34-
34+
3535
protected virtual void OnOpenStateChanged(ModalOpenStateChangedEventArgs e)
3636
{
3737
OpenStateChanged?.Invoke(this, e);
3838
}
39-
39+
4040
private void OpenStateChangedHandler(object sender, ModalOpenStateChangedEventArgs e)
4141
{
4242
IsOpen = e.IsOpen;
4343
}
44-
45-
public abstract Task InitializeAsyncCore();
46-
47-
public abstract void OpenCore(ViewType view);
4844

49-
public abstract void CloseCore();
45+
protected abstract Task InitializeAsyncCore();
46+
47+
protected abstract void OpenCore(ViewType view);
48+
49+
protected abstract void CloseCore();
5050
}
51-
51+
5252
public class ModalOpenStateChangedEventArgs : EventArgs
5353
{
5454
public bool IsOpen { get; }
@@ -58,7 +58,7 @@ public ModalOpenStateChangedEventArgs(bool isOpen)
5858
IsOpen = isOpen;
5959
}
6060
}
61-
61+
6262
public enum ViewType
6363
{
6464
None,

Packages/com.walletconnect.web3modal/Runtime/Controllers/ModalController/ModalControllerUtk.cs

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -13,25 +13,24 @@ namespace WalletConnect.Web3Modal
1313
/// </summary>
1414
public class ModalControllerUtk : ModalController
1515
{
16-
protected UIDocument UIDocument { get; private set; }
16+
public UIDocument UIDocument { get; private set; }
1717

18-
protected Modal Modal { get; private set; }
18+
public Modal Modal { get; private set; }
1919

20-
protected VisualElement Web3Modal { get; private set; }
20+
public VisualElement Web3Modal { get; private set; }
2121

22-
protected RouterController RouterController { get; private set; }
22+
public RouterController RouterController { get; private set; }
2323

2424
protected ModalHeaderPresenter ModalHeaderPresenter { get; private set; }
25-
25+
2626
private readonly ModalOpenStateChangedEventArgs _openStateChangedEventArgsTrueOnOpen = new(true);
2727
private readonly ModalOpenStateChangedEventArgs _openStateChangedEventArgsTrueOnClose = new(false);
28-
29-
public override Task InitializeAsyncCore()
28+
29+
protected override Task InitializeAsyncCore()
3030
{
31-
Debug.Log("Initializing ModalControllerUtk...");
3231
var web3Modal = WalletConnect.Web3Modal.Web3Modal.Instance;
3332
UIDocument = web3Modal.GetComponentInChildren<UIDocument>(true);
34-
33+
3534
Web3Modal = UIDocument.rootVisualElement.Children().First();
3635

3736
Modal = Web3Modal.Q<Modal>();
@@ -42,10 +41,8 @@ public override Task InitializeAsyncCore()
4241
ModalHeaderPresenter = new ModalHeaderPresenter(RouterController, Modal.header);
4342

4443
WCLoadingAnimator.Instance.PauseAnimation();
45-
46-
UnityEventsDispatcher.Instance.Tick += TickHandler;
4744

48-
Debug.Log("ModalControllerUtk initialized.");
45+
UnityEventsDispatcher.Instance.Tick += TickHandler;
4946

5047
return Task.CompletedTask;
5148
}
@@ -56,15 +53,15 @@ private void ViewChangedHandler(object _, ViewChangedEventArgs args)
5653
CloseCore();
5754
}
5855

59-
public override void OpenCore(ViewType view)
56+
protected override void OpenCore(ViewType view)
6057
{
6158
Web3Modal.visible = true;
6259
RouterController.OpenView(view);
6360
WCLoadingAnimator.Instance.ResumeAnimation();
6461
OnOpenStateChanged(_openStateChangedEventArgsTrueOnOpen);
6562
}
6663

67-
public override void CloseCore()
64+
protected override void CloseCore()
6865
{
6966
Web3Modal.visible = false;
7067
WCLoadingAnimator.Instance.PauseAnimation();

Packages/com.walletconnect.web3modal/Runtime/Controllers/ModalController/ModalControllerWebGl.cs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
using System.Threading.Tasks;
22
using UnityEngine;
33
using WalletConnect.Web3Modal.WebGl.Modal;
4-
54
using NativeViewType = WalletConnect.Web3Modal.ViewType;
65
using WebGlViewType = WalletConnect.Web3Modal.WebGl.Modal.ViewType;
76

@@ -12,7 +11,7 @@ namespace WalletConnect.Web3Modal.WebGl
1211
/// </summary>
1312
public class ModalControllerWebGl : ModalController
1413
{
15-
public override Task InitializeAsyncCore()
14+
protected override Task InitializeAsyncCore()
1615
{
1716
ModalInterop.StateChanged += StateChangedHandler;
1817
return Task.CompletedTask;
@@ -26,17 +25,17 @@ private void StateChangedHandler(ModalState modalState)
2625
OnOpenStateChanged(new ModalOpenStateChangedEventArgs(modalState.open));
2726
}
2827

29-
public override void OpenCore(NativeViewType view)
28+
protected override void OpenCore(NativeViewType view)
3029
{
3130
var viewType = ConvertViewType(view);
3231
ModalInterop.Open(new OpenModalParameters(viewType));
3332
}
3433

35-
public override void CloseCore()
34+
protected override void CloseCore()
3635
{
3736
ModalInterop.Close();
3837
}
39-
38+
4039
private static WebGlViewType ConvertViewType(NativeViewType viewType)
4140
{
4241
return viewType switch

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

Lines changed: 27 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,14 @@ namespace WalletConnect.Web3Modal
66
{
77
public class RouterController
88
{
9-
private readonly Dictionary<ViewType, PresenterBase> _viewsControllers = new();
9+
private readonly Dictionary<ViewType, PresenterBase> _modalViews = new();
1010
private readonly Stack<ViewType> _history = new();
1111

1212
public event EventHandler<ViewChangedEventArgs> ViewChanged;
1313

1414
public PresenterBase CurrentPresenter
1515
{
16-
get => _viewsControllers[_history.Peek()];
16+
get => _modalViews[_history.Peek()];
1717
}
1818

1919
private readonly VisualElement _routerVisualElement;
@@ -27,7 +27,7 @@ public RouterController(VisualElement parent)
2727

2828
parent.Add(_routerVisualElement);
2929

30-
BuildViewsDictionary();
30+
RegisterDefaultModalViews();
3131
}
3232

3333
public void OpenView(ViewType viewType)
@@ -41,9 +41,9 @@ public void OpenView(ViewType viewType)
4141
}
4242

4343
_history.Push(viewType);
44-
_viewsControllers[viewType].OnVisible();
45-
_viewsControllers[viewType].ShowViewVisualElement();
46-
ViewChanged?.Invoke(this, new ViewChangedEventArgs(currentViewType, viewType, _viewsControllers[viewType]));
44+
_modalViews[viewType].OnVisible();
45+
_modalViews[viewType].ShowViewVisualElement();
46+
ViewChanged?.Invoke(this, new ViewChangedEventArgs(currentViewType, viewType, _modalViews[viewType]));
4747
}
4848

4949
public void GoBack()
@@ -52,13 +52,13 @@ public void GoBack()
5252
return;
5353

5454
var oldViewType = _history.Pop();
55-
_viewsControllers[oldViewType].OnDisable();
56-
_viewsControllers[oldViewType].HideViewVisualElement();
55+
_modalViews[oldViewType].OnDisable();
56+
_modalViews[oldViewType].HideViewVisualElement();
5757

5858
if (_history.Count > 0)
5959
{
6060
var nextViewType = _history.Peek();
61-
var nextView = _viewsControllers[nextViewType];
61+
var nextView = _modalViews[nextViewType];
6262
nextView.OnVisible();
6363
nextView.ShowViewVisualElement();
6464
ViewChanged?.Invoke(this, new ViewChangedEventArgs(oldViewType, nextViewType, nextView));
@@ -74,20 +74,28 @@ public void CloseAllViews()
7474
while (_history.Count > 0)
7575
{
7676
var viewType = _history.Pop();
77-
_viewsControllers[viewType].OnDisable();
78-
_viewsControllers[viewType].HideViewVisualElement();
77+
_modalViews[viewType].OnDisable();
78+
_modalViews[viewType].HideViewVisualElement();
7979
}
8080
}
8181

82-
private void BuildViewsDictionary()
82+
public void RegisterModalView(ViewType viewType, PresenterBase modalView)
8383
{
84-
_viewsControllers.Add(ViewType.Connect, new ConnectPresenter(this, _routerVisualElement));
85-
_viewsControllers.Add(ViewType.QrCode, new QrCodePresenter(this, _routerVisualElement));
86-
_viewsControllers.Add(ViewType.Wallet, new WalletPresenter(this, _routerVisualElement));
87-
_viewsControllers.Add(ViewType.WalletSearch, new WalletSearchPresenter(this, _routerVisualElement));
88-
_viewsControllers.Add(ViewType.Account, new AccountPresenter(this, _routerVisualElement));
89-
_viewsControllers.Add(ViewType.NetworkSearch, new NetworkSearchPresenter(this, _routerVisualElement));
90-
_viewsControllers.Add(ViewType.NetworkLoading, new NetworkLoadingPresenter(this, _routerVisualElement));
84+
if (_modalViews.TryGetValue(viewType, out var oldModalView))
85+
oldModalView.Dispose();
86+
87+
_modalViews[viewType] = modalView;
88+
}
89+
90+
private void RegisterDefaultModalViews()
91+
{
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));
9199
}
92100
}
93101

0 commit comments

Comments
 (0)