,
+ order: number[] = Object.keys(stats).map(parseInt),
+) {
+ const awaitedTankopedia = await tankopedia;
+ const tierWeights: TierWeightsRecord = {};
+
+ order.map((id) => {
+ const entry = awaitedTankopedia[id];
+
+ if (!entry) return;
+ if (!tierWeights[entry.tier]) tierWeights[entry.tier] = 0;
+
+ tierWeights[entry.tier]! += stats[id].battles;
+ });
+
+ return tierWeights;
+}
diff --git a/src/renderers/fullStats.tsx b/src/renderers/fullStats.tsx
deleted file mode 100644
index 067d6b0b1..000000000
--- a/src/renderers/fullStats.tsx
+++ /dev/null
@@ -1,173 +0,0 @@
-import GenericAllStats from '../components/GenericAllStats';
-import NoData, { NoDataType } from '../components/NoData';
-import TierWeights, { TierWeightsRecord } from '../components/TierWeights';
-import TitleBar from '../components/TitleBar';
-import Wrapper from '../components/Wrapper';
-import { WARGAMING_APPLICATION_ID } from '../constants/wargamingApplicationID';
-import calculateWN8 from '../core/blitz/calculateWN8';
-import getWargamingResponse from '../core/blitz/getWargamingResponse';
-import resolveTankName from '../core/blitz/resolveTankName';
-import sumStats from '../core/blitz/sumStats';
-import { Tier, tankopedia } from '../core/blitz/tankopedia';
-import getDiffedTankStats from '../core/blitzstars/getDiffedTankStats';
-import { tankAverages } from '../core/blitzstars/tankAverages';
-import { ResolvedPeriod } from '../core/discord/resolvePeriodFromCommand';
-import { ResolvedPlayer } from '../core/discord/resolvePlayerFromCommand';
-import {
- AccountInfo,
- AllStats,
- SupplementaryStats,
-} from '../types/accountInfo';
-import { PlayerClanInfo } from '../types/playerClanData';
-import { MultiTankFilters, StatType } from './stats';
-
-export default async function fullStats
(
- type: Type,
- { start, end, name: statsName }: ResolvedPeriod,
- { region: server, id }: ResolvedPlayer,
- filters: Type extends 'tank'
- ? number
- : Type extends 'multi-tank'
- ? Partial
- : null,
-) {
- let nameDiscriminator: string | undefined;
- let image: string | undefined;
-
- if (type === 'player' || type === 'multi-tank') {
- const clan = (
- await getWargamingResponse(
- `https://api.wotblitz.${server}/wotb/clans/accountinfo/?application_id=${WARGAMING_APPLICATION_ID}&account_id=${id}&extra=clan`,
- )
- )[id]?.clan;
-
- if (clan) nameDiscriminator = `[${clan.tag}]`;
- image = clan
- ? `https://wotblitz-gc.gcdn.co/icons/clanEmblems1x/clan-icon-v2-${clan.emblem_set_id}.png`
- : undefined;
- } else if (type === 'tank') {
- nameDiscriminator = `(${await resolveTankName(filters as number)})`;
- image = (await tankopedia)[filters as number]?.images.normal;
- }
-
- const { diff: diffed, order } = await getDiffedTankStats(
- server,
- id,
- start,
- end,
- );
- const awaitedTankopedia = await tankopedia;
- let stats: AllStats | undefined;
- let supplementaryStats: SupplementaryStats;
- let tierWeights: TierWeightsRecord;
-
- if (type === 'player' || type === 'multi-tank') {
- const typedFilters = filters as Partial | null;
- const filteredOrder = order.filter(
- (id) =>
- typedFilters === null ||
- ((typedFilters.nation === undefined ||
- awaitedTankopedia[id]?.nation === typedFilters.nation) &&
- (typedFilters['tank-type'] === undefined ||
- awaitedTankopedia[id]?.type === typedFilters['tank-type']) &&
- (typedFilters.tier === undefined ||
- awaitedTankopedia[id]?.tier === typedFilters.tier) &&
- (typedFilters['tree-type'] === undefined ||
- (typedFilters['tree-type'] === 'collector' &&
- awaitedTankopedia[id]?.is_collectible) ||
- (typedFilters['tree-type'] === 'premium' &&
- awaitedTankopedia[id]?.is_premium) ||
- (typedFilters['tree-type'] === 'techtree' &&
- !awaitedTankopedia[id]?.is_collectible &&
- !awaitedTankopedia[id]?.is_premium))),
- );
- const awaitedTankAverages = await tankAverages;
- stats = sumStats(filteredOrder.map((id) => diffed[id]));
- const battlesOfTanksWithAverages = filteredOrder.reduce(
- (accumulator, id) =>
- awaitedTankAverages[id]
- ? accumulator + diffed[id].battles
- : accumulator,
- 0,
- );
- const battlesOfTanksWithTankopediaEntry = filteredOrder.reduce(
- (accumulator, id) =>
- awaitedTankopedia[id] ? accumulator + diffed[id].battles : accumulator,
- 0,
- );
-
- supplementaryStats = {
- WN8:
- filteredOrder.reduce(
- (accumulator, id) =>
- awaitedTankAverages[id]
- ? accumulator +
- calculateWN8(awaitedTankAverages[id].all, diffed[id]) *
- diffed[id].battles
- : accumulator,
- 0,
- ) / battlesOfTanksWithAverages,
- tier:
- filteredOrder.reduce(
- (accumulator, id) =>
- awaitedTankopedia[id]
- ? accumulator + awaitedTankopedia[id]!.tier * diffed[id].battles
- : accumulator,
- 0,
- ) / battlesOfTanksWithTankopediaEntry,
- };
- tierWeights = filteredOrder.reduce((accumulator, id) => {
- const tankopediaEntry = awaitedTankopedia[id];
-
- if (!tankopediaEntry) return accumulator;
-
- const tier = tankopediaEntry.tier as Tier;
-
- if (accumulator[tier]) {
- accumulator[tier]! += diffed[id].battles;
- } else {
- accumulator[tier] = diffed[id].battles;
- }
-
- return accumulator;
- }, {});
- } else {
- stats = diffed[(filters as number)!];
-
- supplementaryStats = {
- WN8: stats
- ? calculateWN8(
- (await tankAverages)[(filters as number)!].all,
- diffed[(filters as number)!],
- )
- : undefined,
- tier: (await tankopedia)[(filters as number)!]?.tier,
- };
- }
-
- const accountInfo = await getWargamingResponse(
- `https://api.wotblitz.${server}/wotb/account/info/?application_id=${WARGAMING_APPLICATION_ID}&account_id=${id}`,
- );
-
- return (
-
-
-
- {stats.battles === 0 && }
- {stats.battles > 0 && type === 'player' && (
-
- )}
- {stats.battles > 0 && (
-
- )}
-
- );
-}