diff --git a/ColorControl.UI/Blazor.cs b/ColorControl.UI/Blazor.cs index deca49b..582849a 100644 --- a/ColorControl.UI/Blazor.cs +++ b/ColorControl.UI/Blazor.cs @@ -1,10 +1,11 @@ +using ColorControl.Shared.Contracts; using ColorControl.Shared.Services; namespace ColorControl.UI; public static class Blazor { - public static void Start() + public static void Start(Config? config = null) { var builder = WebApplication.CreateBuilder(); @@ -12,8 +13,9 @@ public static class Blazor builder.Services.AddRazorComponents() .AddInteractiveServerComponents(); - builder.Services.AddSingleton(); - builder.Services.AddSingleton(); + builder.Services.AddSingleton(new AppState { SelectedTheme = (config?.UseDarkMode ?? true) ? "dark" : "light" }); + builder.Services.AddTransient(); + builder.WebHost.ConfigureKestrel(o => o.ListenAnyIP(config?.UiPort > 0 ? config.UiPort : 5000)); var app = builder.Build(); diff --git a/ColorControl.UI/ColorControl.UI.csproj b/ColorControl.UI/ColorControl.UI.csproj index 8374a7f..d9c99b4 100644 --- a/ColorControl.UI/ColorControl.UI.csproj +++ b/ColorControl.UI/ColorControl.UI.csproj @@ -1,4 +1,4 @@ - + net8.0-windows10.0.20348.0 @@ -7,8 +7,51 @@ Library + + + + + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + diff --git a/ColorControl.UI/Components/App.razor b/ColorControl.UI/Components/App.razor index 1f31ed6..86bbe4f 100644 --- a/ColorControl.UI/Components/App.razor +++ b/ColorControl.UI/Components/App.razor @@ -1,4 +1,8 @@ -@inject AppState AppState +@using ColorControl.Shared.Contracts +@using ColorControl.Shared.Services +@inject AppState AppState +@inject RpcUiClientService ClientService; +@inject NavigationManager _navigationManager; @implements IDisposable @attribute [StreamRendering] @@ -9,7 +13,8 @@ - + + @@ -23,8 +28,18 @@ @code { - protected override void OnInitialized() + protected override async Task OnInitializedAsync() { + var config = await ClientService.CallAsync("OptionsService", "GetConfig"); + + var newTheme = config.UseDarkMode ? "dark" : "light"; + + if (newTheme != AppState.SelectedTheme) + { + AppState.SelectedTheme = config.UseDarkMode ? "dark" : "light"; + _navigationManager.Refresh(); + } + AppState.OnChange += StateHasChanged; } diff --git a/ColorControl.UI/Components/Layout/NavMenu.razor b/ColorControl.UI/Components/Layout/NavMenu.razor index e450155..514ac68 100644 --- a/ColorControl.UI/Components/Layout/NavMenu.razor +++ b/ColorControl.UI/Components/Layout/NavMenu.razor @@ -1,4 +1,13 @@ -