import { ComponentPlaceholderIcon } from '@radix-ui/react-icons'; import { Button, Flex, Popover, Table } from '@radix-ui/themes'; import { times } from 'lodash'; import { use } from 'react'; import { ConsumablesManager } from '../../../../components/ConsumablesManager'; import { CrewSkillManager } from '../../../../components/CrewSkillManager'; import { EquipmentManager } from '../../../../components/EquipmentManager'; import { ModuleManager } from '../../../../components/ModuleManager'; import { ProvisionsManager } from '../../../../components/ProvisionsManager'; import { StickyColumnHeaderCell } from '../../../../components/StickyColumnHeaderCell'; import { StickyTableRoot } from '../../../../components/StickyTableRoot'; import { asset } from '../../../../core/blitzkit/asset'; import { availableProvisions } from '../../../../core/blitzkit/availableProvisions'; import { checkConsumableProvisionInclusivity } from '../../../../core/blitzkit/checkConsumableProvisionInclusivity'; import { consumableDefinitions } from '../../../../core/blitzkit/consumableDefinitions'; import { equipmentDefinitions } from '../../../../core/blitzkit/equipmentDefinitions'; import { provisionDefinitions } from '../../../../core/blitzkit/provisionDefinitions'; import { skillDefinitions } from '../../../../core/blitzkit/skillDefinitions'; import { TankCharacteristics } from '../../../../core/blitzkit/tankCharacteristics'; import { BlitzkitButtonWatermark } from '../../../../icons/BlitzkitButtonWatermark'; import { theme } from '../../../../stitches.config'; import * as CompareEphemeral from '../../../../stores/compareEphemeral'; import { EquipmentMatrix } from '../../../../stores/duel'; import { permanentSkills } from '../../tankopedia/[id]/components/Characteristics/components/Skills/constants'; import { Body } from './Body'; import { InsertionMarker } from './IntersectionMarker'; import { TankCard } from './TankCard'; interface CompareTableProps { stats: TankCharacteristics[]; } export function CompareTable({ stats }: CompareTableProps) { const crewSkills = CompareEphemeral.use((state) => state.crewSkills); const members = CompareEphemeral.use((state) => state.members); const awaitedSkillDefinitions = use(skillDefinitions); const mutateCompareEphemeral = CompareEphemeral.useMutation(); const awaitedEquipmentDefinitions = use(equipmentDefinitions); const awaitedConsumableDefinitions = use(consumableDefinitions); const awaitedProvisionDefinitions = use(provisionDefinitions); return ( {members.map(({ tank, key }, index) => { return ; })} { mutateCompareEphemeral((draft) => { draft.crewSkills = skills; }); }} /> {members.map( ( { equipmentMatrix, tank, key, provisions, gun, shell, turret, engine, track, consumables, }, index, ) => { const equipmentPreset = awaitedEquipmentDefinitions.presets[tank.equipment]; const provisionsList = availableProvisions( tank, gun, awaitedProvisionDefinitions, ); const consumablesList = Object.values( awaitedConsumableDefinitions, ).filter((consumable) => checkConsumableProvisionInclusivity(consumable, tank, gun), ); return ( { mutateCompareEphemeral((draft) => { draft.members[index] = { ...draft.members[index], ...modules, }; }); }} /> provision.id, )} selected={provisions} disabled={tank.provisions === provisions.length} onChange={(provisions) => { mutateCompareEphemeral((draft) => { draft.members[index].provisions = provisions; }); }} /> { mutateCompareEphemeral((draft) => { draft.members[index].equipmentMatrix = matrix; draft.sorting = undefined; }); }} /> { mutateCompareEphemeral((draft) => { draft.members[index].consumables = consumables; }); }} disabled={tank.consumables === consumables.length} /> ); }, )} ); }