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