feat: tank info dialog mechanism

This commit is contained in:
Mikhail Shabanov committed 2022-05-05 12:28:16 +02:00
1 parent 4c7e7b3ca2
commit d5a139822d
9 files changed
+88 -7

No files matched your search

@@ -0,0 +1,15 @@
using MediatR;
using WotBlitzStatisticsPro.Blazor.GraphQl;
namespace WotBlitzStatisticsPro.Blazor.Messages
{
public class OpenTankDialogMessage: INotification
{
public ITank Tank { get; }
public OpenTankDialogMessage(ITank tank)
{
Tank = tank;
}
}
}
@@ -1,5 +1,8 @@
@using WotBlitzStatisticsPro.Blazor.Helpers
@using MediatR
@using WotBlitzStatisticsPro.Blazor.Messages
@inject IStringLocalizer<App> Localize;
@inject IMediator Mediator
<div class="row">
<RadzenCard class="m-3" style="width: 350px;">
@@ -51,7 +54,7 @@
<div class="row">
<div class="col col-sm col-md col-lg col-xl">
</div>
<div class="col col-sm col-md col-lg col-xl">
<div class="col col-sm col-md col-lg col-xl" @onclick="@(async (e) => { await Mediator.Publish(new OpenTankDialogMessage(MostRelevantTank)); })">
@if (MostRelevantTank != null)
{
<TankCard Tank=@MostRelevantTank></TankCard>
@@ -67,7 +70,7 @@
<div class="row">
<div class="col col-sm col-md col-lg col-xl">
</div>
<div class="col col-sm col-md col-lg col-xl">
<div class="col col-sm col-md col-lg col-xl" @onclick="@(async (e) => { await Mediator.Publish(new OpenTankDialogMessage(MaxXpTank)); })">
@if (MaxXpTank != null)
{
<TankCard Tank=@MaxXpTank></TankCard>
@@ -83,7 +86,7 @@
<div class="row">
<div class="col col-sm col-md col-lg col-xl">
</div>
<div class="col col-sm col-md col-lg col-xl">
<div class="col col-sm col-md col-lg col-xl" @onclick="@(async (e) => { await Mediator.Publish(new OpenTankDialogMessage(MaxFragsTank)); })">
@if (MaxFragsTank != null)
{
<TankCard Tank=@MaxFragsTank></TankCard>
@@ -1,4 +1,5 @@
@using WotBlitzStatisticsPro.Blazor.Helpers
@using WotBlitzStatisticsPro.Blazor.Messages
@inherits PlayerInfoTanksListBase;
<div class="row">
@@ -84,7 +85,8 @@
<RadzenDataGridColumn TItem="ITank" Title="" Sortable="false" Filterable="false" Width="55px">
<Template Context="data">
<RadzenImage Path="@data.PreviewImage" style="width: 50px; height: 40px; border-radius: 8px;"
MouseEnter="@(args => ShowTankTooltip(args, data.PreviewImage, data.TankNationId, new TooltipOptions(){ Style = "background-color:#2F3D43" }) )" />
MouseEnter="@(args => ShowTankTooltip(args, data.PreviewImage, data.TankNationId, new TooltipOptions(){ Style = "background-color:#2F3D43" }) )"
Click="@(async (args) => { await Mediator.Publish(new OpenTankDialogMessage(data)); })" />
</Template>
</RadzenDataGridColumn>
<RadzenDataGridColumn TItem="ITank" Property="Name" Filterable="false" Sortable="true" Title="@Localize["Tank"]" Frozen="false" Width="100px" TextAlign="TextAlign.Left">
@@ -8,7 +8,8 @@ using Radzen.Blazor;
using WotBlitzStatisticsPro.Blazor.GraphQl;
using WotBlitzStatisticsPro.Blazor.Helpers;
using WotBlitzStatisticsPro.Blazor.Model;
using MediatR;
using WotBlitzStatisticsPro.Blazor.Messages;
namespace WotBlitzStatisticsPro.Blazor.Pages
{
public class PlayerInfoTanksListBase: ComponentBase
@@ -22,6 +23,9 @@ namespace WotBlitzStatisticsPro.Blazor.Pages
[Inject]
public IStringLocalizer<App> Localize { get; set; }
[Inject]
public IMediator Mediator { get; set; }
public RadzenDataGrid<ITank> TanksGrid { get; set; }
public IEnumerable<ITank> FilteredTankList { get; set; }
@@ -1,4 +1,5 @@
@inherits PlayerInfoTanksListBase;
@using WotBlitzStatisticsPro.Blazor.Messages
@inherits PlayerInfoTanksListBase;
@if (TanksList != null && FilteredTankList.Count() > 0)
{
<div class="sorting">
@@ -49,7 +50,9 @@
<div class="tanks-list">
@foreach (var tank in FilteredTankList)
{
<TankListItem Tank=@tank></TankListItem>
<div @onclick="@(async (e) => { await Mediator.Publish(new OpenTankDialogMessage(tank)); })">
<TankListItem Tank=@tank></TankListItem>
</div>
}
</div>
@@ -0,0 +1,10 @@
@using WotBlitzStatisticsPro.Blazor.Model
<p>
@Tank.Name
</p>
@code {
[Parameter]
public ITank Tank { get; set; }
}
+1
View File
@@ -31,6 +31,7 @@ namespace WotBlitzStatisticsPro.Blazor
builder.Services.AddScoped<ISearchDialogService, SearchDialogService>();
builder.Services.AddScoped<IChartsService, ChartService>();
builder.Services.AddScoped<IMediaQueriesService, MediaQueriesService>();
builder.Services.AddScoped<ITankStatisticDialogService, TankStatisticDialogService>();
builder.Services.AddMediatR(typeof(Program));
@@ -0,0 +1,10 @@
using System.Threading.Tasks;
using WotBlitzStatisticsPro.Blazor.GraphQl;
namespace WotBlitzStatisticsPro.Blazor.Services
{
public interface ITankStatisticDialogService
{
Task OpenTankStatistics(ITank tank);
}
}
@@ -0,0 +1,33 @@
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using WotBlitzStatisticsPro.Blazor.GraphQl;
using MediatR;
using Radzen;
using WotBlitzStatisticsPro.Blazor.Messages;
using WotBlitzStatisticsPro.Blazor.Pages;
namespace WotBlitzStatisticsPro.Blazor.Services
{
public class TankStatisticDialogService: ITankStatisticDialogService, INotificationHandler<OpenTankDialogMessage>
{
private readonly DialogService _dialogService;
public TankStatisticDialogService(DialogService dialogService)
{
_dialogService = dialogService;
}
public async Task OpenTankStatistics(ITank tank)
{
await _dialogService.OpenAsync<TankInfoDialog>(tank.Name,
new Dictionary<string, object>() { { "Tank", tank } },
new DialogOptions() { Width = "300px", Height = "800px" });
}
public Task Handle(OpenTankDialogMessage notification, CancellationToken cancellationToken)
{
return OpenTankStatistics(notification.Tank);
}
}
}