diff --git a/Wave/Components/App.razor b/Wave/Components/App.razor index a5917dd..42e7b02 100644 --- a/Wave/Components/App.razor +++ b/Wave/Components/App.razor @@ -7,36 +7,36 @@ - - - - - - - - - - - - - - - - - - - - - - - + + + - + + + + + + + + + + + + + + + + + + + + + - - + + diff --git a/Wave/Components/Pages/Admin.razor b/Wave/Components/Pages/Admin.razor index 6129b0d..d4e473e 100644 --- a/Wave/Components/Pages/Admin.razor +++ b/Wave/Components/Pages/Admin.razor @@ -12,6 +12,9 @@ @inject UserManager UserManager @inject SignInManager SignInManager @inject IdentityRedirectManager RedirectManager +@inject IStringLocalizer Localizer + +@(TitlePrefix + Localizer["Title"]) @@ -34,6 +37,9 @@ @code { + [CascadingParameter(Name = "TitlePrefix")] + private string TitlePrefix { get; set; } = default!; + [CascadingParameter] private HttpContext HttpContext { get; set; } = default!; private ApplicationUser User { get; set; } = default!; diff --git a/Wave/Components/Pages/ArticleEditor.razor b/Wave/Components/Pages/ArticleEditor.razor index 1740563..efa7050 100644 --- a/Wave/Components/Pages/ArticleEditor.razor +++ b/Wave/Components/Pages/ArticleEditor.razor @@ -15,9 +15,9 @@ @inject IStringLocalizer Localizer @if (Article is not null) { - @Localizer["PageTitle_Edit"] - @Article.Title + @(TitlePrefix + Localizer["PageTitle_Edit"]) | @Article.Title } else { - @Localizer["PageTitle_New"] + @(TitlePrefix + Localizer["PageTitle_New"]) }

@Localizer["EditorTitle"]

@@ -61,6 +61,9 @@ } @code { + [CascadingParameter(Name = "TitlePrefix")] + private string TitlePrefix { get; set; } = default!; + [Parameter] public Guid? Id { get; set; } [SupplyParameterFromForm] diff --git a/Wave/Components/Pages/ArticleView.razor b/Wave/Components/Pages/ArticleView.razor index 495cba1..bf648df 100644 --- a/Wave/Components/Pages/ArticleView.razor +++ b/Wave/Components/Pages/ArticleView.razor @@ -7,7 +7,7 @@ @inject IDbContextFactory ContextFactory; @inject IStringLocalizer Localizer -Wave - @Article.Title +@(TitlePrefix + Article.Title)

@Article.Title

@@ -66,6 +66,9 @@ @code { + [CascadingParameter(Name = "TitlePrefix")] + private string TitlePrefix { get; set; } = default!; + [Parameter] public Guid Id { get; set; } diff --git a/Wave/Components/Pages/Home.razor b/Wave/Components/Pages/Home.razor index de031de..d4cbcfe 100644 --- a/Wave/Components/Pages/Home.razor +++ b/Wave/Components/Pages/Home.razor @@ -8,7 +8,7 @@ @inject IDbContextFactory ContextFactory; @inject IStringLocalizer Localizer -@Localizer["Title"] +@(TitlePrefix + Localizer["Title"])

@Localizer["Title"]

@@ -54,6 +54,9 @@ } @code { + [CascadingParameter(Name = "TitlePrefix")] + private string TitlePrefix { get; set; } = default!; + private List
Articles { get; } = []; private bool HasMore { get; set; } diff --git a/Wave/Components/Pages/ManageUsers.razor b/Wave/Components/Pages/ManageUsers.razor index 380e93b..7afd7ae 100644 --- a/Wave/Components/Pages/ManageUsers.razor +++ b/Wave/Components/Pages/ManageUsers.razor @@ -3,13 +3,13 @@ @using Microsoft.AspNetCore.Identity @using Wave.Data -@rendermode @(new InteractiveServerRenderMode(false)) +@rendermode InteractiveServer @attribute [Authorize(Policy = "RoleAssignPermissions")] @attribute [StreamRendering] @inject UserManager UserManager @inject IStringLocalizer Localizer -@Localizer["Title"] +@(TitlePrefix + Localizer["Title"])

@Localizer["Title"]

@@ -41,6 +41,9 @@ @code { + [CascadingParameter(Name = "TitlePrefix")] + private string TitlePrefix { get; set; } = default!; + public ToastComponent Toast { get; set; } = null!; private IList Authors { get; set; } = new List(); @@ -49,10 +52,11 @@ private IList Admins { get; set; } = new List(); [CascadingParameter] - private Task? AuthenticationState { get; set; } + private Task AuthenticationState { get; set; } = default!; private ApplicationUser? User { get; set; } - protected override async Task OnInitializedAsync() { + protected override async Task OnAfterRenderAsync(bool firstRender) { + if (!firstRender) return; var state = await AuthenticationState; User = await UserManager.GetUserAsync(state.User); diff --git a/Wave/Data/Customization.cs b/Wave/Data/Customization.cs new file mode 100644 index 0000000..7b45518 --- /dev/null +++ b/Wave/Data/Customization.cs @@ -0,0 +1,5 @@ +namespace Wave.Data; + +public class Customization { + public string AppName { get; set; } = "Wave"; +} \ No newline at end of file diff --git a/Wave/Program.cs b/Wave/Program.cs index fc6fe20..33abb25 100644 --- a/Wave/Program.cs +++ b/Wave/Program.cs @@ -2,6 +2,7 @@ using Microsoft.AspNetCore.Components.Server; using Microsoft.AspNetCore.Identity; using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Options; using Wave.Components; using Wave.Components.Account; using Wave.Data; @@ -62,6 +63,10 @@ }); builder.Services.AddScoped(); +builder.Services.Configure(builder.Configuration.GetSection(nameof(Customization))); +builder.Services.AddCascadingValue("TitlePrefix", + sf => (sf.GetService>()?.Value.AppName ?? "Wave") + " - "); + #endregion var app = builder.Build(); diff --git a/Wave/Wave.csproj b/Wave/Wave.csproj index 7fed543..85353bb 100644 --- a/Wave/Wave.csproj +++ b/Wave/Wave.csproj @@ -19,6 +19,8 @@ + +