From 38870ca3f79bc0c139ff56499a096497687abcd0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Thu, 25 Jan 2024 12:27:24 -0600 Subject: [PATCH] feat: code split --- .../tankopedia/[id]/components/Configure.tsx | 188 ------------------ .../Configure/components/Consumables.tsx | 60 ++++++ .../Configure/components/Equipments.tsx | 68 +++++++ .../Configure/components/Modules.tsx | 64 ++++++ .../[id]/components/Configure/index.tsx | 31 +++ 5 files changed, 223 insertions(+), 188 deletions(-) delete mode 100644 src/app/tools/tankopedia/[id]/components/Configure.tsx create mode 100644 src/app/tools/tankopedia/[id]/components/Configure/components/Consumables.tsx create mode 100644 src/app/tools/tankopedia/[id]/components/Configure/components/Equipments.tsx create mode 100644 src/app/tools/tankopedia/[id]/components/Configure/components/Modules.tsx create mode 100644 src/app/tools/tankopedia/[id]/components/Configure/index.tsx diff --git a/src/app/tools/tankopedia/[id]/components/Configure.tsx b/src/app/tools/tankopedia/[id]/components/Configure.tsx deleted file mode 100644 index 51c277f8e..000000000 --- a/src/app/tools/tankopedia/[id]/components/Configure.tsx +++ /dev/null @@ -1,188 +0,0 @@ -import { Flex, Heading } from '@radix-ui/themes'; -import { use } from 'react'; -import { ModuleButton } from '../../../../../components/ModuleButton'; -import { checkConsumableInclusivity } from '../../../../../core/blitzkrieg/checkConsumableInclusivity'; -import { consumableDefinitions } from '../../../../../core/blitzkrieg/consumablesDefinitions'; -import { equipmentDefinitions } from '../../../../../core/blitzkrieg/equipmentDefinitions'; -import { TIER_ROMAN_NUMERALS } from '../../../../../core/blitzkrieg/tankDefinitions'; -import { mutateDuel, useDuel } from '../../../../../stores/duel'; -import { - mutateTankopediaTemporary, - useTankopediaTemporary, -} from '../../../../../stores/tankopedia'; - -export function Configure() { - const protagonist = useDuel((state) => state.protagonist!); - const awaitedEquipmentDefinitions = use(equipmentDefinitions); - const awaitedConsumableDefinitions = use(consumableDefinitions); - const equipmentRows = - awaitedEquipmentDefinitions.presets[protagonist.tank.equipment]; - const equipmentMatrix = useTankopediaTemporary( - (state) => state.equipmentMatrix, - ); - const consumables = useTankopediaTemporary((state) => state.consumables); - const consumablesList = Object.values(awaitedConsumableDefinitions).filter( - (consumable) => - checkConsumableInclusivity(consumable, protagonist.tank, protagonist.gun), - ); - - return ( - - Configure - - - - Modules - - - - {protagonist.tank.turrets.map((thisTurret, index) => { - return ( - { - mutateDuel((draft) => { - draft.protagonist!.turret = thisTurret; - draft.protagonist!.gun = thisTurret.guns.at(-1)!; - draft.protagonist!.shell = - thisTurret.guns.at(-1)!.shells[0]; - }); - }} - /> - ); - })} - - - - {protagonist.turret.guns.map((thisGun, index) => { - return ( - { - mutateDuel((draft) => { - draft.protagonist!.gun = thisGun; - draft.protagonist!.shell = thisGun.shells[0]; - }); - }} - /> - ); - })} - - - - - - Equipment - - - {equipmentRows.map((equipmentRow, rowIndex) => ( - - {equipmentRow.map((equipment, columnIndex) => ( - - { - mutateTankopediaTemporary((draft) => { - if (equipmentMatrix[rowIndex][columnIndex] === -1) { - draft.equipmentMatrix[rowIndex][columnIndex] = 0; - } else { - draft.equipmentMatrix[rowIndex][columnIndex] = -1; - } - }); - }} - /> - { - mutateTankopediaTemporary((draft) => { - if (equipmentMatrix[rowIndex][columnIndex] === 1) { - draft.equipmentMatrix[rowIndex][columnIndex] = 0; - } else { - draft.equipmentMatrix[rowIndex][columnIndex] = 1; - } - }); - }} - /> - - ))} - - ))} - - - - - - Consumables (max {protagonist.tank.consumables}) - - - - {consumablesList.map((consumable, index) => { - const selected = consumables.includes(consumable.id); - - return ( - { - mutateTankopediaTemporary((draft) => { - if (selected) { - draft.consumables = draft.consumables.filter( - (id) => id !== consumable.id, - ); - } else { - draft.consumables.push(consumable.id); - } - }); - }} - /> - ); - })} - - - - - {/* - - Camouflage - - - - Consumables - - - - Provisions - */} - - ); -} diff --git a/src/app/tools/tankopedia/[id]/components/Configure/components/Consumables.tsx b/src/app/tools/tankopedia/[id]/components/Configure/components/Consumables.tsx new file mode 100644 index 000000000..f2d24596c --- /dev/null +++ b/src/app/tools/tankopedia/[id]/components/Configure/components/Consumables.tsx @@ -0,0 +1,60 @@ +import { Flex, Heading, Text } from '@radix-ui/themes'; +import { use } from 'react'; +import { ModuleButton } from '../../../../../../../components/ModuleButton'; +import { checkConsumableInclusivity } from '../../../../../../../core/blitzkrieg/checkConsumableInclusivity'; +import { consumableDefinitions } from '../../../../../../../core/blitzkrieg/consumablesDefinitions'; +import { useDuel } from '../../../../../../../stores/duel'; +import { + mutateTankopediaTemporary, + useTankopediaTemporary, +} from '../../../../../../../stores/tankopedia'; + +export function Consumables() { + const protagonist = useDuel((state) => state.protagonist!); + const awaitedConsumableDefinitions = use(consumableDefinitions); + const consumables = useTankopediaTemporary((state) => state.consumables); + const consumablesList = Object.values(awaitedConsumableDefinitions).filter( + (consumable) => + checkConsumableInclusivity(consumable, protagonist.tank, protagonist.gun), + ); + + return ( + + + Consumables{' '} + (max {protagonist.tank.consumables}) + + + + {consumablesList.map((consumable, index) => { + const selected = consumables.includes(consumable.id); + + return ( + { + mutateTankopediaTemporary((draft) => { + if (selected) { + draft.consumables = draft.consumables.filter( + (id) => id !== consumable.id, + ); + } else { + draft.consumables.push(consumable.id); + } + }); + }} + /> + ); + })} + + + ); +} diff --git a/src/app/tools/tankopedia/[id]/components/Configure/components/Equipments.tsx b/src/app/tools/tankopedia/[id]/components/Configure/components/Equipments.tsx new file mode 100644 index 000000000..551bb5dcc --- /dev/null +++ b/src/app/tools/tankopedia/[id]/components/Configure/components/Equipments.tsx @@ -0,0 +1,68 @@ +import { Flex, Heading } from '@radix-ui/themes'; +import { use } from 'react'; +import { ModuleButton } from '../../../../../../../components/ModuleButton'; +import { equipmentDefinitions } from '../../../../../../../core/blitzkrieg/equipmentDefinitions'; +import { useDuel } from '../../../../../../../stores/duel'; +import { + mutateTankopediaTemporary, + useTankopediaTemporary, +} from '../../../../../../../stores/tankopedia'; + +export function Equipments() { + const protagonist = useDuel((state) => state.protagonist!); + const awaitedEquipmentDefinitions = use(equipmentDefinitions); + const equipmentRows = + awaitedEquipmentDefinitions.presets[protagonist.tank.equipment]; + const equipmentMatrix = useTankopediaTemporary( + (state) => state.equipmentMatrix, + ); + + return ( + + Equipments + + + {equipmentRows.map((equipmentRow, rowIndex) => ( + + {equipmentRow.map((equipment, columnIndex) => ( + + { + mutateTankopediaTemporary((draft) => { + if (equipmentMatrix[rowIndex][columnIndex] === -1) { + draft.equipmentMatrix[rowIndex][columnIndex] = 0; + } else { + draft.equipmentMatrix[rowIndex][columnIndex] = -1; + } + }); + }} + /> + { + mutateTankopediaTemporary((draft) => { + if (equipmentMatrix[rowIndex][columnIndex] === 1) { + draft.equipmentMatrix[rowIndex][columnIndex] = 0; + } else { + draft.equipmentMatrix[rowIndex][columnIndex] = 1; + } + }); + }} + /> + + ))} + + ))} + + + ); +} diff --git a/src/app/tools/tankopedia/[id]/components/Configure/components/Modules.tsx b/src/app/tools/tankopedia/[id]/components/Configure/components/Modules.tsx new file mode 100644 index 000000000..d42383c53 --- /dev/null +++ b/src/app/tools/tankopedia/[id]/components/Configure/components/Modules.tsx @@ -0,0 +1,64 @@ +import { Flex, Heading } from '@radix-ui/themes'; +import { ModuleButton } from '../../../../../../../components/ModuleButton'; +import { TIER_ROMAN_NUMERALS } from '../../../../../../../core/blitzkrieg/tankDefinitions'; +import { mutateDuel, useDuel } from '../../../../../../../stores/duel'; + +export function Modules() { + const protagonist = useDuel((state) => state.protagonist!); + + return ( + + Modules + + + + {protagonist.tank.turrets.map((thisTurret, index) => { + return ( + { + mutateDuel((draft) => { + draft.protagonist!.turret = thisTurret; + draft.protagonist!.gun = thisTurret.guns.at(-1)!; + draft.protagonist!.shell = + thisTurret.guns.at(-1)!.shells[0]; + }); + }} + /> + ); + })} + + + + {protagonist.turret.guns.map((thisGun, index) => { + return ( + { + mutateDuel((draft) => { + draft.protagonist!.gun = thisGun; + draft.protagonist!.shell = thisGun.shells[0]; + }); + }} + /> + ); + })} + + + + ); +} diff --git a/src/app/tools/tankopedia/[id]/components/Configure/index.tsx b/src/app/tools/tankopedia/[id]/components/Configure/index.tsx new file mode 100644 index 000000000..57b73e568 --- /dev/null +++ b/src/app/tools/tankopedia/[id]/components/Configure/index.tsx @@ -0,0 +1,31 @@ +import { Flex, Heading } from '@radix-ui/themes'; +import { Consumables } from './components/Consumables'; +import { Equipments } from './components/Equipments'; +import { Modules } from './components/Modules'; + +export function Configure() { + return ( + + Configure + + + + + + + + {/* + + Camouflage + + + + Consumables + + + + Provisions + */} + + ); +}