diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/AbpAspNetCoreComponentsWebThemingMudBlazorModule.cs b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/AbpAspNetCoreComponentsWebThemingMudBlazorModule.cs new file mode 100644 index 0000000000..a273b69314 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/AbpAspNetCoreComponentsWebThemingMudBlazorModule.cs @@ -0,0 +1,14 @@ +using Volo.Abp.AspNetCore.Components.Web.Theming; +using Volo.Abp.Modularity; +using Volo.Abp.MudBlazorUI; + +namespace Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor; + +[DependsOn( + typeof(AbpAspNetCoreComponentsWebThemingModule), + typeof(AbpMudBlazorUIModule) +)] +public class AbpAspNetCoreComponentsWebThemingMudBlazorModule : AbpModule +{ +} + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Components/PageHeader.razor b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Components/PageHeader.razor new file mode 100644 index 0000000000..e9538dfa83 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Components/PageHeader.razor @@ -0,0 +1,82 @@ +@using Microsoft.AspNetCore.Components.Web +@using Microsoft.Extensions.Options +@using Volo.Abp.Ui.Branding +@inject IOptions Options +@inject IBrandingProvider BrandingProvider +@inject PageLayout PageLayout + + + @if (PageLayout.Title.IsNullOrEmpty()) + { + @BrandingProvider.AppName + } + else + { + @PageLayout.Title | @BrandingProvider.AppName + } + + @if (Options.Value.RenderPageTitle) + { + + + @PageLayout.Title + + + } + + @if (Options.Value.RenderBreadcrumbs && PageLayout.BreadcrumbItems.Any()) + { + + + @if (BreadcrumbShowHome) + { + + + + } + @foreach (var item in PageLayout.BreadcrumbItems) + { + + @item.Text + + } + + + } + + @if (Options.Value.RenderToolbar) + { + + + @if (Toolbar == null) + { + @ChildContent + } + + @foreach (var toolbarItemRender in ToolbarItemRenders) + { + + @toolbarItemRender + + } + + + } + + +@code { + [Parameter] + public bool BreadcrumbShowHome { get; set; } = true; + + [Parameter] + public bool BreadcrumbShowCurrent { get; set; } = true; + + [Parameter] + public RenderFragment ChildContent { get; set; } = default!; + + [Parameter] + public PageToolbar? Toolbar { get; set; } + + protected List ToolbarItemRenders { get; } = new(); +} + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/PageToolbars/MudBlazorPageToolbarExtensions.cs b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/PageToolbars/MudBlazorPageToolbarExtensions.cs new file mode 100644 index 0000000000..54327dd60a --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/PageToolbars/MudBlazorPageToolbarExtensions.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Volo.Abp.AspNetCore.Components.Web.Theming.PageToolbars; + +namespace Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.PageToolbars; + +public static class MudBlazorPageToolbarExtensions +{ + public static PageToolbar AddMudButton( + this PageToolbar toolbar, + string text, + Func clicked, + object? icon = null, + int order = 0, + string? requiredPolicyName = null) + { + toolbar.AddComponent( + typeof(MudPageToolbarButton), + new Dictionary + { + { nameof(MudPageToolbarButton.Text), text }, + { nameof(MudPageToolbarButton.Disabled), false }, + { nameof(MudPageToolbarButton.Icon), icon }, + { nameof(MudPageToolbarButton.Clicked), clicked } + }, + order, + requiredPolicyName + ); + + return toolbar; + } +} + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/PageToolbars/MudPageToolbarButton.razor b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/PageToolbars/MudPageToolbarButton.razor new file mode 100644 index 0000000000..2727fc24f5 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/PageToolbars/MudPageToolbarButton.razor @@ -0,0 +1,35 @@ +@using MudBlazor + + + @if (Icon is string iconString && !string.IsNullOrWhiteSpace(iconString)) + { + + } + @Text + + +@code { + [Parameter] + public string Text { get; set; } = string.Empty; + + [Parameter] + public bool Disabled { get; set; } + + [Parameter] + public object? Icon { get; set; } + + [Parameter] + public Func? Clicked { get; set; } + + private async Task OnClickAsync() + { + if (Clicked != null && !Disabled) + { + await Clicked.Invoke(); + } + } +} + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.csproj b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.csproj new file mode 100644 index 0000000000..b934d1fcc5 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.csproj @@ -0,0 +1,18 @@ + + + + + + + net10.0 + enable + Nullable + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/_Imports.razor b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/_Imports.razor new file mode 100644 index 0000000000..786025bda8 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/_Imports.razor @@ -0,0 +1,5 @@ +@using MudBlazor +@using Volo.Abp.AspNetCore.Components.Web.Theming +@using Volo.Abp.AspNetCore.Components.Web.Theming.Layout +@using Volo.Abp.AspNetCore.Components.Web.Theming.PageToolbars +