diff --git a/README.md b/README.md index fbcb3dd..525116f 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ Detailed player & tank statistics and history for [World of Tanks: Blitz](ht ## Technologies used: - Backend - GraphQL API based on .NET 5.0 Web server ([GraphQL HotChocolate](https://hotchocolate.io/) + MongoDB) -- Frontent - Blazor WebAssembly (coming soon) +- Frontent - Blazor WebAssembly + [Radzen components](https://blazor.radzen.com/) ## Local MongoDB Installation for debugging ([Docker desktop for Windows](https://www.docker.com/products/docker-desktop)) For the developing and debugging purposes, you have to istall MongoDB locally on your dev machine and run it as a service. Alternatively, if you have istalled [Docker desktop for Windows](https://www.docker.com/products/docker-desktop), you can deploy MongoDB inside the container. To do so, create an empty folder and make 2 files there: ```docker-compose.yml``` and ```.env```. Second one will contain sensitive data. diff --git a/WotBlitzStatisticsPro.Blazor/Messages/LoginToWgMessage.cs b/WotBlitzStatisticsPro.Blazor/Messages/LoginToWgMessage.cs new file mode 100644 index 0000000..9ca740d --- /dev/null +++ b/WotBlitzStatisticsPro.Blazor/Messages/LoginToWgMessage.cs @@ -0,0 +1,9 @@ +using MediatR; + +namespace WotBlitzStatisticsPro.Blazor.Messages +{ + public class LoginToWgMessage: INotification + { + + } +} \ No newline at end of file diff --git a/WotBlitzStatisticsPro.Blazor/Messages/OpenPlayerInfoMessage.cs b/WotBlitzStatisticsPro.Blazor/Messages/OpenPlayerInfoMessage.cs new file mode 100644 index 0000000..e211a44 --- /dev/null +++ b/WotBlitzStatisticsPro.Blazor/Messages/OpenPlayerInfoMessage.cs @@ -0,0 +1,16 @@ +using MediatR; + +namespace WotBlitzStatisticsPro.Blazor.Messages +{ + public class OpenPlayerInfoMessage: INotification + { + public long AccountId { get; } + public bool IsLoggedIn { get; } + + public OpenPlayerInfoMessage(long accountId, bool isLoggedIn) + { + AccountId = accountId; + IsLoggedIn = isLoggedIn; + } + } +} \ No newline at end of file diff --git a/WotBlitzStatisticsPro.Blazor/Pages/Index.razor b/WotBlitzStatisticsPro.Blazor/Pages/Index.razor index 3cefa41..8b7292f 100644 --- a/WotBlitzStatisticsPro.Blazor/Pages/Index.razor +++ b/WotBlitzStatisticsPro.Blazor/Pages/Index.razor @@ -1,6 +1,25 @@ @page "/" +@using MediatR +@using WotBlitzStatisticsPro.Blazor.Messages +@using WotBlitzStatisticsPro.Blazor.Model +@inject IMediator Mediator +
+
+ -

Hello, world!

+ { await Mediator.Publish(new LoginToWgMessage()); }) + Icon="vpn_key" + Text="Login with WG.net ID" + Style="width: 250px; margin: 30px" /> + { await Mediator.Publish(new OpenSearchDialogMessage(DialogType.FindPlayer)); }) + Icon="person_search" + Text="Search player" + Style="width: 250px; margin: 30px" /> + { await Mediator.Publish(new OpenSearchDialogMessage(DialogType.FindClan)); }) + Icon="screen_search_desktop" + Text="Search clan" + Style="width: 250px; margin: 30px" /> -Welcome to your new app. +
+
diff --git a/WotBlitzStatisticsPro.Blazor/Pages/Index.razor.css b/WotBlitzStatisticsPro.Blazor/Pages/Index.razor.css new file mode 100644 index 0000000..31c1ab3 --- /dev/null +++ b/WotBlitzStatisticsPro.Blazor/Pages/Index.razor.css @@ -0,0 +1,17 @@ +.splash { + display: flex; + flex-direction: row; + justify-content: space-evenly; +} + +.splash-content { + background-image: url('/Berlin.png'); + background-repeat: no-repeat; + display: flex; + flex-direction: column; + justify-content: flex-start; + align-items: center; + width: 375px; + height: 667px; +} + diff --git a/WotBlitzStatisticsPro.Blazor/Pages/PlayerInfoLayout.razor b/WotBlitzStatisticsPro.Blazor/Pages/PlayerInfoLayout.razor new file mode 100644 index 0000000..d2c92af --- /dev/null +++ b/WotBlitzStatisticsPro.Blazor/Pages/PlayerInfoLayout.razor @@ -0,0 +1,5 @@ +@page "/player/{AccountId:long}" +@inherits PlayerInfoLayoutBase +

