Skip to content

Commit d04cad5

Browse files
Reimplementationof sidebar, now using blazor-state
1 parent 0c5ef34 commit d04cad5

File tree

5 files changed

+42
-53
lines changed

5 files changed

+42
-53
lines changed
Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,8 @@
11
@namespace Blazor.AdminLte
2-
@inject IJSRuntime JS
32
<div class="sidebar">
43
@ChildContent
54
</div>
65
@code {
76
[Parameter]
87
public RenderFragment ChildContent { get; set; }
9-
10-
protected override void OnAfterRender(bool firstRender)
11-
{
12-
base.OnAfterRender(firstRender);
13-
}
148
}
Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,31 @@
11
@namespace Blazor.AdminLte
2+
@implements IDisposable
23
@inject IJSRuntime JS
3-
4+
@inject NavigationManager nav
5+
@inherits BlazorState.BlazorStateComponent
46
<!-- Sidebar Menu -->
57
<nav class="mt-2">
6-
<ul @ref="widget" class="nav nav-pills nav-sidebar flex-column" role="menu">
7-
@*data-widget="treeview" role="menu" data-accordion="false"*@
8-
<!-- Add icons to the links using the .nav-icon class
9-
with font-awesome or any other icon font library -->
8+
<ul class="nav nav-pills nav-sidebar flex-column" role="menu">
109
@ChildContent
1110
</ul>
1211
</nav>
1312
<!-- /.sidebar-menu -->
1413
@code {
1514
[Parameter]
1615
public RenderFragment ChildContent { get; set; }
17-
ElementReference widget { get; set; }
1816

19-
protected override Task OnAfterRenderAsync(bool firstRender)
17+
protected override void OnInitialized()
18+
{
19+
nav.LocationChanged += LocationChanged;
20+
base.OnInitialized();
21+
}
22+
void LocationChanged(object sender, LocationChangedEventArgs e)
23+
{
24+
Mediator.Send(new SideBarState.SelectMenuItemAction() { Id = "" }); ;
25+
}
26+
void IDisposable.Dispose()
2027
{
21-
if (firstRender)
22-
{
23-
JS.InvokeVoidAsync("addClass", widget, "data-widget='treeview'");
24-
}
25-
return base.OnAfterRenderAsync(firstRender);
28+
// Unsubscribe from the event when our component is disposed
29+
nav.LocationChanged -= LocationChanged;
2630
}
2731
}
Lines changed: 23 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,56 +1,52 @@
11
@namespace Blazor.AdminLte
2+
@inject NavigationManager nav;
23
@implements IDisposable
3-
@inject NavigationManager Nav
4+
@inherits BlazorState.BlazorStateComponent
45
<li class="nav-item">
5-
<a href="@Link" class="nav-link @navLinkState">
6+
<a href="@Link" class="nav-link @(State.GetState(Id).GetDescription<StyleAttribute>())" @onclick="Click" @onclick:preventDefault>
67
<i class="nav-icon @Icon"></i>
78
<p>
89
@ChildContent
910
</p>
1011
</a>
1112
</li>
1213
@code {
14+
15+
private string Id = Guid.NewGuid().ToString();
16+
1317
[Parameter]
1418
public string Icon { get; set; }
1519
[Parameter]
1620
public string Link { get; set; } = "javascript:void(0)";
1721
[Parameter]
1822
public RenderFragment ChildContent { get; set; }
19-
[Parameter]
20-
public NavLinkState NavLinkState { get; set; }
2123

22-
private string navLinkState { get; set; }
24+
private SideBarState State => GetState<SideBarState>();
2325

24-
private void LocationChanged(object sender, LocationChangedEventArgs args)
25-
{
26-
updateNavLinkState();
27-
}
26+
private SideBarState.SelectMenuItemAction action;
2827

29-
private void updateNavLinkState() {
30-
if (Link.StartsWith("javascript"))
31-
return;
32-
NavLinkState = new Uri(Nav.Uri).PathAndQuery.Trim('/') == Link.Trim('/') ? NavLinkState.Active : NavLinkState.Inactive;
33-
navLinkState = NavLinkState.GetDescription<StyleAttribute>();
34-
StateHasChanged();
28+
private void Click()
29+
{
30+
nav.NavigateTo(Link);
3531
}
3632

37-
protected override Task OnInitializedAsync()
33+
protected override void OnInitialized()
3834
{
39-
Nav.LocationChanged += LocationChanged;
40-
return base.OnInitializedAsync();
35+
// Subscribe to the event
36+
nav.LocationChanged += LocationChanged;
37+
base.OnInitialized();
4138
}
4239

43-
void IDisposable.Dispose()
40+
void LocationChanged(object sender, LocationChangedEventArgs e)
4441
{
45-
Nav.LocationChanged -= LocationChanged;
42+
if (new Uri(nav.Uri).PathAndQuery.Trim('/') != Link.Trim('/'))
43+
return;
44+
Mediator.Send(new SideBarState.SelectMenuItemAction() { Id = Id }); ;
4645
}
4746

48-
protected override void OnAfterRender(bool firstRender)
47+
void IDisposable.Dispose()
4948
{
50-
if (firstRender)
51-
{
52-
updateNavLinkState();
53-
}
54-
base.OnAfterRender(firstRender);
49+
// Unsubscribe from the event when our component is disposed
50+
nav.LocationChanged -= LocationChanged;
5551
}
56-
}
52+
}

src/Blazor.AdminLte/SideBar/SideBarTreeView.razor

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
@namespace Blazor.AdminLte
22
@inject IJSRuntime JS
33
<li class="nav-item has-treeview menu-@(menuState)">
4-
<a @ref="menu" href="javascript:void(0);" class='nav-link' @onclick="OnClick" >
4+
<a @ref="menu" href="javascript:void(0);" class='nav-link' @onclick="OnClick">
55
<i class="nav-icon @Icon"></i>
66
<p>
77
@Title
@@ -35,7 +35,7 @@
3535

3636
public void SetActive()
3737
{
38-
JS.InvokeVoidAsync("activateSideMenu", menu);
38+
// JS.InvokeVoidAsync("activateSideMenu", menu);
3939
}
4040

4141
private string menuState => MenuState.GetDescription<StyleAttribute>();

src/Blazor.AdminLte/wwwroot/js/interop.js

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,8 @@ function hideMenu(el) {
1111
}
1212

1313
function toggleSideMenu(el) {
14-
if (el != prevMenu) {
15-
$(prevMenu).slideToggle('fast');
16-
prevMenu = el;
17-
}
1814
$(el).slideToggle('fast');
19-
20-
}
15+
}
2116

2217
var prevActiveMenu = null;
2318

0 commit comments

Comments
 (0)