diff --git a/packages/website/src/components/Compare/Body.tsx b/packages/website/src/components/Compare/Body.tsx index 9ee4fbfce..814d5f798 100644 --- a/packages/website/src/components/Compare/Body.tsx +++ b/packages/website/src/components/Compare/Body.tsx @@ -1,11 +1,11 @@ -import { asset } from '@blitzkit/core'; -import { Flex, Heading, IconButton, Table } from '@radix-ui/themes'; -import type { TankCharacteristics } from '../../core/blitzkit/tankCharacteristics'; -import { useLocale } from '../../hooks/useLocale'; -import { CompareEphemeral } from '../../stores/compareEphemeral'; -import { StickyColumnHeaderCell } from '../StickyColumnHeaderCell'; -import { CompareRow } from './CompareRow'; -import { CompareSectionTitle } from './CompareSectionTitle'; +import { asset } from "@blitzkit/core"; +import { Flex, Heading, IconButton, Table } from "@radix-ui/themes"; +import type { TankCharacteristics } from "../../core/blitzkit/tankCharacteristics"; +import { useLocale } from "../../hooks/useLocale"; +import { CompareEphemeral } from "../../stores/compareEphemeral"; +import { StickyColumnHeaderCell } from "../StickyColumnHeaderCell"; +import { CompareRow } from "./CompareRow"; +import { CompareSectionTitle } from "./CompareSectionTitle"; interface BodyProps { stats: TankCharacteristics[]; @@ -14,10 +14,9 @@ interface BodyProps { export function Body({ stats }: BodyProps) { const members = CompareEphemeral.use((state) => state.members); const hasNonRegularGun = members.some( - ({ gun }) => gun.gun_type!.$case !== 'regular', + ({ gun }) => gun.gun_type!.$case !== "regular" ); const { unwrap, strings } = useLocale(); - const mutateCompareEphemeral = CompareEphemeral.useMutation(); return ( <> @@ -35,7 +34,7 @@ export function Body({ stats }: BodyProps) { {gun.shells.map((thisShell, shellIndex) => ( { - mutateCompareEphemeral((draft) => { + CompareEphemeral.mutate((draft) => { draft.members[index].shell = thisShell; }); }} @@ -88,7 +87,7 @@ export function Body({ stats }: BodyProps) { } display={(stats) => stats.shellReload?.toFixed(2) ?? - stats.shellReloads!.map((reload) => reload.toFixed(2)).join(', ') + stats.shellReloads!.map((reload) => reload.toFixed(2)).join(", ") } deltaNominalDisplay={(delta) => delta.toFixed(2)} /> diff --git a/packages/website/src/components/Compare/CompareRow.tsx b/packages/website/src/components/Compare/CompareRow.tsx index af717f5df..37509ff6e 100644 --- a/packages/website/src/components/Compare/CompareRow.tsx +++ b/packages/website/src/components/Compare/CompareRow.tsx @@ -2,21 +2,21 @@ import { CaretLeftIcon, CaretRightIcon, CaretSortIcon, -} from '@radix-ui/react-icons'; -import { Flex, IconButton, Table, Text } from '@radix-ui/themes'; -import { useRef } from 'react'; -import type { TankCharacteristics } from '../../core/blitzkit/tankCharacteristics'; -import { Var } from '../../core/radix/var'; -import { useLocale } from '../../hooks/useLocale'; -import { CompareEphemeral } from '../../stores/compareEphemeral'; -import { ComparePersistent } from '../../stores/comparePersistent'; -import { StickyRowHeaderCell } from '../StickyRowHeaderCell'; +} from "@radix-ui/react-icons"; +import { Flex, IconButton, Table, Text } from "@radix-ui/themes"; +import { useRef } from "react"; +import type { TankCharacteristics } from "../../core/blitzkit/tankCharacteristics"; +import { Var } from "../../core/radix/var"; +import { useLocale } from "../../hooks/useLocale"; +import { CompareEphemeral } from "../../stores/compareEphemeral"; +import { ComparePersistent } from "../../stores/comparePersistent"; +import { StickyRowHeaderCell } from "../StickyRowHeaderCell"; type CompareRowProps = { display?: ( - member: Awaited, + member: Awaited ) => number | string | undefined; - deltaType?: 'higherIsBetter' | 'lowerIsBetter'; + deltaType?: "higherIsBetter" | "lowerIsBetter"; decimals?: number; deltaNominalDisplay?: (delta: number) => string | number; indent?: boolean; @@ -33,7 +33,7 @@ type CompareRowProps = { export function CompareRow({ display, - deltaType = 'higherIsBetter', + deltaType = "higherIsBetter", decimals, deltaNominalDisplay, indent, @@ -41,17 +41,16 @@ export function CompareRow({ ...props }: CompareRowProps) { const { strings } = useLocale(); - const mutateCompareEphemeral = CompareEphemeral.useMutation(); const sorting = CompareEphemeral.use((state) => state.sorting); const deltaMode = ComparePersistent.use((state) => state.deltaMode); const values = stats.map((stat) => - typeof props.value === 'function' + typeof props.value === "function" ? props.value(stat)! - : (stat[props.value] as number), + : (stat[props.value] as number) ); const id = useRef(Math.random()); const name = - typeof props.value === 'string' + typeof props.value === "string" ? strings.website.tools.tankopedia.characteristics.values[props.value] : props.name; @@ -60,21 +59,21 @@ export function CompareRow({ { - mutateCompareEphemeral((draft) => { + CompareEphemeral.mutate((draft) => { draft.members.sort((memberA, memberB) => { const indexA = draft.members.indexOf(memberA); const indexB = draft.members.indexOf(memberB); const valueA = values[indexA]; const valueB = values[indexB]; - return draft.sorting?.direction === 'ascending' && + return draft.sorting?.direction === "ascending" && draft.sorting.by === id.current ? valueA - valueB : valueB - valueA; @@ -83,26 +82,26 @@ export function CompareRow({ draft.sorting = { by: id.current, direction: - draft.sorting?.direction === 'ascending' && + draft.sorting?.direction === "ascending" && draft.sorting.by === id.current - ? 'descending' - : 'ascending', + ? "descending" + : "ascending", }; }); }} > {(sorting === undefined || sorting.by !== id.current) && ( - + )} {sorting?.by === id.current && ( <> - {sorting.direction === 'ascending' && } - {sorting.direction === 'descending' && } + {sorting.direction === "ascending" && } + {sorting.direction === "descending" && } )} - {name} + {name} @@ -110,7 +109,7 @@ export function CompareRow({ const delta = value - values[0]; const deltaPercentage = value / values[0] - 1; const normalizedDeltaPercentage = Math.round( - Math.min(100, Math.abs(deltaPercentage) * 2 * 100 + 25), + Math.min(100, Math.abs(deltaPercentage) * 2 * 100 + 25) ); const resolvedDisplayValue = display ? display(stats[index]) @@ -129,12 +128,12 @@ export function CompareRow({ value === values[0] ? undefined : ( - deltaType === 'higherIsBetter' + deltaType === "higherIsBetter" ? value > values[0] : value < values[0] ) - ? `color-mix(in srgb, ${Var('green-7')} ${normalizedDeltaPercentage}%, ${Var('green-3')})` - : `color-mix(in srgb, ${Var('red-7')} ${normalizedDeltaPercentage}%, ${Var('red-3')})`, + ? `color-mix(in srgb, ${Var("green-7")} ${normalizedDeltaPercentage}%, ${Var("green-3")})` + : `color-mix(in srgb, ${Var("red-7")} ${normalizedDeltaPercentage}%, ${Var("red-3")})`, }} > - + {resolvedDisplayValue} @@ -154,10 +153,10 @@ export function CompareRow({ resolvedDisplayValue !== undefined && values[0] !== undefined && ( <> - {deltaMode === 'absolute' && ( + {deltaMode === "absolute" && ( ( - {`${delta > 0 ? '+' : ''}${ + {`${delta > 0 ? "+" : ""}${ deltaNominalDisplay ? deltaNominalDisplay(delta) : decimals === undefined @@ -168,11 +167,11 @@ export function CompareRow({ )} - {deltaMode === 'percentage' && ( + {deltaMode === "percentage" && ( ( - {`${deltaPercentage > 0 ? '+' : ''}${Math.round( - deltaPercentage * 100, + {`${deltaPercentage > 0 ? "+" : ""}${Math.round( + deltaPercentage * 100 )}%`} ) diff --git a/packages/website/src/components/Compare/CompareTable.tsx b/packages/website/src/components/Compare/CompareTable.tsx index e5a34afdb..637b3dcfa 100644 --- a/packages/website/src/components/Compare/CompareTable.tsx +++ b/packages/website/src/components/Compare/CompareTable.tsx @@ -1,28 +1,28 @@ -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 { useLocale } from '../../hooks/useLocale'; -import { CompareEphemeral } from '../../stores/compareEphemeral'; -import type { EquipmentMatrix } from '../../stores/duel'; -import { BlitzkitButtonGrayIcon } from '../BlitzkitButtonGrayIcon'; -import { ConsumablesManager } from '../ConsumablesManager'; -import { CrewSkillManager } from '../CrewSkillManager'; -import { EquipmentManager } from '../EquipmentManager'; -import { ModuleManager } from '../ModuleManager'; -import { ProvisionsManager } from '../ProvisionsManager'; -import { StickyColumnHeaderCell } from '../StickyColumnHeaderCell'; -import { StickyTableRoot } from '../StickyTableRoot'; -import { Body } from './Body'; -import { InsertionMarker } from './IntersectionMarker'; -import { TankCard } from './TankCard'; +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 { useLocale } from "../../hooks/useLocale"; +import { CompareEphemeral } from "../../stores/compareEphemeral"; +import type { EquipmentMatrix } from "../../stores/duel"; +import { BlitzkitButtonGrayIcon } from "../BlitzkitButtonGrayIcon"; +import { ConsumablesManager } from "../ConsumablesManager"; +import { CrewSkillManager } from "../CrewSkillManager"; +import { EquipmentManager } from "../EquipmentManager"; +import { ModuleManager } from "../ModuleManager"; +import { ProvisionsManager } from "../ProvisionsManager"; +import { StickyColumnHeaderCell } from "../StickyColumnHeaderCell"; +import { StickyTableRoot } from "../StickyTableRoot"; +import { Body } from "./Body"; +import { InsertionMarker } from "./IntersectionMarker"; +import { TankCard } from "./TankCard"; interface CompareTableProps { stats: TankCharacteristics[]; @@ -43,7 +43,6 @@ const [ export function CompareTable({ stats }: CompareTableProps) { const crewSkills = CompareEphemeral.use((state) => state.crewSkills); const members = CompareEphemeral.use((state) => state.members); - const mutateCompareEphemeral = CompareEphemeral.useMutation(); const { unwrap, strings } = useLocale(); return ( @@ -51,20 +50,20 @@ export function CompareTable({ stats }: CompareTableProps) { size="1" variant="surface" style={{ - position: 'absolute', - maxWidth: '100%', - maxHeight: '100%', - height: '100%', + position: "absolute", + maxWidth: "100%", + maxHeight: "100%", + height: "100%", // height: 'calc(100vh - 128px)' }} > - + - + ))} - ), + ) )} @@ -125,7 +124,7 @@ export function CompareTable({ stats }: CompareTableProps) { { - mutateCompareEphemeral((draft) => { + CompareEphemeral.mutate((draft) => { draft.crewSkills = skills; }); }} @@ -135,7 +134,7 @@ export function CompareTable({ stats }: CompareTableProps) {