PlayerInfoLayout

+AccountId: @AccountId + diff --git a/WotBlitzStatisticsPro.Blazor/Pages/PlayerInfoLayoutBase.cs b/WotBlitzStatisticsPro.Blazor/Pages/PlayerInfoLayoutBase.cs new file mode 100644 index 0000000..68ff54d --- /dev/null +++ b/WotBlitzStatisticsPro.Blazor/Pages/PlayerInfoLayoutBase.cs @@ -0,0 +1,11 @@ +using Microsoft.AspNetCore.Components; + +namespace WotBlitzStatisticsPro.Blazor.Pages +{ + public class PlayerInfoLayoutBase: ComponentBase + { + [Parameter] + public long AccountId { get; set; } + + } +} \ No newline at end of file diff --git a/WotBlitzStatisticsPro.Blazor/Pages/SearchDialog.razor b/WotBlitzStatisticsPro.Blazor/Pages/SearchDialog.razor index 5e72c89..fed6a39 100644 --- a/WotBlitzStatisticsPro.Blazor/Pages/SearchDialog.razor +++ b/WotBlitzStatisticsPro.Blazor/Pages/SearchDialog.razor @@ -1,8 +1,4 @@ -@using WotBlitzStatisticsPro.Blazor.Model +@inherits SearchDialogTypeBase

SearchDialog

