Skip to content

Commit 0e9339b

Browse files
committed
Improved SideBarMenu View and Item to preserve state
1 parent 0714919 commit 0e9339b

File tree

2 files changed

+39
-11
lines changed

2 files changed

+39
-11
lines changed

src/Blazor.AdminLte/SideBar/SideBarMenuItem.razor

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,20 @@
3232
{
3333
// Subscribe to the event
3434
nav.LocationChanged += LocationChanged;
35+
36+
// Manually invoke location change to set state when user access URL directly
37+
// and to preserve highlight state when use refresh the page
38+
LocationChanged(this, null);
39+
3540
base.OnInitialized();
3641
}
3742

3843
void LocationChanged(object sender, LocationChangedEventArgs e)
3944
{
4045
if (new Uri(nav.Uri).PathAndQuery.Trim('/') != Link.Trim('/'))
4146
return;
42-
Mediator.Send(new SideBarState.SelectMenuItemAction() { Id = Id }); ;
47+
48+
Mediator.Send(new SideBarState.SelectMenuItemAction { Id = Id }); ;
4349
}
4450

4551
void IDisposable.Dispose()

src/Blazor.AdminLte/SideBar/SideBarTreeView.razor

Lines changed: 32 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
}
1212
</p>
1313
</a>
14-
<ul @ref="ul" class="nav nav-treeview" @onclick="SetActive">
14+
<ul @ref="ul" class="nav nav-treeview">
1515
@Items
1616
</ul>
1717
</li>
@@ -25,24 +25,51 @@
2525
[Parameter]
2626
public RenderFragment Items { get; set; }
2727

28+
[Parameter]
29+
public bool IsActive
30+
{
31+
get => _isActive;
32+
set
33+
{
34+
if (value)
35+
SetActive();
36+
else
37+
SetInactive();
38+
}
39+
}
40+
41+
private bool _isActive;
2842
private MenuState _menuState { get; set; }
2943

3044
private MenuState MenuState {
31-
get {
32-
return _menuState;
33-
} set {
45+
get => _menuState;
46+
set {
3447
if (_menuState == value)
3548
return;
49+
3650
JS.InvokeVoidAsync("toggleSideMenu", ul);
3751
_menuState = value;
3852
}
3953
}
4054

4155
public void SetActive()
4256
{
43-
// JS.InvokeVoidAsync("activateSideMenu", menu);
57+
if (_isActive)
58+
return;
59+
60+
_isActive = true;
61+
MenuState = MenuState.Open;
4462
}
4563

64+
public void SetInactive()
65+
{
66+
if (!_isActive)
67+
return;
68+
69+
_isActive = false;
70+
MenuState = MenuState.Closed;
71+
}
72+
4673
private string menuState => MenuState.GetDescription<StyleAttribute>();
4774

4875
private ElementReference ul { get; set; }
@@ -52,9 +79,4 @@
5279
{
5380
MenuState = MenuState == MenuState.Open ? MenuState.Closed : MenuState.Open;
5481
}
55-
56-
protected override void OnAfterRender(bool firstRender)
57-
{
58-
base.OnAfterRender(firstRender);
59-
}
6082
}

0 commit comments

Comments
 (0)