mirror of
https://github.com/blitzkit/blitzkit.git
synced 2026-11-03 16:00:36 +01:00
sub menus
This commit is contained in:
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>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
+43
-15
@@ -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>
|
||||||
Reference in new issue
Block a user