@DialogType - -@code { - [Parameter] - public DialogType DialogType { get; set; } -} + OnClick()) Text="Ok" Style="margin-bottom: 20px; width: 150px" /> diff --git a/WotBlitzStatisticsPro.Blazor/Pages/SearchDialogTypeBase.cs b/WotBlitzStatisticsPro.Blazor/Pages/SearchDialogTypeBase.cs new file mode 100644 index 0000000..fd1961e --- /dev/null +++ b/WotBlitzStatisticsPro.Blazor/Pages/SearchDialogTypeBase.cs @@ -0,0 +1,27 @@ +using System.Threading.Tasks; +using MediatR; +using Microsoft.AspNetCore.Components; +using Radzen; +using WotBlitzStatisticsPro.Blazor.Messages; +using WotBlitzStatisticsPro.Blazor.Model; + +namespace WotBlitzStatisticsPro.Blazor.Pages +{ + public class SearchDialogTypeBase: ComponentBase + { + [Inject] + private DialogService DialogService { get; set; } + + [Inject] + private IMediator Mediator { get; set; } + + [Parameter] + public DialogType DialogType { get; set; } + + public async Task OnClick() + { + await Mediator.Publish(new OpenPlayerInfoMessage(123456789, false)); + DialogService.Close(true); + } + } +} \ No newline at end of file diff --git a/WotBlitzStatisticsPro.Blazor/Program.cs b/WotBlitzStatisticsPro.Blazor/Program.cs index a911bb2..0635bf3 100644 --- a/WotBlitzStatisticsPro.Blazor/Program.cs +++ b/WotBlitzStatisticsPro.Blazor/Program.cs @@ -23,6 +23,8 @@ namespace WotBlitzStatisticsPro.Blazor builder.Services.AddMediatR(typeof(Program)); + builder.Services.AddSingleton(); + await builder.Build().RunAsync(); } } diff --git a/WotBlitzStatisticsPro.Blazor/Services/NavigationMessagesInterceptor.cs b/WotBlitzStatisticsPro.Blazor/Services/NavigationMessagesInterceptor.cs new file mode 100644 index 0000000..1839d94 --- /dev/null +++ b/WotBlitzStatisticsPro.Blazor/Services/NavigationMessagesInterceptor.cs @@ -0,0 +1,23 @@ +using System.Threading; +using System.Threading.Tasks; +using MediatR; +using Microsoft.AspNetCore.Components; +using WotBlitzStatisticsPro.Blazor.Messages; + +namespace WotBlitzStatisticsPro.Blazor.Services +{ + public class NavigationMessagesInterceptor: INotificationHandler + { + private readonly NavigationManager _navigationManager; + + public NavigationMessagesInterceptor(NavigationManager navigationManager) + { + _navigationManager = navigationManager; + } + public Task Handle(OpenPlayerInfoMessage notification, CancellationToken cancellationToken) + { + _navigationManager.NavigateTo($"/player/{notification.AccountId}"); + return Task.CompletedTask; + } + } +} \ No newline at end of file diff --git a/WotBlitzStatisticsPro.Blazor/Shared/NavMenu.razor b/WotBlitzStatisticsPro.Blazor/Shared/NavMenu.razor index 938a908..f0dbe48 100644 --- a/WotBlitzStatisticsPro.Blazor/Shared/NavMenu.razor +++ b/WotBlitzStatisticsPro.Blazor/Shared/NavMenu.razor @@ -2,6 +2,7 @@
+ diff --git a/WotBlitzStatisticsPro.Blazor/Shared/NavMenuBase.cs b/WotBlitzStatisticsPro.Blazor/Shared/NavMenuBase.cs index feed43d..8baad6a 100644 --- a/WotBlitzStatisticsPro.Blazor/Shared/NavMenuBase.cs +++ b/WotBlitzStatisticsPro.Blazor/Shared/NavMenuBase.cs @@ -30,6 +30,9 @@ namespace WotBlitzStatisticsPro.Blazor.Shared case "Home": NavManager.NavigateTo("/"); break; + case "Login with WG.net ID": + await Mediator.Publish(new LoginToWgMessage()); + break; case "Search player": await Mediator.Publish(new OpenSearchDialogMessage(DialogType.FindPlayer)); //await SearchDialogService.OpenSearchDialog(DialogType.FindPlayer); diff --git a/WotBlitzStatisticsPro.Blazor/WotBlitzStatisticsPro.Blazor.csproj b/WotBlitzStatisticsPro.Blazor/WotBlitzStatisticsPro.Blazor.csproj index 95fc42f..f4db992 100644 --- a/WotBlitzStatisticsPro.Blazor/WotBlitzStatisticsPro.Blazor.csproj +++ b/WotBlitzStatisticsPro.Blazor/WotBlitzStatisticsPro.Blazor.csproj @@ -18,8 +18,4 @@ - - - - diff --git a/WotBlitzStatisticsPro.Blazor/wwwroot/Berlin.png b/WotBlitzStatisticsPro.Blazor/wwwroot/Berlin.png new file mode 100644 index 0000000..ad241d8 Binary files /dev/null and b/WotBlitzStatisticsPro.Blazor/wwwroot/Berlin.png differ diff --git a/WotBlitzStatisticsPro.Blazor/wwwroot/berlin.jpg b/WotBlitzStatisticsPro.Blazor/wwwroot/berlin.jpg new file mode 100644 index 0000000..b162474 Binary files /dev/null and b/WotBlitzStatisticsPro.Blazor/wwwroot/berlin.jpg differ diff --git a/WotBlitzStatisticsPro.Blazor/wwwroot/berlin.pdn b/WotBlitzStatisticsPro.Blazor/wwwroot/berlin.pdn new file mode 100644 index 0000000..10d55dd Binary files /dev/null and b/WotBlitzStatisticsPro.Blazor/wwwroot/berlin.pdn differ