From 38c631bc44fcf5c005563117fbc65f5df05a44af Mon Sep 17 00:00:00 2001 From: Mikhail Shabanov Date: Sun, 4 Apr 2021 15:44:52 +0200 Subject: [PATCH] feat: implemented Mediator and added dialog service --- .../Messages/OpenSearchDialogMessage.cs | 15 +++++++ .../Model/DialogType.cs | 8 ++++ .../Pages/Counter.razor | 16 ------- .../Pages/SearchDialog.razor | 8 ++++ WotBlitzStatisticsPro.Blazor/Program.cs | 5 +++ .../Services/ISearchDialogService.cs | 10 +++++ .../Services/SearchDialogService.cs | 35 +++++++++++++++ .../Shared/MainLayout.razor | 40 +++-------------- .../Shared/MainLayoutBase.cs | 44 +++++++++++++++++++ .../Shared/NavMenu.razor | 10 +++-- .../Shared/NavMenuBase.cs | 43 ++++++++++++++++++ .../WotBlitzStatisticsPro.Blazor.csproj | 6 +++ WotBlitzStatisticsPro.sln | 2 +- 13 files changed, 188 insertions(+), 54 deletions(-) create mode 100644 WotBlitzStatisticsPro.Blazor/Messages/OpenSearchDialogMessage.cs create mode 100644 WotBlitzStatisticsPro.Blazor/Model/DialogType.cs delete mode 100644 WotBlitzStatisticsPro.Blazor/Pages/Counter.razor create mode 100644 WotBlitzStatisticsPro.Blazor/Pages/SearchDialog.razor create mode 100644 WotBlitzStatisticsPro.Blazor/Services/ISearchDialogService.cs create mode 100644 WotBlitzStatisticsPro.Blazor/Services/SearchDialogService.cs create mode 100644 WotBlitzStatisticsPro.Blazor/Shared/MainLayoutBase.cs create mode 100644 WotBlitzStatisticsPro.Blazor/Shared/NavMenuBase.cs diff --git a/WotBlitzStatisticsPro.Blazor/Messages/OpenSearchDialogMessage.cs b/WotBlitzStatisticsPro.Blazor/Messages/OpenSearchDialogMessage.cs new file mode 100644 index 0000000..1ee79d6 --- /dev/null +++ b/WotBlitzStatisticsPro.Blazor/Messages/OpenSearchDialogMessage.cs @@ -0,0 +1,15 @@ +using MediatR; +using WotBlitzStatisticsPro.Blazor.Model; + +namespace WotBlitzStatisticsPro.Blazor.Messages +{ + public class OpenSearchDialogMessage: INotification + { + public DialogType Type { get; } + + public OpenSearchDialogMessage(DialogType type) + { + Type = type; + } + } +} \ No newline at end of file diff --git a/WotBlitzStatisticsPro.Blazor/Model/DialogType.cs b/WotBlitzStatisticsPro.Blazor/Model/DialogType.cs new file mode 100644 index 0000000..e60c6c0 --- /dev/null +++ b/WotBlitzStatisticsPro.Blazor/Model/DialogType.cs @@ -0,0 +1,8 @@ +namespace WotBlitzStatisticsPro.Blazor.Model +{ + public enum DialogType + { + FindPlayer, + FindClan + } +} \ No newline at end of file diff --git a/WotBlitzStatisticsPro.Blazor/Pages/Counter.razor b/WotBlitzStatisticsPro.Blazor/Pages/Counter.razor deleted file mode 100644 index 8641f78..0000000 --- a/WotBlitzStatisticsPro.Blazor/Pages/Counter.razor +++ /dev/null @@ -1,16 +0,0 @@ -@page "/counter" - -

Counter

- -

Current count: @currentCount

- - - -@code { - private int currentCount = 0; - - private void IncrementCount() - { - currentCount++; - } -} diff --git a/WotBlitzStatisticsPro.Blazor/Pages/SearchDialog.razor b/WotBlitzStatisticsPro.Blazor/Pages/SearchDialog.razor new file mode 100644 index 0000000..5e72c89 --- /dev/null +++ b/WotBlitzStatisticsPro.Blazor/Pages/SearchDialog.razor @@ -0,0 +1,8 @@ +@using WotBlitzStatisticsPro.Blazor.Model +

SearchDialog

