Browse Source

Merge pull request #15611 from abpframework/custom-component-basictheme

Add custom menu component support to Basic Theme
pull/15621/head
Enis Necipoglu 4 years ago
committed by GitHub
parent
commit
d5b2414f5f
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 26
      modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.BasicTheme/Navigation/BasicThemeNavigationExtensions.cs
  2. 36
      modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.BasicTheme/Themes/Basic/FirstLevelNavMenuItem.razor
  3. 41
      modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.BasicTheme/Themes/Basic/SecondLevelNavMenuItem.razor

26
modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.BasicTheme/Navigation/BasicThemeNavigationExtensions.cs

@ -0,0 +1,26 @@
using System;
using JetBrains.Annotations;
using Volo.Abp.UI.Navigation;
namespace Volo.Abp.AspNetCore.Components.Web.BasicTheme.Navigation;
public static class BasicThemeNavigationExtensions
{
public const string CustomDataComponentKey = "BasicTheme.CustomComponent";
public static ApplicationMenuItem UseComponent(this ApplicationMenuItem applicationMenuItem, Type componentType)
{
return applicationMenuItem.WithCustomData(CustomDataComponentKey, componentType);
}
[CanBeNull]
public static Type GetComponentTypeOrDefault(this ApplicationMenuItem applicationMenuItem)
{
if (applicationMenuItem.CustomData.TryGetValue(CustomDataComponentKey, out object componentType))
{
return componentType as Type;
}
return default;
}
}

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

