Skip to content

Commit

Permalink
feat: optimize awaitables
Browse files Browse the repository at this point in the history
  • Loading branch information
tresabhi committed Nov 29, 2024
1 parent 80fca2e commit 74e85f8
Show file tree
Hide file tree
Showing 54 changed files with 259 additions and 190 deletions.
Binary file modified bun.lockb
Binary file not shown.
6 changes: 3 additions & 3 deletions packages/core/src/statistics/deltaBkrlBlitzStats.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { RatingStats } from '../blitz/getAccountInfo';
import { BkrlSuperset1Entry } from '../streams/bkrl';
import { RatingLeaderboardEntryV2 } from '../protos';

export function deltaBkrlBlitzStats(
a: BkrlSuperset1Entry,
a: RatingLeaderboardEntryV2,
b1: RatingStats,
b2: RatingPlayer,
) {
Expand All @@ -13,7 +13,7 @@ export function deltaBkrlBlitzStats(
survived: b1.survived_battles - a.survived,
wins: b1.wins - a.wins,
score: b2.score - a.score,
} satisfies Omit<BkrlSuperset1Entry, 'id'>;
} satisfies Omit<RatingLeaderboardEntryV2, 'id'>;
}
export interface RatingPlayer {
spa_id: number;
Expand Down
29 changes: 16 additions & 13 deletions packages/website/src/components/Compare/CompareTable.tsx
Original file line number Diff line number Diff line change
@@ -1,16 +1,12 @@
import {
asset,
availableProvisions,
fetchConsumableDefinitions,
fetchEquipmentDefinitions,
fetchProvisionDefinitions,
fetchSkillDefinitions,
permanentSkills,
} from '@blitzkit/core';
import { asset, availableProvisions, permanentSkills } from '@blitzkit/core';
import { checkConsumableProvisionInclusivity } from '@blitzkit/core/src/blitzkit/checkConsumableProvisionInclusivity';
import { ComponentPlaceholderIcon } from '@radix-ui/react-icons';
import { Button, Flex, IconButton, Popover, Table } from '@radix-ui/themes';
import { times } from 'lodash-es';
import { awaitableConsumableDefinitions } from '../../core/awaitables/consumableDefinitions';
import { awaitableEquipmentDefinitions } from '../../core/awaitables/equipmentDefinitions';
import { awaitableProvisionDefinitions } from '../../core/awaitables/provisionDefinitions';
import { awaitableSkillDefinitions } from '../../core/awaitables/skillDefinitions';
import type { TankCharacteristics } from '../../core/blitzkit/tankCharacteristics';
import { Var } from '../../core/radix/var';
import { CompareEphemeral } from '../../stores/compareEphemeral';
Expand All @@ -31,10 +27,17 @@ interface CompareTableProps {
stats: TankCharacteristics[];
}

const skillDefinitions = await fetchSkillDefinitions();
const equipmentDefinitions = await fetchEquipmentDefinitions();
const consumableDefinitions = await fetchConsumableDefinitions();
const provisionDefinitions = await fetchProvisionDefinitions();
const [
skillDefinitions,
equipmentDefinitions,
consumableDefinitions,
provisionDefinitions,
] = await Promise.all([
awaitableSkillDefinitions,
awaitableEquipmentDefinitions,
awaitableConsumableDefinitions,
awaitableProvisionDefinitions,
]);

export function CompareTable({ stats }: CompareTableProps) {
const crewSkills = CompareEphemeral.use((state) => state.crewSkills);
Expand Down
4 changes: 2 additions & 2 deletions packages/website/src/components/Compare/Controls.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { fetchProvisionDefinitions } from '@blitzkit/core';
import { PlusIcon, TrashIcon } from '@radix-ui/react-icons';
import { Button, Dialog, Flex, SegmentedControl } from '@radix-ui/themes';
import { awaitableProvisionDefinitions } from '../../core/awaitables/provisionDefinitions';
import { tankToCompareMember } from '../../core/blitzkit/tankToCompareMember';
import { CompareEphemeral } from '../../stores/compareEphemeral';
import {
Expand All @@ -14,7 +14,7 @@ interface ControlsProps {
onAddTankDialogOpenChange: (open: boolean) => void;
}

const provisionDefinitions = await fetchProvisionDefinitions();
const provisionDefinitions = await awaitableProvisionDefinitions;

export function Controls({
addTankDialogOpen,
Expand Down
4 changes: 2 additions & 2 deletions packages/website/src/components/Compare/TankControl.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { fetchProvisionDefinitions } from '@blitzkit/core';
import { ExternalLinkIcon, LoopIcon, TrashIcon } from '@radix-ui/react-icons';
import { Dialog, Flex, IconButton, Link } from '@radix-ui/themes';
import { useState } from 'react';
import { awaitableProvisionDefinitions } from '../../core/awaitables/provisionDefinitions';
import { tankToCompareMember } from '../../core/blitzkit/tankToCompareMember';
import { CompareEphemeral } from '../../stores/compareEphemeral';
import { TankSearch } from '../TankSearch';
Expand All @@ -11,7 +11,7 @@ interface TankControlProps {
id: number;
}

const provisionDefinitions = await fetchProvisionDefinitions();
const provisionDefinitions = await awaitableProvisionDefinitions;

export function TankControl({ index, id }: TankControlProps) {
const [switchTankDialogOpen, setSwitchTankDialogOpen] = useState(false);
Expand Down
10 changes: 3 additions & 7 deletions packages/website/src/components/CrewSkillManager.tsx
Original file line number Diff line number Diff line change
@@ -1,18 +1,14 @@
import {
asset,
fetchSkillDefinitions,
permanentSkills,
romanize,
} from '@blitzkit/core';
import { asset, permanentSkills, romanize } from '@blitzkit/core';
import { Flex } from '@radix-ui/themes';
import { awaitableSkillDefinitions } from '../core/awaitables/skillDefinitions';
import { GenericTankComponentButton } from './ModuleButtons/GenericTankComponentButton';

interface CrewSkillManagerProps {
skillLevels: Record<string, number>;
onChange?: (skillLevels: Record<string, number>) => void;
}

const skillDefinitions = await fetchSkillDefinitions();
const skillDefinitions = await awaitableSkillDefinitions;

export function CrewSkillManager({
skillLevels,
Expand Down
10 changes: 6 additions & 4 deletions packages/website/src/components/Embeds/breakdown.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@ import {
compositeStats,
compositeStatsKeys,
deltaTankStats,
fetchAverageDefinitions,
fetchTankDefinitions,
getTankStats,
idToRegion,
sumCompositeStats,
Expand All @@ -15,6 +13,8 @@ import { ReloadIcon } from '@radix-ui/react-icons';
import { ContextMenu } from '@radix-ui/themes';
import { useEffect, useMemo, useState } from 'react';
import { breakdownConfig } from '../../constants/embeds';
import { awaitableAverageDefinitions } from '../../core/awaitables/averageDefinitions';
import { awaitableTankDefinitions } from '../../core/awaitables/tankDefinitions';
import { EmbedBreakdownPersistent } from '../../stores/embedBreakdownPersistent';
import { useEmbedStateCurry } from '../../stores/embedState/utilities';
import { BreakdownEmbedCard, BreakdownEmbedWrapper } from '../TanksEmbed';
Expand All @@ -24,8 +24,10 @@ export const compositeStatsKeysOptions = compositeStatsKeys.map((value) => ({
value,
}));

const tankDefinitions = await fetchTankDefinitions();
const averageDefinitions = await fetchAverageDefinitions();
const [tankDefinitions, averageDefinitions] = await Promise.all([
awaitableTankDefinitions,
awaitableAverageDefinitions,
]);

export const fakeCompositeStats = compositeStats(
{
Expand Down
9 changes: 6 additions & 3 deletions packages/website/src/components/HomePageHotTanks.tsx
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
import { fetchAverageDefinitions, fetchTankDefinitions } from '@blitzkit/core';
import { Box, Flex, Heading } from '@radix-ui/themes';
import { awaitableAverageDefinitions } from '../core/awaitables/averageDefinitions';
import { awaitableTankDefinitions } from '../core/awaitables/tankDefinitions';
import { TankopediaPersistent } from '../stores/tankopediaPersistent';
import { TankCard } from './TankCard';

const tankDefinitions = await fetchTankDefinitions();
const averageDefinitions = await fetchAverageDefinitions();
const [tankDefinitions, averageDefinitions] = await Promise.all([
awaitableTankDefinitions,
awaitableAverageDefinitions,
]);
const tanks = Object.values(tankDefinitions.tanks);
const tankAverages = Object.entries(averageDefinitions.averages).map(
([id, average]) => ({
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { asset, fetchConsumableDefinitions } from '@blitzkit/core';
import { asset } from '@blitzkit/core';
import { ClockIcon, ReloadIcon } from '@radix-ui/react-icons';
import { Flex, Text } from '@radix-ui/themes';
import { awaitableConsumableDefinitions } from '../../core/awaitables/consumableDefinitions';
import { useDelta } from '../../hooks/useDelta';
import { GenericTankComponentButton } from './GenericTankComponentButton';
import type { TankComponentButtonProps } from './TankComponentButton';
Expand All @@ -11,7 +12,7 @@ interface ConsumableButtonProps extends TankComponentButtonProps {
cooldown?: number;
}

const consumableDefinitions = await fetchConsumableDefinitions();
const consumableDefinitions = await awaitableConsumableDefinitions;

export function ConsumableButton({
consumable,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
import { asset, fetchEquipmentDefinitions } from '@blitzkit/core';
import { asset } from '@blitzkit/core';
import { awaitableEquipmentDefinitions } from '../../core/awaitables/equipmentDefinitions';
import { GenericTankComponentButton } from './GenericTankComponentButton';
import type { TankComponentButtonProps } from './TankComponentButton';

interface EquipmentButtonProps extends TankComponentButtonProps {
equipment: number;
}

const equipmentDefinitions = await fetchEquipmentDefinitions();
const equipmentDefinitions = await awaitableEquipmentDefinitions;

export function EquipmentButton({ equipment, ...props }: EquipmentButtonProps) {
return (
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
import { asset, fetchProvisionDefinitions } from '@blitzkit/core';
import { asset } from '@blitzkit/core';
import { awaitableProvisionDefinitions } from '../../core/awaitables/provisionDefinitions';
import { GenericTankComponentButton } from './GenericTankComponentButton';
import type { TankComponentButtonProps } from './TankComponentButton';

interface ProvisionButtonProps extends TankComponentButtonProps {
provision: number;
}

const provisionDefinitions = await fetchProvisionDefinitions();
const provisionDefinitions = await awaitableProvisionDefinitions;

export function ProvisionButton({ provision, ...props }: ProvisionButtonProps) {
return (
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
import {
fetchAverageDefinitions,
fetchTankDefinitions,
formatCompact,
TANK_CLASSES,
TankClass,
Expand All @@ -10,14 +8,19 @@ import {
import strings from '@blitzkit/core/lang/en-US.json';
import { useStore } from '@nanostores/react';
import { Box, Flex, Heading } from '@radix-ui/themes';
import { awaitableAverageDefinitions } from '../../../../core/awaitables/averageDefinitions';
import { awaitableTankDefinitions } from '../../../../core/awaitables/tankDefinitions';
import { filterTank } from '../../../../core/blitzkit/filterTank';
import { useAveragesExclusionRatio } from '../../../../hooks/useAveragesExclusionRatio';
import { $tankFilters } from '../../../../stores/tankFilters';
import { TankPerformanceEphemeral } from '../../../../stores/tankPerformanceEphemeral';
import { ThemedBar } from '../../../Nivo/ThemedBar';

const averageDefinitions = await fetchAverageDefinitions();
const tankDefinitions = await fetchTankDefinitions();
const [tankDefinitions, averageDefinitions] = await Promise.all([
awaitableTankDefinitions,
awaitableAverageDefinitions,
]);

const averageDefinitionsArray = Object.entries(averageDefinitions.averages);

export function PlayersByTierAndClass() {
Expand Down
14 changes: 7 additions & 7 deletions packages/website/src/components/Performance/PerformanceInfo.tsx
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
import {
fetchAverageDefinitions,
fetchDiscoveredIdsDefinitions,
formatCompact,
} from '@blitzkit/core';
import { formatCompact } from '@blitzkit/core';
import { InfoCircledIcon } from '@radix-ui/react-icons';
import { Callout, Flex } from '@radix-ui/themes';
import { awaitableAverageDefinitions } from '../../core/awaitables/averageDefinitions';
import { awaitableDiscoveredIdsDefinitions } from '../../core/awaitables/discoveredIdsDefinitions';
import type { MaybeSkeletonComponentProps } from '../../types/maybeSkeletonComponentProps';
import { InlineSkeleton } from '../InlineSkeleton';

const discoveredIdsDefinitions = await fetchDiscoveredIdsDefinitions();
const averageDefinitions = await fetchAverageDefinitions();
const [discoveredIdsDefinitions, averageDefinitions] = await Promise.all([
awaitableDiscoveredIdsDefinitions,
awaitableAverageDefinitions,
]);

export function PerformanceInfo({ skeleton }: MaybeSkeletonComponentProps) {
const samples = formatCompact(Math.round(discoveredIdsDefinitions.count));
Expand Down
9 changes: 3 additions & 6 deletions packages/website/src/components/Performance/TankRow.tsx
Original file line number Diff line number Diff line change
@@ -1,10 +1,7 @@
import {
TankDefinition,
fetchAverageDefinitions,
formatCompact,
} from '@blitzkit/core';
import { TankDefinition, formatCompact } from '@blitzkit/core';
import { Table } from '@radix-ui/themes';
import { memo } from 'react';
import { awaitableAverageDefinitions } from '../../core/awaitables/averageDefinitions';
import { useAveragesExclusionRatio } from '../../hooks/useAveragesExclusionRatio';
import { TankPerformanceEphemeral } from '../../stores/tankPerformanceEphemeral';
import { TankRowHeaderCell } from '../TankRowHeaderCell';
Expand All @@ -13,7 +10,7 @@ interface TankRowProps {
tank: TankDefinition;
}

const averageDefinitions = await fetchAverageDefinitions();
const averageDefinitions = await awaitableAverageDefinitions;

export const TankRow = memo<TankRowProps>(
({ tank }) => {
Expand Down
20 changes: 12 additions & 8 deletions packages/website/src/components/Performance/Tanks.tsx
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import { fetchAverageDefinitions, fetchTankDefinitions } from '@blitzkit/core';
import { useStore } from '@nanostores/react';
import { Table } from '@radix-ui/themes';
import { times } from 'lodash-es';
import { Fragment, Suspense, useEffect, useMemo, useState } from 'react';
import { awaitableAverageDefinitions } from '../../core/awaitables/averageDefinitions';
import { awaitableTankDefinitions } from '../../core/awaitables/tankDefinitions';
import { filterTank } from '../../core/blitzkit/filterTank';
import { $tankFilters } from '../../stores/tankFilters';
import { TankPerformanceEphemeral } from '../../stores/tankPerformanceEphemeral';
Expand All @@ -15,13 +16,16 @@ import { Total } from './Total';
const PREVIEW_COUNT = 10;
const DEFAULT_LOADED_ROWS = 25;

const tankDefinitions = await fetchTankDefinitions();
const averageDefinitionsArray = await fetchAverageDefinitions().then(
({ averages }) =>
Object.entries(averages).map(([id, average]) => ({
id: Number(id),
...average,
})),
const [tankDefinitions, averageDefinitions] = await Promise.all([
awaitableTankDefinitions,
awaitableAverageDefinitions,
]);

const averageDefinitionsArray = Object.entries(averageDefinitions.averages).map(
([id, average]) => ({
id: Number(id),
...average,
}),
);

export function Tanks({ skeleton }: MaybeSkeletonComponentProps) {
Expand Down
4 changes: 2 additions & 2 deletions packages/website/src/components/Performance/Total.tsx
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import {
AverageDefinitionsEntry,
fetchAverageDefinitions,
formatCompact,
type BlitzkitStats,
} from '@blitzkit/core';
import { Table } from '@radix-ui/themes';
import { memo, useCallback } from 'react';
import { awaitableAverageDefinitions } from '../../core/awaitables/averageDefinitions';
import { useAveragesExclusionRatio } from '../../hooks/useAveragesExclusionRatio';
import { TankPerformanceEphemeral } from '../../stores/tankPerformanceEphemeral';
import { StickyRowHeaderCell } from '../StickyRowHeaderCell';
Expand All @@ -18,7 +18,7 @@ interface TotalProps {
tanks: AverageDefinitionsEntryWithId[];
}

const averageDefinitions = await fetchAverageDefinitions();
const averageDefinitions = await awaitableAverageDefinitions;

export const Total = memo<TotalProps>(
({ tanks }) => {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import {
fetchModelDefinitions,
normalizeBoundingBox,
resolveDpm,
unionBoundingBox,
type TankDefinition,
} from '@blitzkit/core';
import { useStore } from '@nanostores/react';
import { useMemo } from 'react';
import { awaitableModelDefinitions } from '../../../core/awaitables/modelDefinitions';
import { resolveReload } from '../../../core/blitzkit/resolveReload';
import { $tankopediaSort } from '../../../stores/tankopediaSort';
import { TankCard } from '../../TankCard';
Expand All @@ -16,7 +16,7 @@ interface TankSearchCardProps {
onSelect?: (tank: TankDefinition) => void;
}

const modelDefinitions = await fetchModelDefinitions();
const modelDefinitions = await awaitableModelDefinitions;

export function TankSearchCard({ tank, onSelect }: TankSearchCardProps) {
const tankopediaSort = useStore($tankopediaSort);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import {
asset,
fetchGameDefinitions,
TANK_CLASSES,
TankType,
TIER_ROMAN_NUMERALS,
Expand All @@ -9,6 +8,7 @@ import { useStore } from '@nanostores/react';
import { ReloadIcon } from '@radix-ui/react-icons';
import { Box, Flex, IconButton, Text } from '@radix-ui/themes';
import { times } from 'lodash-es';
import { awaitableGameDefinitions } from '../../../core/awaitables/gameDefinitions';
import { $tankFilters, initialTankFilters } from '../../../stores/tankFilters';
import {
$tankopediaSort,
Expand All @@ -27,7 +27,7 @@ interface FilterControlProps {
compact?: boolean;
}

const gameDefinitions = await fetchGameDefinitions();
const gameDefinitions = await awaitableGameDefinitions;

export function FilterControl({ compact }: FilterControlProps) {
const tankFilters = useStore($tankFilters);
Expand Down
Loading

0 comments on commit 74e85f8

Please sign in to comment.