From 46ed757dcb2268982a2605c697eb01c94fa4df5c Mon Sep 17 00:00:00 2001 From: Mikhail Shabanov Date: Wed, 19 May 2021 15:04:55 +0200 Subject: [PATCH] feat: selected realm stored in browser's local storage --- .../Messages/ChangeCurrentRealmTypeMessage.cs | 15 ++++++++++++++ .../Model/UserSettings.cs | 6 +++++- .../Pages/FindPlayerListItem.razor | 2 +- .../Pages/SearchDialog.razor | 3 ++- .../Pages/SearchDialogTypeBase.cs | 20 +++++++++++++++++++ .../Resources/App.de.resx | 9 +++++++++ .../Resources/App.ru.resx | 9 +++++++++ .../Services/ILocalStorageService.cs | 3 +++ .../Services/LocalStorageService.cs | 16 +++++++++++++-- .../wwwroot/index.html | 1 + 10 files changed, 79 insertions(+), 5 deletions(-) create mode 100644 WotBlitzStatisticsPro.Blazor/Messages/ChangeCurrentRealmTypeMessage.cs diff --git a/WotBlitzStatisticsPro.Blazor/Messages/ChangeCurrentRealmTypeMessage.cs b/WotBlitzStatisticsPro.Blazor/Messages/ChangeCurrentRealmTypeMessage.cs new file mode 100644 index 0000000..7d49d83 --- /dev/null +++ b/WotBlitzStatisticsPro.Blazor/Messages/ChangeCurrentRealmTypeMessage.cs @@ -0,0 +1,15 @@ +using MediatR; +using WotBlitzStatisticsPro.Blazor.GraphQl; + +namespace WotBlitzStatisticsPro.Blazor.Messages +{ + public class ChangeCurrentRealmTypeMessage: INotification + { + public RealmType RealmType { get; } + + public ChangeCurrentRealmTypeMessage(RealmType realmType) + { + RealmType = realmType; + } + } +} \ No newline at end of file diff --git a/WotBlitzStatisticsPro.Blazor/Model/UserSettings.cs b/WotBlitzStatisticsPro.Blazor/Model/UserSettings.cs index 2f768ae..01428bd 100644 --- a/WotBlitzStatisticsPro.Blazor/Model/UserSettings.cs +++ b/WotBlitzStatisticsPro.Blazor/Model/UserSettings.cs @@ -1,9 +1,13 @@ -namespace WotBlitzStatisticsPro.Blazor.Model +using WotBlitzStatisticsPro.Blazor.GraphQl; + +namespace WotBlitzStatisticsPro.Blazor.Model { public class UserSettings { public const string UserSettingsLocalStorageKey = "user-settings"; public string Culture { get; set; } = "en-US"; + + public RealmType RealmType { get; set; } = RealmType.Eu; } } \ No newline at end of file diff --git a/WotBlitzStatisticsPro.Blazor/Pages/FindPlayerListItem.razor b/WotBlitzStatisticsPro.Blazor/Pages/FindPlayerListItem.razor index eb4c327..d844a9f 100644 --- a/WotBlitzStatisticsPro.Blazor/Pages/FindPlayerListItem.razor +++ b/WotBlitzStatisticsPro.Blazor/Pages/FindPlayerListItem.razor @@ -8,7 +8,7 @@ [@Player.ClanTag] } -
+
@Player.WinRate%
diff --git a/WotBlitzStatisticsPro.Blazor/Pages/SearchDialog.razor b/WotBlitzStatisticsPro.Blazor/Pages/SearchDialog.razor index 3d18d54..f4ea583 100644 --- a/WotBlitzStatisticsPro.Blazor/Pages/SearchDialog.razor +++ b/WotBlitzStatisticsPro.Blazor/Pages/SearchDialog.razor @@ -5,7 +5,8 @@ + Style="width: 87px" + Change="@OnRealmChanged"> diff --git a/WotBlitzStatisticsPro.Blazor/Pages/SearchDialogTypeBase.cs b/WotBlitzStatisticsPro.Blazor/Pages/SearchDialogTypeBase.cs index c067be7..45a67c5 100644 --- a/WotBlitzStatisticsPro.Blazor/Pages/SearchDialogTypeBase.cs +++ b/WotBlitzStatisticsPro.Blazor/Pages/SearchDialogTypeBase.cs @@ -26,6 +26,9 @@ namespace WotBlitzStatisticsPro.Blazor.Pages [Inject] public IGraphQlBackendService GraphQlBackendService { get; set; } + [Inject] + public ILocalStorageService LocalStorageService { get; set; } + [Parameter] public DialogType DialogType { get; set; } @@ -52,6 +55,23 @@ namespace WotBlitzStatisticsPro.Blazor.Pages } + protected override async Task OnInitializedAsync() + { + var settings = await LocalStorageService.ReadSettings(); + CurrentRealmType = settings.RealmType; + + await base.OnInitializedAsync(); + } + + public async Task OnRealmChanged(object value) + { + if (value is RealmType realm) + { + await Mediator.Publish(new ChangeCurrentRealmTypeMessage(realm)); + } + } + + public async Task OnSearchTextChange(string value) { if (DialogType == DialogType.FindPlayer && value.Length < 3) diff --git a/WotBlitzStatisticsPro.Blazor/Resources/App.de.resx b/WotBlitzStatisticsPro.Blazor/Resources/App.de.resx index b9ca076..dbccd7c 100644 --- a/WotBlitzStatisticsPro.Blazor/Resources/App.de.resx +++ b/WotBlitzStatisticsPro.Blazor/Resources/App.de.resx @@ -117,6 +117,9 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Schlachten + Erstellt @@ -129,6 +132,9 @@ vor Stunden + + Letzte Schlacht + Anmelden mit WG.net-ID @@ -153,6 +159,9 @@ Willkommen bei der WOT Blitz statistics! + + Gewinnrate + vor Jahren diff --git a/WotBlitzStatisticsPro.Blazor/Resources/App.ru.resx b/WotBlitzStatisticsPro.Blazor/Resources/App.ru.resx index 9191665..e384d34 100644 --- a/WotBlitzStatisticsPro.Blazor/Resources/App.ru.resx +++ b/WotBlitzStatisticsPro.Blazor/Resources/App.ru.resx @@ -117,6 +117,9 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Количество боёв + Создан @@ -129,6 +132,9 @@ часов назад + + Последний бой + Войти с WG.net ID @@ -153,6 +159,9 @@ Добро пожаловать в WOT Blitz statistics! + + Процент побед + лет назад diff --git a/WotBlitzStatisticsPro.Blazor/Services/ILocalStorageService.cs b/WotBlitzStatisticsPro.Blazor/Services/ILocalStorageService.cs index 49c53ab..6a97086 100644 --- a/WotBlitzStatisticsPro.Blazor/Services/ILocalStorageService.cs +++ b/WotBlitzStatisticsPro.Blazor/Services/ILocalStorageService.cs @@ -1,4 +1,5 @@ using System.Threading.Tasks; +using WotBlitzStatisticsPro.Blazor.Model; namespace WotBlitzStatisticsPro.Blazor.Services { @@ -7,5 +8,7 @@ namespace WotBlitzStatisticsPro.Blazor.Services Task SetItemAsync(string key, T item); Task GetItemAsync(string key); + + Task ReadSettings(); } } \ No newline at end of file diff --git a/WotBlitzStatisticsPro.Blazor/Services/LocalStorageService.cs b/WotBlitzStatisticsPro.Blazor/Services/LocalStorageService.cs index 33f4a8b..b1a55d5 100644 --- a/WotBlitzStatisticsPro.Blazor/Services/LocalStorageService.cs +++ b/WotBlitzStatisticsPro.Blazor/Services/LocalStorageService.cs @@ -9,7 +9,7 @@ using WotBlitzStatisticsPro.Blazor.Model; namespace WotBlitzStatisticsPro.Blazor.Services { - public class LocalStorageService: ILocalStorageService, INotificationHandler + public class LocalStorageService: ILocalStorageService, INotificationHandler, INotificationHandler { private readonly IJSRuntime _jsRuntime; private readonly NavigationManager _navigationManager; @@ -36,12 +36,24 @@ namespace WotBlitzStatisticsPro.Blazor.Services : JsonSerializer.Deserialize(json); } + public async Task ReadSettings() + { + return await GetItemAsync(UserSettings.UserSettingsLocalStorageKey) ?? new UserSettings(); + } + public async Task Handle(ChangeCurrentCultureMessage notification, CancellationToken cancellationToken) { - var currentSettings = await GetItemAsync(UserSettings.UserSettingsLocalStorageKey) ?? new UserSettings(); + var currentSettings = await ReadSettings(); currentSettings.Culture = notification.CultureName; await SetItemAsync(UserSettings.UserSettingsLocalStorageKey, currentSettings); _navigationManager.NavigateTo(_navigationManager.Uri, forceLoad: true); } + + public async Task Handle(ChangeCurrentRealmTypeMessage notification, CancellationToken cancellationToken) + { + var currentSettings = await ReadSettings(); + currentSettings.RealmType = notification.RealmType; + await SetItemAsync(UserSettings.UserSettingsLocalStorageKey, currentSettings); + } } } \ No newline at end of file diff --git a/WotBlitzStatisticsPro.Blazor/wwwroot/index.html b/WotBlitzStatisticsPro.Blazor/wwwroot/index.html index 808e263..80f6c1f 100644 --- a/WotBlitzStatisticsPro.Blazor/wwwroot/index.html +++ b/WotBlitzStatisticsPro.Blazor/wwwroot/index.html @@ -7,6 +7,7 @@ WotBlitzStatisticsPro +