+@DialogType + +@code { + [Parameter] + public DialogType DialogType { get; set; } +} diff --git a/WotBlitzStatisticsPro.Blazor/Program.cs b/WotBlitzStatisticsPro.Blazor/Program.cs index b13e694..a911bb2 100644 --- a/WotBlitzStatisticsPro.Blazor/Program.cs +++ b/WotBlitzStatisticsPro.Blazor/Program.cs @@ -3,7 +3,9 @@ using Microsoft.Extensions.DependencyInjection; using System; using System.Net.Http; using System.Threading.Tasks; +using MediatR; using Radzen; +using WotBlitzStatisticsPro.Blazor.Services; namespace WotBlitzStatisticsPro.Blazor { @@ -17,6 +19,9 @@ namespace WotBlitzStatisticsPro.Blazor builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) }); builder.Services.AddScoped(); + builder.Services.AddScoped(); + + builder.Services.AddMediatR(typeof(Program)); await builder.Build().RunAsync(); } diff --git a/WotBlitzStatisticsPro.Blazor/Services/ISearchDialogService.cs b/WotBlitzStatisticsPro.Blazor/Services/ISearchDialogService.cs new file mode 100644 index 0000000..2aa0abf --- /dev/null +++ b/WotBlitzStatisticsPro.Blazor/Services/ISearchDialogService.cs @@ -0,0 +1,10 @@ +using System.Threading.Tasks; +using WotBlitzStatisticsPro.Blazor.Model; + +namespace WotBlitzStatisticsPro.Blazor.Services +{ + public interface ISearchDialogService + { + Task OpenSearchDialog(DialogType type); + } +} \ No newline at end of file diff --git a/WotBlitzStatisticsPro.Blazor/Services/SearchDialogService.cs b/WotBlitzStatisticsPro.Blazor/Services/SearchDialogService.cs new file mode 100644 index 0000000..9019411 --- /dev/null +++ b/WotBlitzStatisticsPro.Blazor/Services/SearchDialogService.cs @@ -0,0 +1,35 @@ +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; +using MediatR; +using Radzen; +using WotBlitzStatisticsPro.Blazor.Messages; +using WotBlitzStatisticsPro.Blazor.Model; +using WotBlitzStatisticsPro.Blazor.Pages; + +namespace WotBlitzStatisticsPro.Blazor.Services +{ + public class SearchDialogService: ISearchDialogService, INotificationHandler + { + + private readonly DialogService _dialogService; + + public SearchDialogService(DialogService dialogService) + { + _dialogService = dialogService; + } + + + public async Task OpenSearchDialog(DialogType type) + { + await _dialogService.OpenAsync($"Search", + new Dictionary() { { "DialogType", type } }, + new DialogOptions() { Width = "300px", Height = "530px" }); + } + + public Task Handle(OpenSearchDialogMessage notification, CancellationToken cancellationToken) + { + return OpenSearchDialog(notification.Type); + } + } +} \ No newline at end of file diff --git a/WotBlitzStatisticsPro.Blazor/Shared/MainLayout.razor b/WotBlitzStatisticsPro.Blazor/Shared/MainLayout.razor index 7fd95f2..181e6ea 100644 --- a/WotBlitzStatisticsPro.Blazor/Shared/MainLayout.razor +++ b/WotBlitzStatisticsPro.Blazor/Shared/MainLayout.razor @@ -1,12 +1,12 @@ -@inherits LayoutComponentBase +@inherits MainLayoutBase - +
- + @@ -15,7 +15,7 @@
- + @Body @@ -23,41 +23,15 @@
- + - + - + - -@code { - RadzenSidebar sidebar0; - RadzenBody body0; - bool sidebarExpanded = false; - bool bodyExpanded = true; - - protected override void OnInitialized() - { - @*if (httpContextAccessor != null && httpContextAccessor.HttpContext != null && - httpContextAccessor.HttpContext.Request != null && httpContextAccessor.HttpContext.Request.Headers.ContainsKey("User-Agent")) - { - var userAgent = httpContextAccessor.HttpContext.Request.Headers["User-Agent"].FirstOrDefault(); - if (!string.IsNullOrEmpty(userAgent)) - { - if (userAgent.Contains("iPhone") || userAgent.Contains("Android") || userAgent.Contains("Googlebot")) - { - sidebarExpanded = false; - bodyExpanded = true; - } - } - }*@ - - System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US"); - } -} \ No newline at end of file diff --git a/WotBlitzStatisticsPro.Blazor/Shared/MainLayoutBase.cs b/WotBlitzStatisticsPro.Blazor/Shared/MainLayoutBase.cs new file mode 100644 index 0000000..ae8ccc9 --- /dev/null +++ b/WotBlitzStatisticsPro.Blazor/Shared/MainLayoutBase.cs @@ -0,0 +1,44 @@ +using System.Threading; +using Microsoft.AspNetCore.Components; +using Radzen; +using Radzen.Blazor; + +namespace WotBlitzStatisticsPro.Blazor.Shared +{ + public class MainLayoutBase: LayoutComponentBase + { + [Inject] + private DialogService DialogService { get; set; } + + public RadzenSidebar Sidebar0; + public RadzenBody Body0; + public bool SidebarExpanded { get; set; } = false; + public bool BodyExpanded { get; set; } = true; + + protected override void OnInitialized() + { + //if (httpContextAccessor != null && httpContextAccessor.HttpContext != null && + // httpContextAccessor.HttpContext.Request != null && httpContextAccessor.HttpContext.Request.Headers.ContainsKey("User-Agent")) + //{ + // var userAgent = httpContextAccessor.HttpContext.Request.Headers["User-Agent"].FirstOrDefault(); + // if (!string.IsNullOrEmpty(userAgent)) + // { + // if (userAgent.Contains("iPhone") || userAgent.Contains("Android") || userAgent.Contains("Googlebot")) + // { + // SidebarExpanded = false; + // BodyExpanded = true; + // } + // } + //} + + + Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US"); + } + + public void InvertSideBar() + { + SidebarExpanded = !SidebarExpanded; + BodyExpanded = !BodyExpanded; + } + } +} \ No newline at end of file diff --git a/WotBlitzStatisticsPro.Blazor/Shared/NavMenu.razor b/WotBlitzStatisticsPro.Blazor/Shared/NavMenu.razor index 14739c5..938a908 100644 --- a/WotBlitzStatisticsPro.Blazor/Shared/NavMenu.razor +++ b/WotBlitzStatisticsPro.Blazor/Shared/NavMenu.razor @@ -1,6 +1,8 @@ -
- - - +@inherits NavMenuBase +
+ + + +
diff --git a/WotBlitzStatisticsPro.Blazor/Shared/NavMenuBase.cs b/WotBlitzStatisticsPro.Blazor/Shared/NavMenuBase.cs new file mode 100644 index 0000000..feed43d --- /dev/null +++ b/WotBlitzStatisticsPro.Blazor/Shared/NavMenuBase.cs @@ -0,0 +1,43 @@ +using System.Threading.Tasks; +using MediatR; +using Microsoft.AspNetCore.Components; +using Radzen; +using WotBlitzStatisticsPro.Blazor.Messages; +using WotBlitzStatisticsPro.Blazor.Model; +using WotBlitzStatisticsPro.Blazor.Services; + +namespace WotBlitzStatisticsPro.Blazor.Shared +{ + public class NavMenuBase: ComponentBase + { + [Inject] + public NavigationManager NavManager { get; set; } + + [Inject] + public IMediator Mediator { get; set; } + + [Inject] + public ISearchDialogService SearchDialogService { get; set; } + + [Parameter] + public EventCallback CloseSideBar { get; set; } + + public async Task MenuClicked(MenuItemEventArgs menuItem) + { + await CloseSideBar.InvokeAsync(); + switch (menuItem.Text) + { + case "Home": + NavManager.NavigateTo("/"); + break; + case "Search player": + await Mediator.Publish(new OpenSearchDialogMessage(DialogType.FindPlayer)); + //await SearchDialogService.OpenSearchDialog(DialogType.FindPlayer); + break; + case "Search clan": + await Mediator.Publish(new OpenSearchDialogMessage(DialogType.FindClan)); + break; + } + } + } +} \ No newline at end of file diff --git a/WotBlitzStatisticsPro.Blazor/WotBlitzStatisticsPro.Blazor.csproj b/WotBlitzStatisticsPro.Blazor/WotBlitzStatisticsPro.Blazor.csproj index 3abf995..95fc42f 100644 --- a/WotBlitzStatisticsPro.Blazor/WotBlitzStatisticsPro.Blazor.csproj +++ b/WotBlitzStatisticsPro.Blazor/WotBlitzStatisticsPro.Blazor.csproj @@ -6,6 +6,8 @@ + + @@ -16,4 +18,8 @@ + + + + diff --git a/WotBlitzStatisticsPro.sln b/WotBlitzStatisticsPro.sln index 686b8fc..8dc30d6 100644 --- a/WotBlitzStatisticsPro.sln +++ b/WotBlitzStatisticsPro.sln @@ -17,7 +17,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WotBlitzStatisticsPro.DataA EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WotBlitzStatisticsPro.Tests", "WotBlitzStatisticsPro.Tests\WotBlitzStatisticsPro.Tests.csproj", "{551C3088-C6EA-45E1-A665-7C924C8407EB}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WotBlitzStatisticsPro.Blazor", "WotBlitzStatisticsPro.Blazor\WotBlitzStatisticsPro.Blazor.csproj", "{3A27736F-B5DD-4310-A013-2BB65C975104}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WotBlitzStatisticsPro.Blazor", "WotBlitzStatisticsPro.Blazor\WotBlitzStatisticsPro.Blazor.csproj", "{3A27736F-B5DD-4310-A013-2BB65C975104}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution