diff --git a/packages/website/src/components/TankSearch/components/FilterControl.tsx b/packages/website/src/components/TankSearch/components/FilterControl.tsx index a459d5dba..a05a0ef19 100644 --- a/packages/website/src/components/TankSearch/components/FilterControl.tsx +++ b/packages/website/src/components/TankSearch/components/FilterControl.tsx @@ -1,10 +1,16 @@ -import { asset, ShellType, TIER_ROMAN_NUMERALS } from "@blitzkit/core"; +import { + asset, + ShellType, + TANK_CLASSES, + TIER_ROMAN_NUMERALS, +} from "@blitzkit/core"; import { TrashIcon } from "@radix-ui/react-icons"; import { Box, Button, DropdownMenu, Flex, Text } from "@radix-ui/themes"; import { times } from "lodash-es"; import { awaitableGameDefinitions } from "../../../core/awaitables/gameDefinitions"; import { useLocale } from "../../../hooks/useLocale"; import { TankFilters } from "../../../stores/tankFilters"; +import { classIcons } from "../../ClassIcon"; const gameDefinitions = await awaitableGameDefinitions; @@ -17,6 +23,7 @@ const shellTypeIcons: Record = { const MAX_NATIONS = 3; const MAX_TIERS = 2; + const TIERS = times(10, (i) => 10 - i); export function FilterControl() { @@ -24,6 +31,7 @@ export function FilterControl() { + ); } @@ -111,6 +119,7 @@ function NationsFilter() { {nations.slice(0, MAX_NATIONS).map((nation, index) => ( 0 ? "-0.5em" : undefined, width: "1.25em", height: "1.25em", @@ -205,3 +214,84 @@ function NationsFilter() { ); } + +function ClassFilter() { + const { strings } = useLocale(); + const rawClasses = TankFilters.use((state) => state.classes); + const classes = rawClasses.length === 0 ? TANK_CLASSES : rawClasses; + + return ( + + + + + + + {TANK_CLASSES.map((tankClass) => { + const selected = rawClasses.includes(tankClass); + const Icon = classIcons[tankClass]; + + return ( + { + event.preventDefault(); + + TankFilters.mutate((draft) => { + if (selected) { + draft.classes = draft.classes.filter( + (c) => c !== tankClass + ); + } else { + draft.classes = [...draft.classes, tankClass]; + } + }); + }} + checked={selected} + key={tankClass} + > + + + {strings.common.tank_class_medium[tankClass]} + + ); + })} + + + + { + event.preventDefault(); + + TankFilters.mutate((draft) => { + draft.classes = []; + }); + }} + > + + Clear + + + + ); +}