From 84dd3317dcf50f82001e82135a2dfe83459ab23c Mon Sep 17 00:00:00 2001
From: tresabhi <43380238+tresabhi@users.noreply.github.com>
Date: Tue, 12 Nov 2024 15:12:34 -0600
Subject: [PATCH] feat: expand session stats
---
.../src/pages/tools/session/_index.tsx | 96 ++++++++++---------
packages/website/src/stores/session.ts | 17 +++-
2 files changed, 64 insertions(+), 49 deletions(-)
diff --git a/packages/website/src/pages/tools/session/_index.tsx b/packages/website/src/pages/tools/session/_index.tsx
index 2c4657bba..c549176dc 100644
--- a/packages/website/src/pages/tools/session/_index.tsx
+++ b/packages/website/src/pages/tools/session/_index.tsx
@@ -1,20 +1,19 @@
import {
- STAT_KEYS,
- STAT_NAMES,
+ compositeStats,
+ compositeStatsKeys,
deltaTankStats,
fetchAverageDefinitions,
fetchTankDefinitions,
- generateStats,
+ formatCompositeStat,
getAccountInfo,
getTankStats,
idToRegion,
- prettifyStats,
searchPlayersAcrossRegions,
- sumBlitzStarsStats,
+ sumCompositeStats,
type AccountListWithServer,
+ type CompositeStatsKey,
type IndividualAccountInfo,
type IndividualTankStats,
- type Stat,
} from '@blitzkit/core';
import strings from '@blitzkit/core/lang/en-US.json';
import {
@@ -85,14 +84,12 @@ function Content() {
.map((entry) => {
const tank = tankDefinitions.tanks[entry.tank_id];
const average = tankAverages.averages[tank.id];
- const stats = generateStats(entry.all, average?.mu);
- const statsPretty = prettifyStats(stats);
+ const composite = compositeStats(
+ { ...entry.all, battle_life_time: entry.battle_life_time },
+ average?.mu,
+ );
- return {
- tank,
- stats,
- statsPretty,
- };
+ return { tank, composite };
})
: undefined,
[session.tracking && session.player, tankStatsB],
@@ -100,7 +97,7 @@ function Content() {
const total = useMemo(
() =>
delta
- ? prettifyStats(sumBlitzStarsStats(delta.map(({ stats }) => stats)))
+ ? sumCompositeStats(delta.map(({ composite }) => composite))
: undefined,
[delta],
);
@@ -307,13 +304,12 @@ function Content() {
Tank
+
{session.columns.map((column, index) => (
{index === 0 && session.columns.length < 4 && (
@@ -334,22 +330,22 @@ function Content() {
- {STAT_KEYS.filter(
- (item) => !session.columns.includes(item),
- ).map((key) => (
- {
- mutateSession((draft) => {
- (draft as SessionTracking).columns.unshift(
- key as Stat,
- );
- });
- }}
- >
- {STAT_NAMES[key]}
-
- ))}
+ {compositeStatsKeys
+ .filter((item) => !session.columns.includes(item))
+ .map((key) => (
+ {
+ mutateSession((draft) => {
+ (draft as SessionTracking).columns.unshift(
+ key,
+ );
+ });
+ }}
+ >
+ {strings.common.composite_stats[key]}
+
+ ))}
)}
@@ -362,7 +358,7 @@ function Content() {
(draft as SessionTracking).columns.splice(index, 1);
} else {
(draft as SessionTracking).columns[index] =
- value as Stat;
+ value as CompositeStatsKey;
}
});
}}
@@ -370,14 +366,16 @@ function Content() {
- {STAT_KEYS.filter(
- (item) =>
- !session.columns.includes(item) || item === column,
- ).map((key) => (
-
- {STAT_NAMES[key]}
-
- ))}
+ {compositeStatsKeys
+ .filter(
+ (item) =>
+ !session.columns.includes(item) || item === column,
+ )
+ .map((key) => (
+
+ {strings.common.composite_stats[key]}
+
+ ))}
@@ -405,11 +403,13 @@ function Content() {
Total
{session.columns.map((column) => (
- {total![column]}
+
+ {formatCompositeStat(total![column], column, total!)}
+
))}
- {delta.map(({ statsPretty, tank }) => {
+ {delta.map(({ tank, composite }) => {
return (
{session.columns.map((column) => (
- {statsPretty[column]}
+
+ {formatCompositeStat(
+ composite[column],
+ column,
+ composite,
+ )}
+
))}
);
diff --git a/packages/website/src/stores/session.ts b/packages/website/src/stores/session.ts
index 333e2ce28..303852dfd 100644
--- a/packages/website/src/stores/session.ts
+++ b/packages/website/src/stores/session.ts
@@ -1,11 +1,15 @@
-import type { IndividualTankStats, Region, Stat } from '@blitzkit/core';
+import type {
+ CompositeStatsKey,
+ IndividualTankStats,
+ Region,
+} from '@blitzkit/core';
import { merge } from 'lodash-es';
import { create } from 'zustand';
import { persist } from 'zustand/middleware';
import { createContextualStore } from '../core/zustand/createContextualStore';
interface SessionBase {
- columns: Stat[];
+ columns: CompositeStatsKey[];
}
export interface SessionTracking extends SessionBase {
@@ -28,10 +32,15 @@ export const Session = createContextualStore(() =>
create()(
persist(
(_) => ({
- columns: ['battles', 'winrate', 'wn8', 'averageDamage'],
+ columns: [
+ 'cumulative_battles',
+ 'normalized_wins',
+ 'cumulative_wn8',
+ 'normalized_damage_dealt',
+ ],
tracking: false,
}),
- { name: 'session-2', merge: (a, b) => merge(b, a) },
+ { name: 'session-3', merge: (a, b) => merge(b, a) },
),
),
);