Skip to content

Commit d2c8421

Browse files
committed
merge
2 parents 8a1dc1e + ad1c47e commit d2c8421

10 files changed

Lines changed: 65 additions & 23 deletions

File tree

NetEvent/Client/Extensions/WebAssemblyHostExtension.cs renamed to NetEvent/Client/Extensions/DefaultCultureExtension.cs

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,19 @@
11
using System;
2+
using System.Diagnostics.CodeAnalysis;
23
using System.Globalization;
3-
using System.Linq;
44
using System.Threading;
55
using System.Threading.Tasks;
6+
using Microsoft.AspNetCore.Components;
67
using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
78
using Microsoft.Extensions.DependencyInjection;
89
using Microsoft.Extensions.Logging;
910
using NetEvent.Client.Services;
1011
using NetEvent.Shared.Config;
11-
using NetEvent.Shared.Constants;
1212

1313
namespace NetEvent.Client.Extensions;
1414

15-
public static class WebAssemblyHostExtension
15+
[ExcludeFromCodeCoverage(Justification = "Ignore UI Extensions")]
16+
public static class DefaultCultureExtension
1617
{
1718
public static async Task SetDefaultCultureAsync(this WebAssemblyHost app)
1819
{
@@ -23,9 +24,18 @@ public static async Task SetDefaultCultureAsync(this WebAssemblyHost app)
2324
{
2425
using var cancellationTokenSource = new CancellationTokenSource();
2526

26-
var orgData = await organizationDataService.GetSystemSettingsAsync(SystemSettingGroup.OrganizationData, cancellationTokenSource.Token).ConfigureAwait(false);
27-
28-
var organizationCulture = orgData.FirstOrDefault(a => a.Key.Equals(OrganizationDataConstants.CultureKey));
27+
var organizationCulture = await organizationDataService.GetSystemSettingAsync(
28+
SystemSettingGroup.OrganizationData,
29+
SystemSettings.DataCultureInfo,
30+
newCulture =>
31+
{
32+
if (CultureInfo.DefaultThreadCurrentCulture?.Name.Equals(newCulture.Value, StringComparison.OrdinalIgnoreCase) != true)
33+
{
34+
var navigationManager = app.Services.GetRequiredService<NavigationManager>();
35+
navigationManager.NavigateTo(navigationManager.Uri, true);
36+
}
37+
},
38+
cancellationTokenSource.Token).ConfigureAwait(false);
2939

3040
if (organizationCulture == null)
3141
{

NetEvent/Client/NetEvent.Client.csproj

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
</PropertyGroup>
99

1010
<PropertyGroup>
11-
<BlazorLinkOnBuild Condition="'$(Configuration)'!='Release'">false</BlazorLinkOnBuild>
11+
<BlazorLinkOnBuild Condition="'$(Configuration)'!='Release'">false</BlazorLinkOnBuild>
1212
</PropertyGroup>
1313

1414
<ItemGroup>
@@ -23,7 +23,7 @@
2323
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="6.0.0" />
2424
<PackageReference Include="Microsoft.Extensions.Http" Version="6.0.0" />
2525
<PackageReference Include="Microsoft.Extensions.Localization" Version="6.0.6" />
26-
<PackageReference Include="MudBlazor" Version="6.0.10" />
26+
<PackageReference Include="MudBlazor" Version="6.0.11" />
2727
<PackageReference Include="MudBlazor.ThemeManager" Version="1.0.6" />
2828
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
2929
<PackageReference Include="StyleCop.Analyzers" Version="1.2.0-beta.435">
@@ -44,6 +44,7 @@
4444

4545
<ItemGroup>
4646
<Folder Include="Components\Administration\" />
47+
<Folder Include="Extensions\" />
4748
</ItemGroup>
4849

4950
<PropertyGroup>

NetEvent/Client/Pages/Index.razor

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
@inject Microsoft.Extensions.Localization.IStringLocalizer<App> Localize
44

5-
<PageTitle>@Localize["Index.Title"]</PageTitle>
65

76
<h1>@Localize["Index.Hello"]</h1>
87

NetEvent/Client/Program.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using Microsoft.AspNetCore.Components.Authorization;
3+
using Microsoft.AspNetCore.Components.Web;
34
using Microsoft.AspNetCore.Components.WebAssembly.Authentication;
45
using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
56
using Microsoft.Extensions.DependencyInjection;
@@ -13,6 +14,7 @@
1314
var builder = WebAssemblyHostBuilder.CreateDefault(args);
1415

1516
builder.RootComponents.Add<App>("#app");
17+
builder.RootComponents.Add<HeadOutlet>("head::after");
1618

1719
builder.Services.AddOptions();
1820
builder.Services.AddAuthorizationCore(config => config.AddPolicies());

NetEvent/Client/Resources/App.resx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -352,7 +352,10 @@
352352
<value>Language</value>
353353
</data>
354354
<data name="SystemSetting.OrganizationData.OrganizationName.Label" xml:space="preserve">
355-
<value>Name of Organization</value>
355+
<value>Name of organization</value>
356+
</data>
357+
<data name="SystemSetting.OrganizationData.DataCultureInfo.Hint" xml:space="preserve">
358+
<value>Systemwide language. Changing forces page reload.</value>
356359
</data>
357360
<data name="Administration.AdminMenu.SystemInfo" xml:space="preserve">
358361
<value>System Info</value>

NetEvent/Client/Services/ISystemSettingsDataService.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using System.Collections.Generic;
1+
using System;
2+
using System.Collections.Generic;
23
using System.Threading;
34
using System.Threading.Tasks;
45
using NetEvent.Shared.Config;
@@ -12,6 +13,8 @@ public interface ISystemSettingsDataService
1213

1314
Task<SystemSettingValueDto?> GetSystemSettingAsync(SystemSettingGroup systemSettingGroup, string key, CancellationToken cancellationToken);
1415

16+
Task<SystemSettingValueDto?> GetSystemSettingAsync(SystemSettingGroup systemSettingGroup, string key, Action<SystemSettingValueDto> valueChanged, CancellationToken cancellationToken);
17+
1518
Task<ServiceResult> UpdateSystemSetting(SystemSettingGroup systemSettingGroup, SystemSettingValueDto systemSetting, CancellationToken cancellationToken);
1619
}
1720
}

NetEvent/Client/Services/SystemSettingsService.cs

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Collections.Concurrent;
23
using System.Collections.Generic;
34
using System.Diagnostics.CodeAnalysis;
45
using System.Linq;
@@ -15,8 +16,9 @@ namespace NetEvent.Client.Services
1516
[ExcludeFromCodeCoverage(Justification = "Ignore UI Services")]
1617
public class SystemSettingsService : ISystemSettingsDataService
1718
{
18-
private readonly IHttpClientFactory _HttpClientFactory;
1919
private readonly ILogger<SystemSettingsService> _Logger;
20+
private readonly IHttpClientFactory _HttpClientFactory;
21+
private readonly ConcurrentDictionary<string, ConcurrentBag<Action<SystemSettingValueDto>>> _Callbacks = new ConcurrentDictionary<string, ConcurrentBag<Action<SystemSettingValueDto>>>();
2022

2123
public SystemSettingsService(IHttpClientFactory httpClientFactory, ILogger<SystemSettingsService> logger)
2224
{
@@ -27,7 +29,14 @@ public SystemSettingsService(IHttpClientFactory httpClientFactory, ILogger<Syste
2729
public async Task<SystemSettingValueDto?> GetSystemSettingAsync(SystemSettingGroup systemSettingGroup, string key, CancellationToken cancellationToken)
2830
{
2931
var systemSettings = await GetSystemSettingsAsync(systemSettingGroup, cancellationToken);
30-
return systemSettings.FirstOrDefault(x => x.Key.Equals(SystemSettings.OrganizationName, StringComparison.Ordinal));
32+
return systemSettings.FirstOrDefault(x => x.Key.Equals(key, StringComparison.Ordinal));
33+
}
34+
35+
public Task<SystemSettingValueDto?> GetSystemSettingAsync(SystemSettingGroup systemSettingGroup, string key, Action<SystemSettingValueDto> valueChanged, CancellationToken cancellationToken)
36+
{
37+
var bag = _Callbacks.GetOrAdd(GetCallbackKey(systemSettingGroup, key), s => new ConcurrentBag<Action<SystemSettingValueDto>>());
38+
bag.Add(valueChanged);
39+
return GetSystemSettingAsync(systemSettingGroup, key, cancellationToken);
3140
}
3241

3342
public async Task<List<SystemSettingValueDto>> GetSystemSettingsAsync(SystemSettingGroup systemSettingGroup, CancellationToken cancellationToken)
@@ -63,6 +72,14 @@ public async Task<ServiceResult> UpdateSystemSetting(SystemSettingGroup systemSe
6372

6473
response.EnsureSuccessStatusCode();
6574

75+
if (_Callbacks.TryGetValue(GetCallbackKey(systemSettingGroup, systemSetting.Key), out var callbacks))
76+
{
77+
foreach (var callback in callbacks)
78+
{
79+
callback(systemSetting);
80+
}
81+
}
82+
6683
return ServiceResult.Success("RoleService.UpdateRoleAsync.Success");
6784
}
6885
catch (Exception ex)
@@ -72,5 +89,10 @@ public async Task<ServiceResult> UpdateSystemSetting(SystemSettingGroup systemSe
7289

7390
return ServiceResult.Error("RoleService.UpdateRoleAsync.Error");
7491
}
92+
93+
private static string GetCallbackKey(SystemSettingGroup systemSettingGroup, string key)
94+
{
95+
return $"{systemSettingGroup}.{key}";
96+
}
7597
}
7698
}

NetEvent/Client/Shared/MainLayout.razor

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
<MudDialogProvider />
1010
<MudSnackbarProvider />
1111

12+
<PageTitle>@_OrganizationName</PageTitle>
13+
1214
<MudLayout>
1315
<MudAppBar ClipMode="_themeManager.DrawerClipMode" Elevation="_ThemeManager.DrawerElevation">
1416
<AuthorizeView Roles="Admin">
@@ -40,7 +42,7 @@
4042
@Body
4143
</MudMainContent>
4244

43-
<MudThemeManagerButton OnClick="@((e) => ToggleThemeManager(true))" />
44-
<MudThemeManager Open="_themeManagerOpen" OpenChanged="ToggleThemeManager" Theme="_ThemeManager" ThemeChanged="UpdateTheme" />
45+
@* <MudThemeManagerButton OnClick="@((e) => ToggleThemeManager(true))" />
46+
<MudThemeManager Open="_themeManagerOpen" OpenChanged="ToggleThemeManager" Theme="_ThemeManager" ThemeChanged="UpdateTheme" />*@
4547
</MudLayout>
4648

NetEvent/Client/Shared/MainLayout.razor.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using MudBlazor.ThemeManager;
55
using NetEvent.Client.Services;
66
using NetEvent.Shared.Config;
7+
using NetEvent.Shared.Dto;
78

89
namespace NetEvent.Client.Shared
910
{
@@ -30,10 +31,16 @@ protected override async Task OnInitializedAsync()
3031
{
3132
using var cancellationTokenSource = new CancellationTokenSource();
3233

33-
_OrganizationName = (await _SystemSettingsDataService.GetSystemSettingAsync(SystemSettingGroup.OrganizationData, SystemSettings.OrganizationName, cancellationTokenSource.Token).ConfigureAwait(false))?.Value;
34+
_OrganizationName = (await _SystemSettingsDataService.GetSystemSettingAsync(SystemSettingGroup.OrganizationData, SystemSettings.OrganizationName, OrganizationNameChanged, cancellationTokenSource.Token).ConfigureAwait(false))?.Value;
3435
await SetThemeAsync().ConfigureAwait(false);
3536
}
3637

38+
private void OrganizationNameChanged(SystemSettingValueDto settingValue)
39+
{
40+
_OrganizationName = settingValue.Value;
41+
StateHasChanged();
42+
}
43+
3744
private async Task SetThemeAsync()
3845
{
3946
using var cancellationTokenSource = new CancellationTokenSource();

NetEvent/Shared/Constants/OrganizationDataConstants.cs

Lines changed: 0 additions & 7 deletions
This file was deleted.

0 commit comments

Comments
 (0)