fix: no suspense on shell switching

This commit is contained in:
TrèsAbhi committed 2024-02-22 12:55:38 -06:00
1 parent 83599539b5
commit d81eddba44
3 files changed
+34 -20

No files matched your search

@@ -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 (
<ConfigurationChildWrapper>
+23 -16
View File
@@ -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 () => {
+4 -3
View File
@@ -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),
);
}