Browse Source
Merge pull request #13903 from abpframework/EngincanV/blazor-layout-hooks
Implement layout hooks for blazor
pull/13921/head
Enis Necipoglu
4 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
15 changed files with
68 additions and
10 deletions
-
framework/src/Volo.Abp.AspNetCore.Components.Web.Theming/Components/LayoutHooks/LayoutHook.razor
-
framework/src/Volo.Abp.AspNetCore.Components.Web.Theming/Components/LayoutHooks/LayoutHook.razor.cs
-
framework/src/Volo.Abp.AspNetCore.Components.Web.Theming/Layout/StandardLayouts.cs
-
framework/src/Volo.Abp.AspNetCore.Mvc.UI/Volo/Abp/AspNetCore/Mvc/UI/Components/LayoutHook/Default.cshtml
-
framework/src/Volo.Abp.AspNetCore.Mvc.UI/Volo/Abp/AspNetCore/Mvc/UI/Components/LayoutHook/LayoutHookViewComponent.cs
-
framework/src/Volo.Abp.UI/Volo/Abp/Ui/LayoutHooks/AbpLayoutHookOptions.cs
-
framework/src/Volo.Abp.UI/Volo/Abp/Ui/LayoutHooks/LayoutHookInfo.cs
-
framework/src/Volo.Abp.UI/Volo/Abp/Ui/LayoutHooks/LayoutHookViewModel.cs
-
framework/src/Volo.Abp.UI/Volo/Abp/Ui/LayoutHooks/LayoutHooks.cs
-
modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.BasicTheme/Themes/Basic/MainLayout.razor
-
modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Layouts/Account.cshtml
-
modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Layouts/Application.cshtml
-
modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Layouts/Empty.cshtml
-
modules/cms-kit/src/Volo.CmsKit.Public.Web/CmsKitPublicWebModule.cs
-
modules/docs/src/Volo.Docs.Web/DocsWebModule.cs
|
|
@ -0,0 +1,7 @@ |
|
|
|
|
|
@if (LayoutHookViewModel.Hooks.Any()) |
|
|
|
|
|
{ |
|
|
|
|
|
foreach (var hook in LayoutHookViewModel.Hooks) |
|
|
|
|
|
{ |
|
|
|
|
|
<DynamicComponent Type="@hook.ComponentType" /> |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
@ -0,0 +1,39 @@ |
|
|
|
|
|
using System; |
|
|
|
|
|
using System.Collections.Generic; |
|
|
|
|
|
using System.Linq; |
|
|
|
|
|
using System.Threading.Tasks; |
|
|
|
|
|
using Microsoft.AspNetCore.Components; |
|
|
|
|
|
using Microsoft.Extensions.Options; |
|
|
|
|
|
using Volo.Abp.Ui.LayoutHooks; |
|
|
|
|
|
|
|
|
|
|
|
namespace Volo.Abp.AspNetCore.Components.Web.Theming.Components.LayoutHooks; |
|
|
|
|
|
|
|
|
|
|
|
public partial class LayoutHook : ComponentBase |
|
|
|
|
|
{ |
|
|
|
|
|
[Parameter] |
|
|
|
|
|
public string Name { get; set; } |
|
|
|
|
|
|
|
|
|
|
|
[Parameter] |
|
|
|
|
|
public string Layout { get; set; } |
|
|
|
|
|
|
|
|
|
|
|
[Inject] |
|
|
|
|
|
protected IOptions<AbpLayoutHookOptions> LayoutHookOptions { get; set; } |
|
|
|
|
|
|
|
|
|
|
|
protected LayoutHookViewModel LayoutHookViewModel { get; private set; } |
|
|
|
|
|
|
|
|
|
|
|
protected override Task OnInitializedAsync() |
|
|
|
|
|
{ |
|
|
|
|
|
if (LayoutHookOptions.Value.Hooks.TryGetValue(Name, out var layoutHooks)) |
|
|
|
|
|
{ |
|
|
|
|
|
layoutHooks = layoutHooks |
|
|
|
|
|
.WhereIf(string.IsNullOrWhiteSpace(Layout), x => x.Layout == Layout) |
|
|
|
|
|
.ToList(); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
layoutHooks ??= new List<LayoutHookInfo>(); |
|
|
|
|
|
|
|
|
|
|
|
LayoutHookViewModel = new LayoutHookViewModel(layoutHooks.ToArray(), Layout); |
|
|
|
|
|
|
|
|
|
|
|
return Task.CompletedTask; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
@ -0,0 +1,6 @@ |
|
|
|
|
|
namespace Volo.Abp.AspNetCore.Components.Web.Theming.Layout; |
|
|
|
|
|
|
|
|
|
|
|
public static class StandardLayouts |
|
|
|
|
|
{ |
|
|
|
|
|
public const string Application = "Application"; |
|
|
|
|
|
} |
|
|
@ -1,5 +1,4 @@ |
|
|
@using Volo.Abp.AspNetCore.Mvc.UI.Components.LayoutHook |
|
|
@model Volo.Abp.Ui.LayoutHooks.LayoutHookViewModel |
|
|
@model LayoutHookViewModel |
|
|
|
|
|
@if (Model.Hooks.Any()) |
|
|
@if (Model.Hooks.Any()) |
|
|
{ |
|
|
{ |
|
|
foreach (var hook in Model.Hooks) |
|
|
foreach (var hook in Model.Hooks) |
|
|
|
|
|
@ -2,6 +2,7 @@ |
|
|
using System.Collections.Generic; |
|
|
using System.Collections.Generic; |
|
|
using Microsoft.AspNetCore.Mvc; |
|
|
using Microsoft.AspNetCore.Mvc; |
|
|
using Microsoft.Extensions.Options; |
|
|
using Microsoft.Extensions.Options; |
|
|
|
|
|
using Volo.Abp.Ui.LayoutHooks; |
|
|
|
|
|
|
|
|
namespace Volo.Abp.AspNetCore.Mvc.UI.Components.LayoutHook; |
|
|
namespace Volo.Abp.AspNetCore.Mvc.UI.Components.LayoutHook; |
|
|
|
|
|
|
|
|
|
|
|
@ -1,7 +1,7 @@ |
|
|
using System; |
|
|
using System; |
|
|
using System.Collections.Generic; |
|
|
using System.Collections.Generic; |
|
|
|
|
|
|
|
|
namespace Volo.Abp.AspNetCore.Mvc.UI.Components.LayoutHook; |
|
|
namespace Volo.Abp.Ui.LayoutHooks; |
|
|
|
|
|
|
|
|
public class AbpLayoutHookOptions |
|
|
public class AbpLayoutHookOptions |
|
|
{ |
|
|
{ |
|
|
@ -1,11 +1,11 @@ |
|
|
using System; |
|
|
using System; |
|
|
|
|
|
|
|
|
namespace Volo.Abp.AspNetCore.Mvc.UI.Components.LayoutHook; |
|
|
namespace Volo.Abp.Ui.LayoutHooks; |
|
|
|
|
|
|
|
|
public class LayoutHookInfo |
|
|
public class LayoutHookInfo |
|
|
{ |
|
|
{ |
|
|
/// <summary>
|
|
|
/// <summary>
|
|
|
/// ViewComponent type.
|
|
|
/// Component type.
|
|
|
/// </summary>
|
|
|
/// </summary>
|
|
|
public Type ComponentType { get; } |
|
|
public Type ComponentType { get; } |
|
|
|
|
|
|
|
|
@ -1,4 +1,4 @@ |
|
|
namespace Volo.Abp.AspNetCore.Mvc.UI.Components.LayoutHook; |
|
|
namespace Volo.Abp.Ui.LayoutHooks; |
|
|
|
|
|
|
|
|
public class LayoutHookViewModel |
|
|
public class LayoutHookViewModel |
|
|
{ |
|
|
{ |
|
|
@ -1,4 +1,4 @@ |
|
|
namespace Volo.Abp.AspNetCore.Mvc.UI.Components.LayoutHook; |
|
|
namespace Volo.Abp.Ui.LayoutHooks; |
|
|
|
|
|
|
|
|
public static class LayoutHooks |
|
|
public static class LayoutHooks |
|
|
{ |
|
|
{ |
|
|
@ -1,4 +1,5 @@ |
|
|
@using Volo.Abp.AspNetCore.Components.Web.Theming.Components; |
|
|
@using Volo.Abp.Ui.LayoutHooks |
|
|
|
|
|
@using Volo.Abp.AspNetCore.Components.Web.Theming.Layout |
|
|
@inherits LayoutComponentBase |
|
|
@inherits LayoutComponentBase |
|
|
<nav class="navbar navbar-expand-md navbar-dark bg-dark shadow-sm flex-column flex-md-row mb-4" id="main-navbar" style="min-height: 4rem;"> |
|
|
<nav class="navbar navbar-expand-md navbar-dark bg-dark shadow-sm flex-column flex-md-row mb-4" id="main-navbar" style="min-height: 4rem;"> |
|
|
<div class="container"> |
|
|
<div class="container"> |
|
|
@ -18,7 +19,9 @@ |
|
|
</nav> |
|
|
</nav> |
|
|
<div class="container"> |
|
|
<div class="container"> |
|
|
<PageAlert /> |
|
|
<PageAlert /> |
|
|
|
|
|
<LayoutHook Name="@LayoutHooks.Body.First" Layout="@StandardLayouts.Application" /> |
|
|
@Body |
|
|
@Body |
|
|
|
|
|
<LayoutHook Name="@LayoutHooks.Body.Last" Layout="@StandardLayouts.Application" /> |
|
|
<DynamicLayoutComponent /> |
|
|
<DynamicLayoutComponent /> |
|
|
<UiMessageAlert /> |
|
|
<UiMessageAlert /> |
|
|
<UiNotificationAlert /> |
|
|
<UiNotificationAlert /> |
|
|
|
|
|
@ -12,6 +12,7 @@ |
|
|
@using Volo.Abp.MultiTenancy |
|
|
@using Volo.Abp.MultiTenancy |
|
|
@using Volo.Abp.Localization |
|
|
@using Volo.Abp.Localization |
|
|
@using Volo.Abp.Ui.Branding |
|
|
@using Volo.Abp.Ui.Branding |
|
|
|
|
|
@using Volo.Abp.Ui.LayoutHooks |
|
|
@inject IBrandingProvider BrandingProvider |
|
|
@inject IBrandingProvider BrandingProvider |
|
|
@inject IOptions<AbpMultiTenancyOptions> MultiTenancyOptions |
|
|
@inject IOptions<AbpMultiTenancyOptions> MultiTenancyOptions |
|
|
@inject ICurrentTenant CurrentTenant |
|
|
@inject ICurrentTenant CurrentTenant |
|
|
|
|
|
@ -8,6 +8,7 @@ |
|
|
@using Volo.Abp.AspNetCore.Mvc.UI.Widgets.Components.WidgetStyles |
|
|
@using Volo.Abp.AspNetCore.Mvc.UI.Widgets.Components.WidgetStyles |
|
|
@using Volo.Abp.Localization |
|
|
@using Volo.Abp.Localization |
|
|
@using Volo.Abp.Ui.Branding |
|
|
@using Volo.Abp.Ui.Branding |
|
|
|
|
|
@using Volo.Abp.Ui.LayoutHooks |
|
|
@inject IBrandingProvider BrandingProvider |
|
|
@inject IBrandingProvider BrandingProvider |
|
|
@inject IPageLayout PageLayout |
|
|
@inject IPageLayout PageLayout |
|
|
@{ |
|
|
@{ |
|
|
|
|
|
@ -7,6 +7,7 @@ |
|
|
@using Volo.Abp.AspNetCore.Mvc.UI.Widgets.Components.WidgetStyles |
|
|
@using Volo.Abp.AspNetCore.Mvc.UI.Widgets.Components.WidgetStyles |
|
|
@using Volo.Abp.Localization |
|
|
@using Volo.Abp.Localization |
|
|
@using Volo.Abp.Ui.Branding |
|
|
@using Volo.Abp.Ui.Branding |
|
|
|
|
|
@using Volo.Abp.Ui.LayoutHooks |
|
|
@inject IBrandingProvider BrandingProvider |
|
|
@inject IBrandingProvider BrandingProvider |
|
|
@inject IPageLayout PageLayout |
|
|
@inject IPageLayout PageLayout |
|
|
@{ |
|
|
@{ |
|
|
|
|
|
@ -2,7 +2,7 @@ |
|
|
using Microsoft.AspNetCore.Mvc.RazorPages; |
|
|
using Microsoft.AspNetCore.Mvc.RazorPages; |
|
|
using Microsoft.Extensions.DependencyInjection; |
|
|
using Microsoft.Extensions.DependencyInjection; |
|
|
using Volo.Abp.AspNetCore.Mvc.Localization; |
|
|
using Volo.Abp.AspNetCore.Mvc.Localization; |
|
|
using Volo.Abp.AspNetCore.Mvc.UI.Components.LayoutHook; |
|
|
using Volo.Abp.Ui.LayoutHooks; |
|
|
using Volo.Abp.AutoMapper; |
|
|
using Volo.Abp.AutoMapper; |
|
|
using Volo.Abp.GlobalFeatures; |
|
|
using Volo.Abp.GlobalFeatures; |
|
|
using Volo.Abp.Http.ProxyScripting.Generators.JQuery; |
|
|
using Volo.Abp.Http.ProxyScripting.Generators.JQuery; |
|
|
|
|
|
@ -5,7 +5,7 @@ using Microsoft.Extensions.Options; |
|
|
using Volo.Abp.AspNetCore.Mvc.Localization; |
|
|
using Volo.Abp.AspNetCore.Mvc.Localization; |
|
|
using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap; |
|
|
using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap; |
|
|
using Volo.Abp.AspNetCore.Mvc.UI.Bundling; |
|
|
using Volo.Abp.AspNetCore.Mvc.UI.Bundling; |
|
|
using Volo.Abp.AspNetCore.Mvc.UI.Components.LayoutHook; |
|
|
using Volo.Abp.Ui.LayoutHooks; |
|
|
using Volo.Abp.AspNetCore.Mvc.UI.Packages; |
|
|
using Volo.Abp.AspNetCore.Mvc.UI.Packages; |
|
|
using Volo.Abp.AspNetCore.Mvc.UI.Packages.Prismjs; |
|
|
using Volo.Abp.AspNetCore.Mvc.UI.Packages.Prismjs; |
|
|
using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared; |
|
|
using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared; |
|
|
|