From 5e6f0e5d189a35a9c4228ddf0f7d8f87993cddd4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Tue, 22 Oct 2024 15:08:23 -0500 Subject: [PATCH] feat: nivo graphs --- bun.lockb | Bin 379521 -> 394130 bytes packages/website/astro.config.mjs | 3 + packages/website/package.json | 1 + .../website/src/components/EChart/index.tsx | 64 -------- .../website/src/components/EChart/theme.ts | 140 ------------------ .../website/src/components/Nivo/ThemedBar.tsx | 18 +++ .../BattleDistributionAcrossTiers.tsx | 57 ------- .../BattleDistributionAcrossTiersByClass.tsx | 65 -------- .../BattleDistributionAcrossTiersNivo.tsx | 87 +++++++++++ .../components/Performance/Charts/index.tsx | 4 +- .../Performance/PlayerCountControl.tsx | 27 +--- packages/website/src/core/nivo/theme.ts | 43 +++++- .../src/stores/tankPerformanceEphemeral.ts | 12 +- 13 files changed, 157 insertions(+), 364 deletions(-) delete mode 100644 packages/website/src/components/EChart/index.tsx delete mode 100644 packages/website/src/components/EChart/theme.ts create mode 100644 packages/website/src/components/Nivo/ThemedBar.tsx delete mode 100644 packages/website/src/components/Performance/Charts/components/BattleDistributionAcrossTiers.tsx delete mode 100644 packages/website/src/components/Performance/Charts/components/BattleDistributionAcrossTiersByClass.tsx create mode 100644 packages/website/src/components/Performance/Charts/components/BattleDistributionAcrossTiersNivo.tsx diff --git a/bun.lockb b/bun.lockb index d70c1121f477d22e881d69ac0212f7ff52dc4bba..b560426124aff64ad1a24cc3f43732958e70c1be 100644 GIT binary patch delta 75674 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 J&+Hz@{tr6omXQDe delta 65983 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 - - useEffect(() => { - // Initialize chart - let chart: ECharts | undefined; - if (chartRef.current !== null) { - chart = init(chartRef.current, echartsTheme, { renderer: 'svg' }); - } - - // Add chart resize listener - // ResizeObserver is leading to a bit janky UX - function resizeChart() { - chart?.resize(); - } - window.addEventListener('resize', resizeChart); - - // Return cleanup function - return () => { - chart?.dispose(); - window.removeEventListener('resize', resizeChart); - }; - }, []); - - useEffect(() => { - if (chartRef.current === null) return undefined; - - const chart = getInstanceByDom(chartRef.current); - - if (chart === undefined) return undefined; - - chart.setOption(option, settings); - }, [option, settings]); - - return ( - - {title && {title}} - - - ); -} diff --git a/packages/website/src/components/EChart/theme.ts b/packages/website/src/components/EChart/theme.ts deleted file mode 100644 index d4dff35d1..000000000 --- a/packages/website/src/components/EChart/theme.ts +++ /dev/null @@ -1,140 +0,0 @@ -import { Var } from '../../core/radix/var'; - -export const echartsTheme = { - seriesCnt: '3', - backgroundColor: Var('color-background'), - titleColor: '#ff0000', - subtitleColor: '#dddddd', - textColorShow: false, - textColor: '#333', - markTextColor: '#293441', - color: [ - Var('accent-indicator'), - '#fc97af', - '#87f7cf', - '#f7f494', - '#72ccff', - '#f7c5a0', - '#d4a4eb', - '#d2f5a6', - '#76f2f2', - ], - borderColor: '#ccc', - borderWidth: 0, - visualMapColor: ['#fc97af', '#87f7cf'], - legendTextColor: '#999999', - kColor: '#fc97af', - kColor0: 'transparent', - kBorderColor: '#fc97af', - kBorderColor0: '#87f7cf', - kBorderWidth: '2', - lineWidth: '3', - symbolSize: '0', - symbol: 'circle', - symbolBorderWidth: '4', - lineSmooth: true, - graphLineWidth: '1', - graphLineColor: '#ffffff', - mapLabelColor: '#893448', - mapLabelColorE: 'rgb(137,52,72)', - mapBorderColor: '#999999', - mapBorderColorE: '#eb8146', - mapBorderWidth: 0.5, - mapBorderWidthE: 1, - mapAreaColor: '#f3f3f3', - mapAreaColorE: 'rgba(255,178,72,1)', - axes: [ - { - type: 'all', - name: '通用坐标轴', - axisLineShow: true, - axisLineColor: '#666666', - axisTickShow: false, - axisTickColor: '#333', - axisLabelShow: true, - axisLabelColor: '#aaaaaa', - splitLineShow: false, - splitLineColor: ['#e6e6e6'], - splitAreaShow: false, - splitAreaColor: ['rgba(250,250,250,0.05)', 'rgba(200,200,200,0.02)'], - }, - { - type: 'category', - name: '类目坐标轴', - axisLineShow: true, - axisLineColor: '#333', - axisTickShow: true, - axisTickColor: '#333', - axisLabelShow: true, - axisLabelColor: '#333', - splitLineShow: false, - splitLineColor: ['#ccc'], - splitAreaShow: false, - splitAreaColor: ['rgba(250,250,250,0.3)', 'rgba(200,200,200,0.3)'], - }, - { - type: 'value', - name: '数值坐标轴', - axisLineShow: true, - axisLineColor: '#333', - axisTickShow: true, - axisTickColor: '#333', - axisLabelShow: true, - axisLabelColor: '#333', - splitLineShow: true, - splitLineColor: ['#ccc'], - splitAreaShow: false, - splitAreaColor: ['rgba(250,250,250,0.3)', 'rgba(200,200,200,0.3)'], - }, - { - type: 'log', - name: '对数坐标轴', - axisLineShow: true, - axisLineColor: '#333', - axisTickShow: true, - axisTickColor: '#333', - axisLabelShow: true, - axisLabelColor: '#333', - splitLineShow: true, - splitLineColor: ['#ccc'], - splitAreaShow: false, - splitAreaColor: ['rgba(250,250,250,0.3)', 'rgba(200,200,200,0.3)'], - }, - { - type: 'time', - name: '时间坐标轴', - axisLineShow: true, - axisLineColor: '#333', - axisTickShow: true, - axisTickColor: '#333', - axisLabelShow: true, - axisLabelColor: '#333', - splitLineShow: true, - splitLineColor: ['#ccc'], - splitAreaShow: false, - splitAreaColor: ['rgba(250,250,250,0.3)', 'rgba(200,200,200,0.3)'], - }, - ], - axisSeperateSetting: false, - toolboxColor: '#999999', - toolboxEmphasisColor: '#666666', - tooltipAxisColor: '#cccccc', - tooltipAxisWidth: 1, - timelineLineColor: '#87f7cf', - timelineLineWidth: 1, - timelineItemColor: '#87f7cf', - timelineItemColorE: '#f7f494', - timelineCheckColor: '#fc97af', - timelineCheckBorderColor: '#fc97af', - timelineItemBorderWidth: 1, - timelineControlColor: '#87f7cf', - timelineControlBorderColor: '#87f7cf', - timelineControlBorderWidth: 0.5, - timelineLabelColor: '#87f7cf', - datazoomBackgroundColor: 'rgba(255,255,255,0)', - datazoomDataColor: 'rgba(114,204,255,1)', - datazoomFillColor: 'rgba(114,204,255,0.2)', - datazoomHandleColor: '#72ccff', - datazoomHandleWidth: '100', - datazoomLabelColor: '#333333', -}; diff --git a/packages/website/src/components/Nivo/ThemedBar.tsx b/packages/website/src/components/Nivo/ThemedBar.tsx new file mode 100644 index 000000000..1837cb1fe --- /dev/null +++ b/packages/website/src/components/Nivo/ThemedBar.tsx @@ -0,0 +1,18 @@ +import { + ResponsiveBar, + type BarDatum, + type ResponsiveBarSvgProps, +} from '@nivo/bar'; +import { nivoTheme } from '../../core/nivo/theme'; + +export function ThemedBar( + props: ResponsiveBarSvgProps, +) { + return ( + + ); +} diff --git a/packages/website/src/components/Performance/Charts/components/BattleDistributionAcrossTiers.tsx b/packages/website/src/components/Performance/Charts/components/BattleDistributionAcrossTiers.tsx deleted file mode 100644 index 2f5a53876..000000000 --- a/packages/website/src/components/Performance/Charts/components/BattleDistributionAcrossTiers.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import { - TIERS, - TIER_ROMAN_NUMERALS, - fetchAverageDefinitions, - fetchTankDefinitions, -} from '@blitzkit/core'; -import { TankPerformanceEphemeral } from '../../../../stores/tankPerformanceEphemeral'; -import { EChart } from '../../../EChart'; - -const averageDefinitions = await fetchAverageDefinitions(); -const tankDefinitions = await fetchTankDefinitions(); -const averageDefinitionsArray = Object.entries(averageDefinitions.averages); - -export function BattleDistributionAcrossTiers() { - const playerCountPeriod = TankPerformanceEphemeral.use( - (state) => state.playerCountPeriod, - ); - - return ( - TIER_ROMAN_NUMERALS[tier]), - }, - yAxis: { - type: 'value', - }, - series: [ - { - data: TIERS.map((tier) => { - return averageDefinitionsArray.reduce( - (accumulator, [idString, entry]) => { - const id = Number(idString); - const tank = tankDefinitions.tanks[id]; - - if (tank === undefined || tank.tier !== tier) { - return accumulator; - } - - return ( - accumulator + - entry.mu.battles * entry.samples[playerCountPeriod] - ); - }, - 0, - ); - }), - type: 'bar', - }, - ], - }} - /> - ); -} diff --git a/packages/website/src/components/Performance/Charts/components/BattleDistributionAcrossTiersByClass.tsx b/packages/website/src/components/Performance/Charts/components/BattleDistributionAcrossTiersByClass.tsx deleted file mode 100644 index fea1bca49..000000000 --- a/packages/website/src/components/Performance/Charts/components/BattleDistributionAcrossTiersByClass.tsx +++ /dev/null @@ -1,65 +0,0 @@ -import { - TANK_CLASSES, - TIERS, - TIER_ROMAN_NUMERALS, - fetchAverageDefinitions, - fetchTankDefinitions, -} from '@blitzkit/core'; -import strings from '@blitzkit/core/lang/en-US.json'; -import { TankPerformanceEphemeral } from '../../../../stores/tankPerformanceEphemeral'; -import { EChart } from '../../../EChart'; - -const averageDefinitions = await fetchAverageDefinitions(); -const tankDefinitions = await fetchTankDefinitions(); -const averageDefinitionsArray = Object.entries(averageDefinitions.averages); - -export function BattleDistributionAcrossTiersByClass() { - const playerCountPeriod = TankPerformanceEphemeral.use( - (state) => state.playerCountPeriod, - ); - - return ( - TIER_ROMAN_NUMERALS[tier]), - }, - yAxis: { - type: 'value', - }, - legend: { - data: TANK_CLASSES.map((c) => strings.common.tank_class_short[c]), - }, - series: TANK_CLASSES.map((c) => ({ - name: strings.common.tank_class_short[c], - data: TIERS.map((tier) => { - return averageDefinitionsArray.reduce( - (accumulator, [idString, entry]) => { - const id = Number(idString); - const tank = tankDefinitions.tanks[id]; - - if ( - tank === undefined || - tank.tier !== tier || - tank.class !== c - ) { - return accumulator; - } - - return ( - accumulator + - entry.mu.battles * entry.samples[playerCountPeriod] - ); - }, - 0, - ); - }), - type: 'bar', - })), - }} - /> - ); -} diff --git a/packages/website/src/components/Performance/Charts/components/BattleDistributionAcrossTiersNivo.tsx b/packages/website/src/components/Performance/Charts/components/BattleDistributionAcrossTiersNivo.tsx new file mode 100644 index 000000000..5a1b196e2 --- /dev/null +++ b/packages/website/src/components/Performance/Charts/components/BattleDistributionAcrossTiersNivo.tsx @@ -0,0 +1,87 @@ +import { + fetchAverageDefinitions, + fetchTankDefinitions, + formatCompact, + TANK_CLASSES, + TankClass, + TIER_ROMAN_NUMERALS, + TIERS, +} from '@blitzkit/core'; +import strings from '@blitzkit/core/lang/en-US.json'; +import { Box, Flex, Heading } from '@radix-ui/themes'; +import { useAveragesExclusionRatio } from '../../../../hooks/useAveragesExclusionRatio'; +import { TankPerformanceEphemeral } from '../../../../stores/tankPerformanceEphemeral'; +import { ThemedBar } from '../../../Nivo/ThemedBar'; + +const averageDefinitions = await fetchAverageDefinitions(); +const tankDefinitions = await fetchTankDefinitions(); +const averageDefinitionsArray = Object.entries(averageDefinitions.averages); + +export function BattleDistributionAcrossTiers() { + const playerCountPeriod = TankPerformanceEphemeral.use( + (state) => state.playerCountPeriod, + ); + const ratio = useAveragesExclusionRatio(); + + return ( + + Players by tier & class + + { + const players: Record = { + 0: 0, + 1: 0, + 2: 0, + 3: 0, + }; + + averageDefinitionsArray.forEach(([idString, entry]) => { + const id = Number(idString); + const tank = tankDefinitions.tanks[id]; + + if (tank === undefined || tank.tier !== tier) return; + + players[tank.class] += entry.samples[playerCountPeriod] * ratio; + }); + + const bar: Record = { + tier: TIER_ROMAN_NUMERALS[tier], + }; + + TANK_CLASSES.forEach((c) => { + bar[strings.common.tank_class_short[c]] = players[c]; + }); + + return bar; + })} + keys={TANK_CLASSES.map((c) => strings.common.tank_class_short[c])} + indexBy="tier" + margin={{ right: 90, bottom: 50, left: 90 }} + axisBottom={{ + legend: 'Tier', + legendPosition: 'middle', + legendOffset: 32, + }} + axisLeft={{ + legend: 'Players', + legendPosition: 'middle', + legendOffset: -60, + format: formatCompact, + }} + legends={[ + { + dataFrom: 'keys', + anchor: 'bottom-right', + direction: 'column', + translateX: 120, + itemWidth: 100, + itemHeight: 20, + }, + ]} + valueFormat={formatCompact} + /> + + + ); +} diff --git a/packages/website/src/components/Performance/Charts/index.tsx b/packages/website/src/components/Performance/Charts/index.tsx index 2a9a0b56c..a30184d18 100644 --- a/packages/website/src/components/Performance/Charts/index.tsx +++ b/packages/website/src/components/Performance/Charts/index.tsx @@ -1,13 +1,11 @@ import { Flex } from '@radix-ui/themes'; -import { BattleDistributionAcrossTiers } from './components/BattleDistributionAcrossTiers'; -import { BattleDistributionAcrossTiersByClass } from './components/BattleDistributionAcrossTiersByClass'; +import { BattleDistributionAcrossTiers } from './components/BattleDistributionAcrossTiersNivo'; export function Charts() { return ( - ); diff --git a/packages/website/src/components/Performance/PlayerCountControl.tsx b/packages/website/src/components/Performance/PlayerCountControl.tsx index b0d9928cb..18c13e01e 100644 --- a/packages/website/src/components/Performance/PlayerCountControl.tsx +++ b/packages/website/src/components/Performance/PlayerCountControl.tsx @@ -1,7 +1,7 @@ import { Flex, Select, Text } from '@radix-ui/themes'; import { - PlayerCountPeriod, TankPerformanceEphemeral, + type PlayerCountPeriod, } from '../../stores/tankPerformanceEphemeral'; export function PlayerCountControl() { @@ -23,24 +23,13 @@ export function PlayerCountControl() { > - - Past 120 days - - - Past 90 days - - - Past 60 days - - - This month - - - This week - - - Yesterday - + Total + Past 120 days + Past 90 days + Past 60 days + This month + This week + Yesterday diff --git a/packages/website/src/core/nivo/theme.ts b/packages/website/src/core/nivo/theme.ts index 2fa0ae388..ba77a165d 100644 --- a/packages/website/src/core/nivo/theme.ts +++ b/packages/website/src/core/nivo/theme.ts @@ -1,10 +1,39 @@ import type { Theme } from '@nivo/core'; +import { Var } from '../radix/var'; export const nivoTheme = { - theme: { - text: { fill: 'var(--gray-11)' }, - grid: { line: { stroke: 'var(--gray-3)' } }, - } satisfies Theme, - borderRadius: 2, - innerPadding: 1, -}; + background: Var('color-background'), + text: { + fill: Var('gray-contrast'), + fontFamily: 'inherit', + }, + axis: { + ticks: { + text: { + fill: Var('gray-indicator'), + }, + line: { + stroke: Var('gray-indicator'), + }, + }, + }, + grid: { + line: { + stroke: Var('gray-indicator'), + }, + }, + tooltip: { + container: { + background: Var('color-overlay'), + backdropFilter: 'blur(4rem)', + WebkitBackdropFilter: 'blur(4rem)', + color: Var('gray-contrast'), + borderRadius: Var('radius-2'), + }, + }, + labels: { + text: { + fill: Var('gray-1'), + }, + }, +} satisfies Theme; diff --git a/packages/website/src/stores/tankPerformanceEphemeral.ts b/packages/website/src/stores/tankPerformanceEphemeral.ts index b4188367f..a22ceaffc 100644 --- a/packages/website/src/stores/tankPerformanceEphemeral.ts +++ b/packages/website/src/stores/tankPerformanceEphemeral.ts @@ -1,3 +1,4 @@ +import type { Samples } from '@blitzkit/core'; import { create } from 'zustand'; import { createContextualStore } from '../core/zustand/createContextualStore'; @@ -11,18 +12,11 @@ export enum TankPerformanceMode { Charts, } -export enum PlayerCountPeriod { - Past120Days = 'd_120', - Past90Days = 'd_90', - Past60Days = 'd_60', - ThisMonth = 'd_30', - ThisWeek = 'd_7', - Yesterday = 'd_1', -} +export type PlayerCountPeriod = keyof Samples; export const TankPerformanceEphemeral = createContextualStore(() => create()(() => ({ - playerCountPeriod: PlayerCountPeriod.ThisMonth, + playerCountPeriod: 'd_30', mode: TankPerformanceMode.Charts, })), );