sub menus

This commit is contained in:
tresabhi committed 2026-10-31 17:43:57 -05:00
1 parent 5df53458fd
commit 23fc2510da
3 files changed
+52 -23

No files matched your search

@@ -1,4 +1,5 @@
.Content { .Content,
.SubContent {
--gutter: var(--space-5); --gutter: var(--space-5);
min-width: min(calc(100dvw - 2 * var(--space-4)), 16rem); min-width: min(calc(100dvw - 2 * var(--space-4)), 16rem);
@@ -13,8 +14,7 @@
display: flex; display: flex;
flex-direction: column; flex-direction: column;
margin-top: var(--space-3); margin: var(--space-4);
margin-right: var(--space-4);
box-shadow: var(--shadow-subtle); box-shadow: var(--shadow-subtle);
border-radius: var(--space-3); border-radius: var(--space-3);
@@ -47,7 +47,8 @@
.Item, .Item,
.CheckboxItem, .CheckboxItem,
.RadioItem { .RadioItem,
.SubTrigger {
position: relative; position: relative;
background-color: var(--gray-3); background-color: var(--gray-3);
@@ -70,8 +71,8 @@
background-color: var(--gray-5); background-color: var(--gray-5);
} }
& + & { &:not(:last-child) {
border-top: var(--space-1) solid var(--gray-2); border-bottom: var(--space-1) solid var(--gray-2);
} }
img, img,
@@ -10,7 +10,7 @@ import { useStrings } from "../../hooks/useStrings";
import { TankFilters } from "../../stores/tankFilters"; import { TankFilters } from "../../stores/tankFilters";
import type { MaybeSkeletonComponentProps } from "../../types/maybeSkeletonComponentProps"; import type { MaybeSkeletonComponentProps } from "../../types/maybeSkeletonComponentProps";
import { Flex } from "../Flex"; import { Flex } from "../Flex";
import { Sort } from "../TankSearch/components/Sort"; import { TankSearchSort } from "../TankSearchSort";
import { TextField } from "../TextField"; import { TextField } from "../TextField";
type SearchBarProps = MaybeSkeletonComponentProps & { type SearchBarProps = MaybeSkeletonComponentProps & {
@@ -74,7 +74,7 @@ export function TankSearchBar({
<MagnifyingGlassIcon /> <MagnifyingGlassIcon />
</TextField> </TextField>
<Sort /> <TankSearchSort />
</Flex> </Flex>
); );
} }
@@ -1,12 +1,16 @@
import { CaretDownIcon } from "@radix-ui/react-icons"; import {
import { characteristicsGroups } from "../../../config/characteristicsGroups"; CaretDownIcon,
import { useStrings } from "../../../hooks/useStrings"; CaretRightIcon,
import { TankopediaSortDirection } from "../../../stores/tankopediaPersistent"; DotFilledIcon,
import { TankSort } from "../../../stores/tankopediaSort"; } from "@radix-ui/react-icons";
import { sortableCharacteristics } from "../../../tankopedia/sortableCharacteristics"; import { characteristicsGroups } from "../config/characteristicsGroups";
import type { CharacteristicName } from "../../../types/characteristics"; import { useStrings } from "../hooks/useStrings";
import { Button } from "../../Button"; import { TankopediaSortDirection } from "../stores/tankopediaPersistent";
import { DropdownMenu } from "../../DropdownMenu"; import { TankSort } from "../stores/tankopediaSort";
import { sortableCharacteristics } from "../tankopedia/sortableCharacteristics";
import type { CharacteristicName } from "../types/characteristics";
import { Button } from "./Button";
import { DropdownMenu } from "./DropdownMenu";
interface ItemProps { interface ItemProps {
by: CharacteristicName; by: CharacteristicName;
@@ -25,12 +29,16 @@ function Item({ by }: ItemProps) {
}); });
}} }}
> >
<DropdownMenu.ItemIndicator>
<DotFilledIcon />
</DropdownMenu.ItemIndicator>
{strings.tanks.characteristics.items[by]} {strings.tanks.characteristics.items[by]}
</DropdownMenu.CheckboxItem> </DropdownMenu.CheckboxItem>
); );
} }
export function Sort() { export function TankSearchSort() {
const by = TankSort.use((state) => state.by); const by = TankSort.use((state) => state.by);
const direction = TankSort.use((state) => state.direction); const direction = TankSort.use((state) => state.direction);
const strings = useStrings(); const strings = useStrings();
@@ -46,7 +54,7 @@ export function Sort() {
<DropdownMenu.Content align="end"> <DropdownMenu.Content align="end">
<DropdownMenu.Label> <DropdownMenu.Label>
{strings.website.common.tank_search.sort.direction.label} {strings.website.common.tank_search.sort.by}
</DropdownMenu.Label> </DropdownMenu.Label>
<DropdownMenu.CheckboxItem <DropdownMenu.CheckboxItem
@@ -57,6 +65,10 @@ export function Sort() {
}); });
}} }}
> >
<DropdownMenu.ItemIndicator>
<DotFilledIcon />
</DropdownMenu.ItemIndicator>
{strings.website.common.tank_search.sort.none} {strings.website.common.tank_search.sort.none}
</DropdownMenu.CheckboxItem> </DropdownMenu.CheckboxItem>
@@ -76,6 +88,8 @@ export function Sort() {
> >
)[group.name] )[group.name]
} }
<CaretRightIcon />
</DropdownMenu.SubTrigger> </DropdownMenu.SubTrigger>
<DropdownMenu.SubContent> <DropdownMenu.SubContent>
@@ -93,8 +107,10 @@ export function Sort() {
{strings.website.common.tank_search.sort.direction.label} {strings.website.common.tank_search.sort.direction.label}
</DropdownMenu.Label> </DropdownMenu.Label>
<DropdownMenu.RadioGroup <DropdownMenu.RadioGroup
value={direction} value={`${direction}`}
onValueChange={(value) => { onValueChange={(_value) => {
const value = Number(_value);
if ( if (
value !== TankopediaSortDirection.Ascending && value !== TankopediaSortDirection.Ascending &&
value !== TankopediaSortDirection.Descending value !== TankopediaSortDirection.Descending
@@ -107,10 +123,22 @@ export function Sort() {
}); });
}} }}
> >
<DropdownMenu.RadioItem value={TankopediaSortDirection.Ascending}> <DropdownMenu.RadioItem
value={`${TankopediaSortDirection.Ascending}`}
>
<DropdownMenu.ItemIndicator>
<DotFilledIcon />
</DropdownMenu.ItemIndicator>
{strings.website.common.tank_search.sort.direction.ascending} {strings.website.common.tank_search.sort.direction.ascending}
</DropdownMenu.RadioItem> </DropdownMenu.RadioItem>
<DropdownMenu.RadioItem value={TankopediaSortDirection.Descending}> <DropdownMenu.RadioItem
value={`${TankopediaSortDirection.Descending}`}
>
<DropdownMenu.ItemIndicator>
<DotFilledIcon />
</DropdownMenu.ItemIndicator>
{strings.website.common.tank_search.sort.direction.descending} {strings.website.common.tank_search.sort.direction.descending}
</DropdownMenu.RadioItem> </DropdownMenu.RadioItem>
</DropdownMenu.RadioGroup> </DropdownMenu.RadioGroup>