Browse Source

Merge pull request #21885 from abpframework/auto-merge/rel-9-0/3385

Merge branch prerel-9.1 with rel-9.0
pull/21886/head
maliming 2 years ago
committed by GitHub
parent
commit
ebf1fb16e5
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 102
      modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.BasicTheme/Themes/Basic/FirstLevelNavMenuItem.razor
  2. 22
      modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.BasicTheme/Themes/Basic/FirstLevelNavMenuItem.razor.cs
  3. 79
      modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.BasicTheme/Themes/Basic/SecondLevelNavMenuItem.razor
  4. 24
      modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.BasicTheme/Themes/Basic/SecondLevelNavMenuItem.razor.cs

102
modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.BasicTheme/Themes/Basic/FirstLevelNavMenuItem.razor

@ -1,61 +1,67 @@
@using Volo.Abp.UI.Navigation @using Volo.Abp.UI.Navigation
@{ @{
var elementId = MenuItem.ElementId ?? "MenuItem_" + MenuItem.Name.Replace(".", "_");
var cssClass = string.IsNullOrEmpty(MenuItem.CssClass) ? string.Empty : MenuItem.CssClass;
var disabled = MenuItem.IsDisabled ? "disabled" : string.Empty;
var url = MenuItem.Url == null ? "#" : MenuItem.Url.TrimStart('/', '~');
var customComponentType = MenuItem.GetComponentTypeOrDefault(); var customComponentType = MenuItem.GetComponentTypeOrDefault();
} }
@if (MenuItem.IsLeaf)
@if (customComponentType != null && typeof(ComponentBase).IsAssignableFrom(customComponentType))
{ {
if (customComponentType != null && typeof(ComponentBase).IsAssignableFrom(customComponentType)) <DynamicComponent Type="@customComponentType" />
{
<DynamicComponent Type="@customComponentType" />
}
else if (MenuItem.Url != null)
{
<li class="nav-item @cssClass @disabled" id="@elementId">
<a class="nav-link" href="@url" target="@MenuItem.Target">
@if (MenuItem.Icon != null)
{
if (MenuItem.Icon.StartsWith("fa"))
{
<i class="@MenuItem.Icon me-1"></i>
}
}
@MenuItem.DisplayName
</a>
</li>
}
} }
else else
{ {
<li class="nav-item"> <Dropdown @ref="_dropdown"
<div class="dropdown"> Class="@(string.IsNullOrEmpty(MenuItem.CssClass) ? string.Empty : MenuItem.CssClass)"
@if (customComponentType != null && typeof(ComponentBase).IsAssignableFrom(customComponentType)) ElementId="@(MenuItem.ElementId ?? "MenuItem_" + MenuItem.Name.Replace(".", "_"))"
{ Disabled="MenuItem.IsDisabled">
<DynamicComponent Type="@customComponentType" /> <DropdownToggle ToggleIconVisible="false">
} <ChildContent>
else @if (MenuItem.Url != null)
{ {
<a class="nav-link dropdown-toggle" @onclick="ToggleSubMenu" id="Menu_@(MenuItem.Name)" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> var url = MenuItem.Url == null ? "#" : MenuItem.Url.TrimStart('/', '~');
@if (MenuItem.Icon != null) <a class="text-white text-decoration-none" href="@url" target="@MenuItem.Target">
{ @if (MenuItem.Icon != null && MenuItem.Icon.StartsWith("fa"))
if (MenuItem.Icon.StartsWith("fa"))
{ {
<i class="@MenuItem.Icon me-1"></i> <i class="@MenuItem.Icon me-1"></i>
} }
} @MenuItem.DisplayName
@MenuItem.DisplayName </a>
</a> }
} else
<div class="dropdown-menu border-0 shadow-sm @(IsSubMenuOpen ? "show" : "")" aria-labelledby="Menu_@(MenuItem.Name)">
@foreach (var childMenuItem in MenuItem.Items)
{ {
<SecondLevelNavMenuItem MenuItem="childMenuItem" /> <a class="text-white text-decoration-none dropdown-toggle">
@if (MenuItem.Icon != null)
{
if (MenuItem.Icon.StartsWith("fa"))
{
<i class="@MenuItem.Icon me-1"></i>
}
}
@MenuItem.DisplayName
</a>
}
</ChildContent>
</DropdownToggle>
<DropdownMenu>
@foreach (var item in MenuItem.Items)
{
if (item.Items.Any())
{
<SecondLevelNavMenuItem MenuItem="item" ParentDropdown="_dropdown" />
} }
</div> else
</div> {
</li> var itemUrl = item.Url == null ? "#" : item.Url.TrimStart('/', '~');
<a class="text-black text-decoration-none" href="@itemUrl">
@if (item.Icon != null)
{
<i class="@item.Icon me-1"></i>
}
<span>
@item.DisplayName
</span>
</a>
}
}
</DropdownMenu>
</Dropdown>
} }

