diff --git a/src/app/tools/tankopedia/[id]/components/Characteristics/components/Provisions.tsx b/src/app/tools/tankopedia/[id]/components/Characteristics/components/Provisions.tsx index ccc5f8ee1..702b3a188 100644 --- a/src/app/tools/tankopedia/[id]/components/Characteristics/components/Provisions.tsx +++ b/src/app/tools/tankopedia/[id]/components/Characteristics/components/Provisions.tsx @@ -2,6 +2,7 @@ import { Flex, Heading } from '@radix-ui/themes'; import { use } from 'react'; import { ProvisionButton } from '../../../../../../../components/ModuleButtons/ProvisionButton'; import { availableProvisions } from '../../../../../../../core/blitzkrieg/availableProvisions'; +import { provisionDefinitions } from '../../../../../../../core/blitzkrieg/provisionDefinitions'; import { useDuel } from '../../../../../../../stores/duel'; import { mutateTankopediaTemporary, @@ -12,7 +13,12 @@ import { ConfigurationChildWrapper } from './ConfigurationChildWrapper'; export function Provisions() { const { tank, gun } = useDuel((state) => state.protagonist!); const provisions = useTankopediaTemporary((state) => state.provisions); - const provisionsList = use(availableProvisions(tank, gun)); + const awaitedProvisionDefinitions = use(provisionDefinitions); + const provisionsList = availableProvisions( + tank, + gun, + awaitedProvisionDefinitions, + ); return ( diff --git a/src/app/tools/tankopedia/[id]/page.tsx b/src/app/tools/tankopedia/[id]/page.tsx index 63d1d324a..df9c1516b 100644 --- a/src/app/tools/tankopedia/[id]/page.tsx +++ b/src/app/tools/tankopedia/[id]/page.tsx @@ -4,6 +4,7 @@ import { Flex } from '@radix-ui/themes'; import { use, useEffect } from 'react'; import PageWrapper from '../../../../components/PageWrapper'; import { availableProvisions } from '../../../../core/blitzkrieg/availableProvisions'; +import { provisionDefinitions } from '../../../../core/blitzkrieg/provisionDefinitions'; import { tankDefinitions } from '../../../../core/blitzkrieg/tankDefinitions'; import { useWideFormat } from '../../../../hooks/useWideFormat'; import { mutateDuel, useDuel } from '../../../../stores/duel'; @@ -23,7 +24,6 @@ export default function Page({ params }: { params: { id: string } }) { const awaitedTankDefinitions = use(tankDefinitions); const tank = awaitedTankDefinitions[id]; const gun = tank.turrets.at(-1)!.guns.at(-1)!; - const provisionsList = use(availableProvisions(tank, gun)); const assigned = useDuel((state) => state.assigned); const wideFormat = useWideFormat(); @@ -41,21 +41,6 @@ export default function Page({ params }: { params: { id: string } }) { draft.antagonist = { ...draft.protagonist }; }); - mutateTankopediaTemporary((draft) => { - draft.model.pose.yaw = 0; - draft.model.pose.pitch = 0; - draft.consumables = []; - draft.provisions = provisionsList - .filter((provision) => provision.crew !== undefined) - .map((provision) => provision.id); - draft.shot = undefined; - draft.equipmentMatrix = [ - [1, -1, -1], - [0, 0, 0], - [0, 0, 0], - ]; - }); - function handleKeyDown(event: KeyboardEvent) { if (document.activeElement instanceof HTMLInputElement) return; @@ -87,6 +72,28 @@ export default function Page({ params }: { params: { id: string } }) { } } + (async () => { + const provisionsList = availableProvisions( + tank, + gun, + await provisionDefinitions, + ); + mutateTankopediaTemporary((draft) => { + draft.model.pose.yaw = 0; + draft.model.pose.pitch = 0; + draft.consumables = []; + draft.provisions = provisionsList + .filter((provision) => provision.crew !== undefined) + .map((provision) => provision.id); + draft.shot = undefined; + draft.equipmentMatrix = [ + [1, -1, -1], + [0, 0, 0], + [0, 0, 0], + ]; + }); + })(); + window.addEventListener('keydown', handleKeyDown); return () => { diff --git a/src/core/blitzkrieg/availableProvisions.ts b/src/core/blitzkrieg/availableProvisions.ts index b60e45f7c..143ad7158 100644 --- a/src/core/blitzkrieg/availableProvisions.ts +++ b/src/core/blitzkrieg/availableProvisions.ts @@ -1,12 +1,13 @@ import { checkConsumableProvisionInclusivity } from './checkConsumableProvisionInclusivity'; -import { provisionDefinitions } from './provisionDefinitions'; +import { ProvisionDefinitions } from './provisionDefinitions'; import { GunDefinition, TankDefinition } from './tankDefinitions'; -export async function availableProvisions( +export function availableProvisions( tank: TankDefinition, gun: GunDefinition, + provisionDefinitions: ProvisionDefinitions, ) { - return Object.values(await provisionDefinitions).filter((provision) => + return Object.values(provisionDefinitions).filter((provision) => checkConsumableProvisionInclusivity(provision, tank, gun), ); }