From fe98d52c3148f7d72eea86ad81993b22e7fda063 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com>
Date: Wed, 10 Jul 2024 20:51:36 -0500
Subject: [PATCH] feat: compact format tech tree
---
src/app/tools/tank-performance/components/Info.tsx | 8 ++++----
.../tools/tank-performance/components/TankRow.tsx | 6 +++---
.../tank-performance/components/TierBreakdown.tsx | 6 +++---
.../tools/tank-performance/components/Total.tsx | 10 +++-------
.../Characteristics/components/Modules.tsx | 7 ++-----
.../[id]/components/Model/TechTreeSection.tsx | 14 ++++----------
src/core/math/formatCompact.ts | 5 +++++
7 files changed, 24 insertions(+), 32 deletions(-)
create mode 100644 src/core/math/formatCompact.ts
diff --git a/src/app/tools/tank-performance/components/Info.tsx b/src/app/tools/tank-performance/components/Info.tsx
index 2e9859c25..781fbc2b0 100644
--- a/src/app/tools/tank-performance/components/Info.tsx
+++ b/src/app/tools/tank-performance/components/Info.tsx
@@ -4,11 +4,11 @@ import { InfoCircledIcon } from '@radix-ui/react-icons';
import { Callout, Flex } from '@radix-ui/themes';
import { use } from 'react';
import { averageDefinitions } from '../../../../core/blitzkit/averageDefinitions';
+import { formatCompact } from '../../../../core/math/formatCompact';
import { useAveragesExclusionRatio } from '../../../../hooks/useAveragesExclusionRatio';
export function Info() {
const awaitedAverageDefinitions = use(averageDefinitions);
- const numberFormat = Intl.NumberFormat(undefined, { notation: 'compact' });
const ratio = useAveragesExclusionRatio();
const samples = ratio * awaitedAverageDefinitions.samples.d_120;
@@ -19,9 +19,9 @@ export function Info() {
- Career stats based on {numberFormat.format(Math.round(samples))}{' '}
- players with at least 5K career battles and 1 battle in the past 120
- days; updated daily.
+ Career stats based on {formatCompact(Math.round(samples))} players
+ with at least 5K career battles and 1 battle in the past 120 days;
+ updated daily.
diff --git a/src/app/tools/tank-performance/components/TankRow.tsx b/src/app/tools/tank-performance/components/TankRow.tsx
index 0a6255854..06d7df79e 100644
--- a/src/app/tools/tank-performance/components/TankRow.tsx
+++ b/src/app/tools/tank-performance/components/TankRow.tsx
@@ -3,6 +3,7 @@ import { memo, use } from 'react';
import { TankRowHeaderCell } from '../../../../components/TankRowHeaderCell';
import { averageDefinitions } from '../../../../core/blitzkit/averageDefinitions';
import { TankDefinition } from '../../../../core/blitzkit/tankDefinitions';
+import { formatCompact } from '../../../../core/math/formatCompact';
import { useAveragesExclusionRatio } from '../../../../hooks/useAveragesExclusionRatio';
interface TankRowProps {
@@ -13,7 +14,6 @@ export const TankRow = memo(
({ tank }) => {
const awaitedAverageDefinitions = use(averageDefinitions);
const averages = awaitedAverageDefinitions.averages[tank.id];
- const numberFormat = Intl.NumberFormat(undefined, { notation: 'compact' });
const ratio = useAveragesExclusionRatio();
return (
@@ -24,10 +24,10 @@ export const TankRow = memo(
{((averages.mu.wins / averages.mu.battles) * 100).toFixed(1)}%
- {numberFormat.format(Math.round(ratio * averages.samples.d_30))}
+ {formatCompact(Math.round(ratio * averages.samples.d_30))}
- {numberFormat.format(
+ {formatCompact(
Math.round(ratio * averages.mu.battles * averages.samples.total),
)}
diff --git a/src/app/tools/tank-performance/components/TierBreakdown.tsx b/src/app/tools/tank-performance/components/TierBreakdown.tsx
index f4b9fcd34..df41ac38d 100644
--- a/src/app/tools/tank-performance/components/TierBreakdown.tsx
+++ b/src/app/tools/tank-performance/components/TierBreakdown.tsx
@@ -12,13 +12,13 @@ import {
Tier,
} from '../../../../core/blitzkit/tankDefinitions';
import { TIER_ROMAN_NUMERALS } from '../../../../core/blitzkit/tankDefinitions/constants';
+import { formatCompact } from '../../../../core/math/formatCompact';
import { nivoTheme } from '../../../../core/nivo/theme';
import strings from '../../../../lang/en-US.json';
export function TierBreakdown() {
const awaitedAverageDefinitionsArray = use(averageDefinitionsArray);
const awaitedTankDefinitions = use(tankDefinitions);
- const numberFormat = Intl.NumberFormat(undefined, { notation: 'compact' });
return (
@@ -57,14 +57,14 @@ export function TierBreakdown() {
keys={[...TANK_CLASSES].reverse()}
indexBy="tier"
colors={{ scheme: 'dark2' }}
- label={(d) => numberFormat.format(d.value as number)}
+ label={(d) => formatCompact(d.value as number)}
margin={{ right: 96, bottom: 20, left: 40 }}
legendLabel={(d) =>
strings.common.tank_class_short[d.id as TankClass]
}
axisLeft={{
tickSize: 0,
- format: (value) => numberFormat.format(value as number),
+ format: (value) => formatCompact(value as number),
}}
axisBottom={{ tickSize: 0 }}
legends={[
diff --git a/src/app/tools/tank-performance/components/Total.tsx b/src/app/tools/tank-performance/components/Total.tsx
index 3ede675b3..b83187e36 100644
--- a/src/app/tools/tank-performance/components/Total.tsx
+++ b/src/app/tools/tank-performance/components/Total.tsx
@@ -5,6 +5,7 @@ import {
AverageDefinitionsAllStats,
AverageDefinitionsEntryWithId,
} from '../../../../core/blitzkit/averageDefinitions';
+import { formatCompact } from '../../../../core/math/formatCompact';
import { useAveragesExclusionRatio } from '../../../../hooks/useAveragesExclusionRatio';
interface TotalProps {
@@ -14,7 +15,6 @@ interface TotalProps {
export const Total = memo(
({ tanks }) => {
const ratio = useAveragesExclusionRatio();
- const numberFormat = Intl.NumberFormat(undefined, { notation: 'compact' });
const sum = useCallback(
(slice: (tank: AverageDefinitionsAllStats) => number) => {
return tanks.reduce(
@@ -45,12 +45,8 @@ export const Total = memo(
Total
{(winrate * 100).toFixed(1)}%
-
- {numberFormat.format(ratio * players)}
-
-
- {numberFormat.format(ratio * battles)}
-
+ {formatCompact(ratio * players)}
+ {formatCompact(ratio * battles)}
{Math.round(damage).toLocaleString()}
diff --git a/src/app/tools/tankopedia/[id]/components/Characteristics/components/Modules.tsx b/src/app/tools/tankopedia/[id]/components/Characteristics/components/Modules.tsx
index 12029b36e..2e8b82ef3 100644
--- a/src/app/tools/tankopedia/[id]/components/Characteristics/components/Modules.tsx
+++ b/src/app/tools/tankopedia/[id]/components/Characteristics/components/Modules.tsx
@@ -19,6 +19,7 @@ import {
} from '../../../../../../../core/blitzkit/tankDefinitions';
import { TIER_ROMAN_NUMERALS } from '../../../../../../../core/blitzkit/tankDefinitions/constants';
import { tankIcon } from '../../../../../../../core/blitzkit/tankIcon';
+import { formatCompact } from '../../../../../../../core/math/formatCompact';
import * as Duel from '../../../../../../../stores/duel';
import { ConfigurationChildWrapper } from './ConfigurationChildWrapper';
@@ -35,10 +36,6 @@ function ModuleButton({
top: boolean;
onClick: () => void;
}) {
- const numberFormat = Intl.NumberFormat(undefined, {
- notation: 'compact',
- maximumFractionDigits: 0,
- });
const isTank = unlock.type === 'vehicle';
const button = (
- {numberFormat.format(unlock.cost.value)}
+ {formatCompact(unlock.cost.value)}
- {ancestor.xp?.toLocaleString()}
+ {formatCompact(ancestor.xp!)}
@@ -114,7 +115,7 @@ export function TechTreeSection() {
}}
/>
- {ancestor.price.value?.toLocaleString()}
+ {formatCompact(ancestor.price.value)}
@@ -141,14 +142,7 @@ export function TechTreeSection() {
Tech tree
- {/* BIG TODO: use number format to shorten currencies */}
-
-
+
{tank.ancestors && (
<>