22
modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.BasicTheme/Themes/Basic/FirstLevelNavMenuItem.razor.cs

@ -1,4 +1,5 @@
using System; using System;
using Blazorise;
using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Routing; using Microsoft.AspNetCore.Components.Routing;
using Volo.Abp.UI.Navigation; using Volo.Abp.UI.Navigation;
@ -7,31 +8,26 @@ namespace Volo.Abp.AspNetCore.Components.Web.BasicTheme.Themes.Basic;
public partial class FirstLevelNavMenuItem : IDisposable public partial class FirstLevelNavMenuItem : IDisposable
{ {
[Inject] private NavigationManager NavigationManager { get; set; }
[Parameter] [Parameter]
public ApplicationMenuItem MenuItem { get; set; } public ApplicationMenuItem MenuItem { get; set; } = default!;
private Dropdown _dropdown;
public bool IsSubMenuOpen { get; set; } [Inject]
private NavigationManager NavigationManager { get; set; }
protected override void OnInitialized() protected override void OnInitialized()
{ {
NavigationManager.LocationChanged += OnLocationChanged; NavigationManager.LocationChanged += OnLocationChanged;
} }
private void ToggleSubMenu() protected virtual void OnLocationChanged(object sender, LocationChangedEventArgs e)
{ {
IsSubMenuOpen = !IsSubMenuOpen; _dropdown?.Hide();
} }
public void Dispose() public virtual void Dispose()
{ {
NavigationManager.LocationChanged -= OnLocationChanged; NavigationManager.LocationChanged -= OnLocationChanged;
} }
private void OnLocationChanged(object sender, LocationChangedEventArgs e)
{
IsSubMenuOpen = false;
InvokeAsync(StateHasChanged);
}
} }

79
modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.BasicTheme/Themes/Basic/SecondLevelNavMenuItem.razor