@ -1,13 +1,19 @@
@using Volo.Abp.UI.Navigation @using Volo.Abp.AspNetCore.Components.Web.BasicTheme.Navigation;
@using Volo.Abp.UI.Navigation
@{ @{
var elementId = MenuItem.ElementId ?? "MenuItem_" + MenuItem.Name.Replace(".", "_"); var elementId = MenuItem.ElementId ?? "MenuItem_" + MenuItem.Name.Replace(".", "_");
var cssClass = string.IsNullOrEmpty(MenuItem.CssClass) ? string.Empty : MenuItem.CssClass; var cssClass = string.IsNullOrEmpty(MenuItem.CssClass) ? string.Empty : MenuItem.CssClass;
var disabled = MenuItem.IsDisabled ? "disabled" : string.Empty; var disabled = MenuItem.IsDisabled ? "disabled" : string.Empty;
var url = MenuItem.Url == null ? "#" : MenuItem.Url.TrimStart('/', '~'); var url = MenuItem.Url == null ? "#" : MenuItem.Url.TrimStart('/', '~');
var customComponentType = MenuItem.GetComponentTypeOrDefault();
} }
@if (MenuItem.IsLeaf) @if (MenuItem.IsLeaf)
{ {
if (MenuItem.Url != null) if (customComponentType != null)
{
<DynamicComponent Type="@customComponentType" />
}
else if (url != null)
{ {
<li class="nav-item @cssClass @disabled" id="@elementId"> <li class="nav-item @cssClass @disabled" id="@elementId">
<a class="nav-link" href="@url" target="@MenuItem.Target"> <a class="nav-link" href="@url" target="@MenuItem.Target">
@ -27,20 +33,28 @@ else
{ {
<li class="nav-item"> <li class="nav-item">
<div class="dropdown"> <div class="dropdown">
<a class="nav-link dropdown-toggle" @onclick="ToggleSubMenu" id="Menu_@(MenuItem.Name)" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> @if (customComponentType != null)
@if (MenuItem.Icon != null) {
{ <DynamicComponent Type="@customComponentType" />
if (MenuItem.Icon.StartsWith("fa")) }
else
{
<a class="nav-link dropdown-toggle" @onclick="ToggleSubMenu" id="Menu_@(MenuItem.Name)" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
@if (MenuItem.Icon != null)
{ {
<i class="@MenuItem.Icon me-1"></i> if (MenuItem.Icon.StartsWith("fa"))
{
<i class="@MenuItem.Icon me-1"></i>
}
} }
} @MenuItem.DisplayName
@MenuItem.DisplayName </a>
</a> }
<div class="dropdown-menu border-0 shadow-sm @(IsSubMenuOpen ? "show" : "")" aria-labelledby="Menu_@(MenuItem.Name)"> <div class="dropdown-menu border-0 shadow-sm @(IsSubMenuOpen ? "show" : "")" aria-labelledby="Menu_@(MenuItem.Name)">
@foreach (var childMenuItem in MenuItem.Items) @foreach (var childMenuItem in MenuItem.Items)
{ {
<SecondLevelNavMenuItem MenuItem="childMenuItem"/> <SecondLevelNavMenuItem MenuItem="childMenuItem" />
} }
</div> </div>
</div> </div>

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

@ -1,13 +1,19 @@
@using Volo.Abp.UI.Navigation @using Volo.Abp.AspNetCore.Components.Web.BasicTheme.Navigation;
@using Volo.Abp.UI.Navigation
@{ @{
var elementId = MenuItem.ElementId ?? "MenuItem_" + MenuItem.Name.Replace(".", "_"); var elementId = MenuItem.ElementId ?? "MenuItem_" + MenuItem.Name.Replace(".", "_");
var cssClass = string.IsNullOrEmpty(MenuItem.CssClass) ? string.Empty : MenuItem.CssClass; var cssClass = string.IsNullOrEmpty(MenuItem.CssClass) ? string.Empty : MenuItem.CssClass;
var disabled = MenuItem.IsDisabled ? "disabled" : string.Empty; var disabled = MenuItem.IsDisabled ? "disabled" : string.Empty;
var url = MenuItem.Url == null ? "#" : MenuItem.Url.TrimStart('/', '~'); var url = MenuItem.Url == null ? "#" : MenuItem.Url.TrimStart('/', '~');
var customComponentType = MenuItem.GetComponentTypeOrDefault();
} }
@if (MenuItem.IsLeaf) @if (MenuItem.IsLeaf)
{ {
if (MenuItem.Url != null) if (customComponentType != null)
{
<DynamicComponent Type="@customComponentType" />
}
else if (MenuItem.Url != null)
{ {
<a class="dropdown-item @cssClass @disabled" href="@url" target="@MenuItem.Target" id="@elementId"> <a class="dropdown-item @cssClass @disabled" href="@url" target="@MenuItem.Target" id="@elementId">
@if (MenuItem.Icon != null) @if (MenuItem.Icon != null)
@ -23,16 +29,23 @@
else else
{ {
<div class="dropdown-submenu"> <div class="dropdown-submenu">
<a role="button" @onclick="ToggleSubMenu" class="btn dropdown-toggle" data-toggle="dropdown" @if (customComponentType != null)
aria-haspopup="true" aria-expanded="false"> {
@if (MenuItem.Icon != null) <DynamicComponent Type="@customComponentType" />
{ }
<i class="@MenuItem.Icon me-1"></i> else
} {
<span> <a role="button" @onclick="ToggleSubMenu" class="btn dropdown-toggle" data-toggle="dropdown"
@MenuItem.DisplayName aria-haspopup="true" aria-expanded="false">
</span> @if (MenuItem.Icon != null)
</a> {
<i class="@MenuItem.Icon me-1"></i>
}
<span>
@MenuItem.DisplayName
</span>
</a>
}
<div class="dropdown-menu border-0 shadow-sm @(IsSubMenuOpen ? "show" : "")"> <div class="dropdown-menu border-0 shadow-sm @(IsSubMenuOpen ? "show" : "")">
@foreach (var childMenuItem in MenuItem.Items) @foreach (var childMenuItem in MenuItem.Items)
{ {
@ -40,6 +53,4 @@ else
} }
</div> </div>
</div> </div>
} }
@code {
}
Loading…
Cancel
Save