From bc839a7ab7159dfee9525ad13a1ce44177aa8916 Mon Sep 17 00:00:00 2001 From: Mikhail Shabanov Date: Fri, 23 Jul 2021 12:29:37 +0200 Subject: [PATCH] feat: tank card ready --- .../Pages/PlayerInfoOverview.razor | 40 +++++++++--- .../Pages/PlayerInfoTanksList.razor | 25 +++++--- .../Pages/TankCard.razor | 59 ++++++++++++++++++ .../Pages/TankCard.razor.css | 56 +++++++++++++++++ .../Resources/App.de.resx | 9 +++ .../Resources/App.ru.resx | 9 +++ .../wwwroot/icons/damage.scale-200.png | Bin 0 -> 4304 bytes .../icons/last.battle.time.scale-200.png | Bin 0 -> 1493 bytes .../wwwroot/icons/xp.avg.scale-200.png | Bin 0 -> 3787 bytes .../wwwroot/icons/xp.max.scale-200.png | Bin 0 -> 4855 bytes 10 files changed, 183 insertions(+), 15 deletions(-) create mode 100644 WotBlitzStatisticsPro.Blazor/Pages/TankCard.razor create mode 100644 WotBlitzStatisticsPro.Blazor/Pages/TankCard.razor.css create mode 100644 WotBlitzStatisticsPro.Blazor/wwwroot/icons/damage.scale-200.png create mode 100644 WotBlitzStatisticsPro.Blazor/wwwroot/icons/last.battle.time.scale-200.png create mode 100644 WotBlitzStatisticsPro.Blazor/wwwroot/icons/xp.avg.scale-200.png create mode 100644 WotBlitzStatisticsPro.Blazor/wwwroot/icons/xp.max.scale-200.png diff --git a/WotBlitzStatisticsPro.Blazor/Pages/PlayerInfoOverview.razor b/WotBlitzStatisticsPro.Blazor/Pages/PlayerInfoOverview.razor index 5d977a4..5250d22 100644 --- a/WotBlitzStatisticsPro.Blazor/Pages/PlayerInfoOverview.razor +++ b/WotBlitzStatisticsPro.Blazor/Pages/PlayerInfoOverview.razor @@ -3,8 +3,8 @@
-
- +
+
@@ -35,11 +35,33 @@
@Localize["Battles"]:
-
- @if(MostRelevantTank != null) - { -

@MostRelevantTank.Name

- } +
+
+ @Localize["Most effective tank"]: +
+ @if (MostRelevantTank != null) + { + + } +
+
+
+ @Localize["Tank with Max XP"] (@AccountInfo.MaxXp.ToString("N0")): +
+ @if (MaxXpTank != null) + { + + } +
+
+
+ @Localize["Tank with Max frags"] (@AccountInfo.MaxFrags): +
+ + @if (MaxFragsTank != null) + { + + }
@@ -49,10 +71,14 @@ public IAccount AccountInfo { get; set; } public ITank? MostRelevantTank; + public ITank? MaxXpTank; + public ITank? MaxFragsTank; protected override void OnInitialized() { MostRelevantTank = AccountInfo?.Tanks?.Where(t => t.Battles > 50).OrderByDescending(t => t.Wn7).FirstOrDefault(); + MaxXpTank = AccountInfo?.Tanks?.FirstOrDefault(t => t.TankId == AccountInfo.MaxXpTankId); + MaxFragsTank = AccountInfo?.Tanks?.FirstOrDefault(t => t.TankId == AccountInfo.MaxFragsTankId); } } diff --git a/WotBlitzStatisticsPro.Blazor/Pages/PlayerInfoTanksList.razor b/WotBlitzStatisticsPro.Blazor/Pages/PlayerInfoTanksList.razor index 0f4b5e1..d102d55 100644 --- a/WotBlitzStatisticsPro.Blazor/Pages/PlayerInfoTanksList.razor +++ b/WotBlitzStatisticsPro.Blazor/Pages/PlayerInfoTanksList.razor @@ -61,32 +61,33 @@ LogicalFilterOperator="LogicalFilterOperator.Or" @ref="TanksGrid"> - + - + - + - + - + @Localize["Tanks"]: @TanksGrid.View.Count() @Localize["of"] @TanksList.Count() @@ -184,3 +185,11 @@ SortOrder="SortOrder.Descending"/> + + +@code { + void ShowTankTooltip(ElementReference elementReference, string img, string nationId, TooltipOptions options = null) => TooltipService.Open(elementReference, ds => + @
+ +
, options); +} \ No newline at end of file diff --git a/WotBlitzStatisticsPro.Blazor/Pages/TankCard.razor b/WotBlitzStatisticsPro.Blazor/Pages/TankCard.razor new file mode 100644 index 0000000..924b61a --- /dev/null +++ b/WotBlitzStatisticsPro.Blazor/Pages/TankCard.razor @@ -0,0 +1,59 @@ +@using WotBlitzStatisticsPro.Blazor.Helpers +@inject IStringLocalizer Localize; + +
+
+
+ + @if (Tank.IsPremium) + { + + @Tank.Tier.RomanNumber() + } + else + { + @Tank.Tier.RomanNumber() + } +
+
+ +
+
+
+ +
+
+ @if (Tank.IsPremium) + { + + @Tank.Name + + } + else + { + @Tank.Name + } +
+
+
+ @Tank.Battles.ToString("N0") +
+
+ @Tank.WinRate.ToString("N0")% +
+
+
+
+
+ @Tank.AvgDamage.ToString("N0") +
+
+ @Tank.AvgXp.ToString("N0") +
+
+
+ +@code { + [Parameter] + public ITank Tank { get; set; } +} diff --git a/WotBlitzStatisticsPro.Blazor/Pages/TankCard.razor.css b/WotBlitzStatisticsPro.Blazor/Pages/TankCard.razor.css new file mode 100644 index 0000000..5a2ff1f --- /dev/null +++ b/WotBlitzStatisticsPro.Blazor/Pages/TankCard.razor.css @@ -0,0 +1,56 @@ +.card-body { + display: flex; + flex-direction: column; + justify-content: flex-start; + width: 120px; + height: 200px; + font-size: 14px; +} + +.header-area { + justify-content: space-between; + display: flex; + flex-direction: row; + align-items: flex-end; +} + +.middle-alligned { + display: flex; + flex-direction: row; + align-items: center; +} + +.card-flag-area { + background-repeat: no-repeat; + width: 120px; + height: 70px; + justify-content: flex-end; + display: flex; + flex-direction: row; +} + +.mastery-image { + width: 32px; + height: 32px; +} + +.tank-preview { + width: 95px; + height: 70px; +} + +.tank-type-icon { + width: 32px; + height: 32px; +} + +.icon-scale { + width: 20px; + height: 20px; +} + +.statistics-row { + justify-content: space-between; + display: flex; + flex-direction: row; +} diff --git a/WotBlitzStatisticsPro.Blazor/Resources/App.de.resx b/WotBlitzStatisticsPro.Blazor/Resources/App.de.resx index 6715233..e57f177 100644 --- a/WotBlitzStatisticsPro.Blazor/Resources/App.de.resx +++ b/WotBlitzStatisticsPro.Blazor/Resources/App.de.resx @@ -177,6 +177,9 @@ vor Monaten + + Effektivster Panzer + von @@ -198,6 +201,12 @@ Panzer + + Panzer max zerstört + + + Panzer mit max EP + Panzern diff --git a/WotBlitzStatisticsPro.Blazor/Resources/App.ru.resx b/WotBlitzStatisticsPro.Blazor/Resources/App.ru.resx index e4ef13a..a2c451a 100644 --- a/WotBlitzStatisticsPro.Blazor/Resources/App.ru.resx +++ b/WotBlitzStatisticsPro.Blazor/Resources/App.ru.resx @@ -177,6 +177,9 @@ месяцев назад + + Самый эффективный танк + из @@ -198,6 +201,12 @@ Танк + + Максимум фрагов + + + Максимум XP + Танков diff --git a/WotBlitzStatisticsPro.Blazor/wwwroot/icons/damage.scale-200.png b/WotBlitzStatisticsPro.Blazor/wwwroot/icons/damage.scale-200.png new file mode 100644 index 0000000000000000000000000000000000000000..3dfd023c4f522b764c238e4c1537c516f40d6e04 GIT binary patch literal 4304 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 JWt~$(69DXXDL4QC literal 0 HcmV?d00001 diff --git a/WotBlitzStatisticsPro.Blazor/wwwroot/icons/xp.avg.scale-200.png b/WotBlitzStatisticsPro.Blazor/wwwroot/icons/xp.avg.scale-200.png new file mode 100644 index 0000000000000000000000000000000000000000..e8abcc4ce78c755daa8a5a9acbfa96e96652094d GIT binary patch literal 3787 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 literal 0 HcmV?d00001 diff --git a/WotBlitzStatisticsPro.Blazor/wwwroot/icons/xp.max.scale-200.png b/WotBlitzStatisticsPro.Blazor/wwwroot/icons/xp.max.scale-200.png new file mode 100644 index 0000000000000000000000000000000000000000..28d881f14db0f966d3ba283ce4d7839d09d0c57a GIT binary patch literal 4855 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 literal 0 HcmV?d00001