@ -1,55 +1,48 @@
@using Volo.Abp.UI.Navigation @using Volo.Abp.UI.Navigation
@{ @{
var elementId = MenuItem.ElementId ?? "MenuItem_" + MenuItem.Name.Replace(".", "_");
var cssClass = string.IsNullOrEmpty(MenuItem.CssClass) ? string.Empty : MenuItem.CssClass;
var disabled = MenuItem.IsDisabled ? "disabled" : string.Empty;
var url = MenuItem.Url == null ? "#" : MenuItem.Url.TrimStart('/', '~');
var customComponentType = MenuItem.GetComponentTypeOrDefault(); var customComponentType = MenuItem.GetComponentTypeOrDefault();
} }
@if (MenuItem.IsLeaf)
@if (customComponentType != null && typeof(ComponentBase).IsAssignableFrom(customComponentType))
{ {
if (customComponentType != null && typeof(ComponentBase).IsAssignableFrom(customComponentType)) <DynamicComponent Type="@customComponentType" />
{
<DynamicComponent Type="@customComponentType" />
}
else if (MenuItem.Url != null)
{
<a class="dropdown-item @cssClass @disabled" href="@url" target="@MenuItem.Target" id="@elementId">
@if (MenuItem.Icon != null)
{
<i class="@MenuItem.Icon me-1"></i>
}
<span>
@MenuItem.DisplayName
</span>
</a>
}
} }
else else
{ {
<div class="dropdown-submenu"> <Dropdown @ref="_dropdown"
@if (customComponentType != null && typeof(ComponentBase).IsAssignableFrom(customComponentType)) Class="@(string.IsNullOrEmpty(MenuItem.CssClass) ? string.Empty : MenuItem.CssClass)"
{ ElementId="@(MenuItem.ElementId ?? "MenuItem_" + MenuItem.Name.Replace(".", "_"))"
<DynamicComponent Type="@customComponentType" /> Disabled="MenuItem.IsDisabled">
} <DropdownToggle Class="me-3">
else <ChildContent>
{ @if (MenuItem.Icon != null && MenuItem.Icon.StartsWith("fa"))
<a role="button" @onclick="ToggleSubMenu" class="btn dropdown-toggle" data-toggle="dropdown"
aria-haspopup="true" aria-expanded="false">
@if (MenuItem.Icon != null)
{ {
<i class="@MenuItem.Icon me-1"></i> <i class="@MenuItem.Icon me-1"></i>
} }
<span> @MenuItem.DisplayName
@MenuItem.DisplayName </ChildContent>
</span> </DropdownToggle>
</a> <DropdownMenu>
} @foreach (var item in MenuItem.Items)
<div class="dropdown-menu border-0 shadow-sm @(IsSubMenuOpen ? "show" : "")">
@foreach (var childMenuItem in MenuItem.Items)
{ {
<SecondLevelNavMenuItem MenuItem="@childMenuItem"/> if (item.Items.Any())
{
<SecondLevelNavMenuItem MenuItem="item" ParentDropdown="_dropdown"/>
}
else
{
var itemUrl = item.Url == null ? "#" : item.Url.TrimStart('/', '~');
<a class="text-black text-decoration-none" href="@itemUrl">
@if (item.Icon != null)
{
<i class="@item.Icon me-1"></i>
}
<span>
@item.DisplayName
</span>
</a>
}
} }
</div> </DropdownMenu>
</div> </Dropdown>
} }

24
modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.BasicTheme/Themes/Basic/SecondLevelNavMenuItem.razor.cs

@ -1,4 +1,5 @@
using System; using System;
using Blazorise;
using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Routing; using Microsoft.AspNetCore.Components.Routing;
using Volo.Abp.UI.Navigation; using Volo.Abp.UI.Navigation;
@ -7,31 +8,30 @@ namespace Volo.Abp.AspNetCore.Components.Web.BasicTheme.Themes.Basic;
public partial class SecondLevelNavMenuItem : IDisposable public partial class SecondLevelNavMenuItem : IDisposable
{ {
[Inject] private NavigationManager NavigationManager { get; set; } [Parameter]
public ApplicationMenuItem MenuItem { get; set; } = default!;
[Parameter] [Parameter]
public ApplicationMenuItem MenuItem { get; set; } public Dropdown ParentDropdown { get; set; } = default!;
private Dropdown _dropdown;
public bool IsSubMenuOpen { get; set; } [Inject]
private NavigationManager NavigationManager { get; set; }
protected override void OnInitialized() protected override void OnInitialized()
{ {
NavigationManager.LocationChanged += OnLocationChanged; NavigationManager.LocationChanged += OnLocationChanged;
} }
private void ToggleSubMenu() protected virtual void OnLocationChanged(object sender, LocationChangedEventArgs e)
{ {
IsSubMenuOpen = !IsSubMenuOpen; ParentDropdown?.Hide();
_dropdown?.Hide();
} }
public void Dispose() public virtual void Dispose()
{ {
NavigationManager.LocationChanged -= OnLocationChanged; NavigationManager.LocationChanged -= OnLocationChanged;
} }
private void OnLocationChanged(object sender, LocationChangedEventArgs e)
{
IsSubMenuOpen = false;
InvokeAsync(StateHasChanged);
}
} }

Loading…
Cancel
Save