mirror of
https://github.com/blitzkit/blitzkit.git
synced 2026-10-24 20:19:49 +02:00
feat: filter tooltips
This commit is contained in:
1 parent
da6691928e
commit
2e97ccd40d
2 files changed
+51
-4
No files matched your search
@@ -1,7 +1,7 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import { ReloadIcon } from '@radix-ui/react-icons';
|
import { ReloadIcon } from '@radix-ui/react-icons';
|
||||||
import { Box, Flex, IconButton, Text } from '@radix-ui/themes';
|
import { Box, Flex, IconButton, Text, Tooltip } from '@radix-ui/themes';
|
||||||
import { times } from 'lodash';
|
import { times } from 'lodash';
|
||||||
import { use } from 'react';
|
import { use } from 'react';
|
||||||
import { classIcons } from '../../../../components/ClassIcon';
|
import { classIcons } from '../../../../components/ClassIcon';
|
||||||
@@ -14,6 +14,7 @@ import { asset } from '../../../../core/blitzkit/asset';
|
|||||||
import { gameDefinitions } from '../../../../core/blitzkit/gameDefinitions';
|
import { gameDefinitions } from '../../../../core/blitzkit/gameDefinitions';
|
||||||
import { Tier } from '../../../../core/blitzkit/tankDefinitions';
|
import { Tier } from '../../../../core/blitzkit/tankDefinitions';
|
||||||
import { TIER_ROMAN_NUMERALS } from '../../../../core/blitzkit/tankDefinitions/constants';
|
import { TIER_ROMAN_NUMERALS } from '../../../../core/blitzkit/tankDefinitions/constants';
|
||||||
|
import strings from '../../../../lang/en-US.json';
|
||||||
import * as TankFilters from '../../../../stores/tankFilters';
|
import * as TankFilters from '../../../../stores/tankFilters';
|
||||||
|
|
||||||
interface FilterControlProps {
|
interface FilterControlProps {
|
||||||
@@ -39,6 +40,7 @@ export function FilterControl({ compact }: FilterControlProps) {
|
|||||||
const selected = filters.tiers?.includes(tier);
|
const selected = filters.tiers?.includes(tier);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
<Tooltip key={tier} content={`Tier ${tier}`}>
|
||||||
<IconButton
|
<IconButton
|
||||||
key={tier}
|
key={tier}
|
||||||
variant={selected ? 'solid' : 'soft'}
|
variant={selected ? 'solid' : 'soft'}
|
||||||
@@ -57,6 +59,7 @@ export function FilterControl({ compact }: FilterControlProps) {
|
|||||||
>
|
>
|
||||||
<Text size="2">{TIER_ROMAN_NUMERALS[tier]}</Text>
|
<Text size="2">{TIER_ROMAN_NUMERALS[tier]}</Text>
|
||||||
</IconButton>
|
</IconButton>
|
||||||
|
</Tooltip>
|
||||||
);
|
);
|
||||||
})}
|
})}
|
||||||
</Flex>
|
</Flex>
|
||||||
@@ -66,6 +69,7 @@ export function FilterControl({ compact }: FilterControlProps) {
|
|||||||
const selected = filters.tiers?.includes(tier);
|
const selected = filters.tiers?.includes(tier);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
<Tooltip key={tier} content={`Tier ${tier}`}>
|
||||||
<IconButton
|
<IconButton
|
||||||
key={tier}
|
key={tier}
|
||||||
variant={selected ? 'solid' : 'soft'}
|
variant={selected ? 'solid' : 'soft'}
|
||||||
@@ -84,6 +88,7 @@ export function FilterControl({ compact }: FilterControlProps) {
|
|||||||
>
|
>
|
||||||
<Text size="2">{TIER_ROMAN_NUMERALS[tier]}</Text>
|
<Text size="2">{TIER_ROMAN_NUMERALS[tier]}</Text>
|
||||||
</IconButton>
|
</IconButton>
|
||||||
|
</Tooltip>
|
||||||
);
|
);
|
||||||
})}
|
})}
|
||||||
</Flex>
|
</Flex>
|
||||||
@@ -101,8 +106,15 @@ export function FilterControl({ compact }: FilterControlProps) {
|
|||||||
const selected = filters.nations?.includes(nation);
|
const selected = filters.nations?.includes(nation);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<IconButton
|
<Tooltip
|
||||||
|
content={
|
||||||
|
strings.common.nations[
|
||||||
|
nation as keyof typeof strings.common.nations
|
||||||
|
]
|
||||||
|
}
|
||||||
key={nation}
|
key={nation}
|
||||||
|
>
|
||||||
|
<IconButton
|
||||||
variant={selected ? 'solid' : 'soft'}
|
variant={selected ? 'solid' : 'soft'}
|
||||||
color={selected ? undefined : 'gray'}
|
color={selected ? undefined : 'gray'}
|
||||||
highContrast
|
highContrast
|
||||||
@@ -124,6 +136,7 @@ export function FilterControl({ compact }: FilterControlProps) {
|
|||||||
src={asset(`flags/circle/${nation}.webp`)}
|
src={asset(`flags/circle/${nation}.webp`)}
|
||||||
/>
|
/>
|
||||||
</IconButton>
|
</IconButton>
|
||||||
|
</Tooltip>
|
||||||
);
|
);
|
||||||
})}
|
})}
|
||||||
</Flex>
|
</Flex>
|
||||||
@@ -134,6 +147,14 @@ export function FilterControl({ compact }: FilterControlProps) {
|
|||||||
const selected = filters.nations?.includes(nation);
|
const selected = filters.nations?.includes(nation);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
<Tooltip
|
||||||
|
content={
|
||||||
|
strings.common.nations[
|
||||||
|
nation as keyof typeof strings.common.nations
|
||||||
|
]
|
||||||
|
}
|
||||||
|
key={nation}
|
||||||
|
>
|
||||||
<IconButton
|
<IconButton
|
||||||
key={nation}
|
key={nation}
|
||||||
style={{ flex: 1 }}
|
style={{ flex: 1 }}
|
||||||
@@ -158,6 +179,7 @@ export function FilterControl({ compact }: FilterControlProps) {
|
|||||||
src={asset(`flags/circle/${nation}.webp`)}
|
src={asset(`flags/circle/${nation}.webp`)}
|
||||||
/>
|
/>
|
||||||
</IconButton>
|
</IconButton>
|
||||||
|
</Tooltip>
|
||||||
);
|
);
|
||||||
})}
|
})}
|
||||||
</Flex>
|
</Flex>
|
||||||
@@ -173,8 +195,11 @@ export function FilterControl({ compact }: FilterControlProps) {
|
|||||||
const selected = filters.classes?.includes(tankClass);
|
const selected = filters.classes?.includes(tankClass);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<IconButton
|
<Tooltip
|
||||||
|
content={strings.common.tank_class_medium[tankClass]}
|
||||||
key={tankClass}
|
key={tankClass}
|
||||||
|
>
|
||||||
|
<IconButton
|
||||||
variant={selected ? 'solid' : 'soft'}
|
variant={selected ? 'solid' : 'soft'}
|
||||||
radius="none"
|
radius="none"
|
||||||
color={selected ? undefined : 'gray'}
|
color={selected ? undefined : 'gray'}
|
||||||
@@ -193,6 +218,7 @@ export function FilterControl({ compact }: FilterControlProps) {
|
|||||||
>
|
>
|
||||||
<Icon style={{ width: '1em', height: '1em' }} />
|
<Icon style={{ width: '1em', height: '1em' }} />
|
||||||
</IconButton>
|
</IconButton>
|
||||||
|
</Tooltip>
|
||||||
);
|
);
|
||||||
})}
|
})}
|
||||||
</Flex>
|
</Flex>
|
||||||
@@ -202,6 +228,7 @@ export function FilterControl({ compact }: FilterControlProps) {
|
|||||||
style={{ borderRadius: 'var(--radius-full)' }}
|
style={{ borderRadius: 'var(--radius-full)' }}
|
||||||
direction={compact ? 'column' : { sm: 'row', initial: 'column' }}
|
direction={compact ? 'column' : { sm: 'row', initial: 'column' }}
|
||||||
>
|
>
|
||||||
|
<Tooltip content="Researchable">
|
||||||
<IconButton
|
<IconButton
|
||||||
variant={filters.types?.includes('researchable') ? 'solid' : 'soft'}
|
variant={filters.types?.includes('researchable') ? 'solid' : 'soft'}
|
||||||
radius="none"
|
radius="none"
|
||||||
@@ -210,7 +237,9 @@ export function FilterControl({ compact }: FilterControlProps) {
|
|||||||
onClick={() =>
|
onClick={() =>
|
||||||
mutateTankFilters((draft) => {
|
mutateTankFilters((draft) => {
|
||||||
if (draft.types?.includes('researchable')) {
|
if (draft.types?.includes('researchable')) {
|
||||||
draft.types = draft.types?.filter((t) => t !== 'researchable');
|
draft.types = draft.types?.filter(
|
||||||
|
(t) => t !== 'researchable',
|
||||||
|
);
|
||||||
} else {
|
} else {
|
||||||
draft.types = [...(draft.types ?? []), 'researchable'];
|
draft.types = [...(draft.types ?? []), 'researchable'];
|
||||||
}
|
}
|
||||||
@@ -219,6 +248,8 @@ export function FilterControl({ compact }: FilterControlProps) {
|
|||||||
>
|
>
|
||||||
<ResearchedIcon style={{ width: '1em', height: '1em' }} />
|
<ResearchedIcon style={{ width: '1em', height: '1em' }} />
|
||||||
</IconButton>
|
</IconButton>
|
||||||
|
</Tooltip>
|
||||||
|
<Tooltip content="Premium">
|
||||||
<IconButton
|
<IconButton
|
||||||
variant={filters.types?.includes('premium') ? 'solid' : 'soft'}
|
variant={filters.types?.includes('premium') ? 'solid' : 'soft'}
|
||||||
radius="none"
|
radius="none"
|
||||||
@@ -241,6 +272,8 @@ export function FilterControl({ compact }: FilterControlProps) {
|
|||||||
<ResearchedIcon style={{ width: '1em', height: '1em' }} />
|
<ResearchedIcon style={{ width: '1em', height: '1em' }} />
|
||||||
</Text>
|
</Text>
|
||||||
</IconButton>
|
</IconButton>
|
||||||
|
</Tooltip>
|
||||||
|
<Tooltip content="Collector">
|
||||||
<IconButton
|
<IconButton
|
||||||
variant={filters.types?.includes('collector') ? 'solid' : 'soft'}
|
variant={filters.types?.includes('collector') ? 'solid' : 'soft'}
|
||||||
radius="none"
|
radius="none"
|
||||||
@@ -263,6 +296,7 @@ export function FilterControl({ compact }: FilterControlProps) {
|
|||||||
<ResearchedIcon style={{ width: '1em', height: '1em' }} />
|
<ResearchedIcon style={{ width: '1em', height: '1em' }} />
|
||||||
</Text>
|
</Text>
|
||||||
</IconButton>
|
</IconButton>
|
||||||
|
</Tooltip>
|
||||||
</Flex>
|
</Flex>
|
||||||
|
|
||||||
<Flex
|
<Flex
|
||||||
@@ -270,6 +304,7 @@ export function FilterControl({ compact }: FilterControlProps) {
|
|||||||
style={{ borderRadius: 'var(--radius-full)' }}
|
style={{ borderRadius: 'var(--radius-full)' }}
|
||||||
direction={compact ? 'column' : { sm: 'row', initial: 'column' }}
|
direction={compact ? 'column' : { sm: 'row', initial: 'column' }}
|
||||||
>
|
>
|
||||||
|
<Tooltip content="Include test tank">
|
||||||
<IconButton
|
<IconButton
|
||||||
variant={filters.testing === 'include' ? 'solid' : 'soft'}
|
variant={filters.testing === 'include' ? 'solid' : 'soft'}
|
||||||
radius="none"
|
radius="none"
|
||||||
@@ -285,6 +320,8 @@ export function FilterControl({ compact }: FilterControlProps) {
|
|||||||
style={{ width: '1em', height: '1em', color: 'currentColor' }}
|
style={{ width: '1em', height: '1em', color: 'currentColor' }}
|
||||||
/>
|
/>
|
||||||
</IconButton>
|
</IconButton>
|
||||||
|
</Tooltip>
|
||||||
|
<Tooltip content="Exclude test tank">
|
||||||
<IconButton
|
<IconButton
|
||||||
variant={filters.testing === 'exclude' ? 'solid' : 'soft'}
|
variant={filters.testing === 'exclude' ? 'solid' : 'soft'}
|
||||||
radius="none"
|
radius="none"
|
||||||
@@ -300,6 +337,8 @@ export function FilterControl({ compact }: FilterControlProps) {
|
|||||||
style={{ width: '1em', height: '1em', color: 'currentColor' }}
|
style={{ width: '1em', height: '1em', color: 'currentColor' }}
|
||||||
/>
|
/>
|
||||||
</IconButton>
|
</IconButton>
|
||||||
|
</Tooltip>
|
||||||
|
<Tooltip content="Only test tank">
|
||||||
<IconButton
|
<IconButton
|
||||||
variant={filters.testing === 'only' ? 'solid' : 'soft'}
|
variant={filters.testing === 'only' ? 'solid' : 'soft'}
|
||||||
radius="none"
|
radius="none"
|
||||||
@@ -315,6 +354,7 @@ export function FilterControl({ compact }: FilterControlProps) {
|
|||||||
style={{ width: '1em', height: '1em', color: 'currentColor' }}
|
style={{ width: '1em', height: '1em', color: 'currentColor' }}
|
||||||
/>
|
/>
|
||||||
</IconButton>
|
</IconButton>
|
||||||
|
</Tooltip>
|
||||||
</Flex>
|
</Flex>
|
||||||
|
|
||||||
<Box>
|
<Box>
|
||||||
|
|||||||
@@ -58,6 +58,13 @@
|
|||||||
"AT-SPG": "TD"
|
"AT-SPG": "TD"
|
||||||
},
|
},
|
||||||
|
|
||||||
|
"tank_class_medium": {
|
||||||
|
"lightTank": "Light",
|
||||||
|
"mediumTank": "Medium",
|
||||||
|
"heavyTank": "Heavy",
|
||||||
|
"AT-SPG": "Tank destroyer"
|
||||||
|
},
|
||||||
|
|
||||||
"tree_type": {
|
"tree_type": {
|
||||||
"researchable": "Tech tree",
|
"researchable": "Tech tree",
|
||||||
"premium": "Premium",
|
"premium": "Premium",
|
||||||
|
|||||||
Reference in new issue
Block a user