fix: cleaner clear button

This commit is contained in:
tresabhi committed 2025-04-16 23:34:30 -05:00
1 parent e20d65d218
commit bdc013b4c8
2 files changed
+57 -40

No files matched your search

+1 -1
View File
@@ -756,7 +756,7 @@
}, },
"tank_search": { "tank_search": {
"clear_filters": "Clear", "clear_filters": "Clear filters",
"search_bar_hint": "Search tanks...", "search_bar_hint": "Search tanks...",
"recent": "Recently viewed", "recent": "Recently viewed",
"select_all": "Select all", "select_all": "Select all",
@@ -6,17 +6,16 @@ import {
TIER_ROMAN_NUMERALS, TIER_ROMAN_NUMERALS,
} from '@blitzkit/core'; } from '@blitzkit/core';
import { useStore } from '@nanostores/react'; import { useStore } from '@nanostores/react';
import { ReloadIcon } from '@radix-ui/react-icons';
import { import {
Box, Box,
Button,
Flex, Flex,
IconButton, IconButton,
Inset, Inset,
Link,
Popover, Popover,
Text, Text,
} from '@radix-ui/themes'; } from '@radix-ui/themes';
import { times } from 'lodash-es'; import { isEqual, times } from 'lodash-es';
import { awaitableGameDefinitions } from '../../../core/awaitables/gameDefinitions'; import { awaitableGameDefinitions } from '../../../core/awaitables/gameDefinitions';
import { Var } from '../../../core/radix/var'; import { Var } from '../../../core/radix/var';
import { useLocale } from '../../../hooks/useLocale'; import { useLocale } from '../../../hooks/useLocale';
@@ -121,8 +120,10 @@ function ShellFilter({ index, premium }: { index: number; premium?: boolean }) {
export function FilterControl({ compact }: FilterControlProps) { export function FilterControl({ compact }: FilterControlProps) {
const tankFilters = useStore($tankFilters); const tankFilters = useStore($tankFilters);
const { strings } = useLocale(); const { strings } = useLocale();
const clearable = !isEqual(tankFilters, initialTankFilters);
return ( return (
<Flex direction="column" align="center">
<Flex <Flex
height="fit-content" height="fit-content"
gap="2" gap="2"
@@ -130,11 +131,14 @@ export function FilterControl({ compact }: FilterControlProps) {
justify="center" justify="center"
> >
<Flex <Flex
flexShrink="0"
direction={compact ? 'row' : { initial: 'row', md: 'column' }} direction={compact ? 'row' : { initial: 'row', md: 'column' }}
overflow="hidden" overflow="hidden"
style={{ borderRadius: 'var(--radius-5)' }} style={{ borderRadius: 'var(--radius-5)' }}
> >
<Flex direction={compact ? 'column' : { md: 'row', initial: 'column' }}> <Flex
direction={compact ? 'column' : { md: 'row', initial: 'column' }}
>
{times(5, (index) => { {times(5, (index) => {
const tier = index + 1; const tier = index + 1;
const selected = tankFilters.tiers?.includes(tier); const selected = tankFilters.tiers?.includes(tier);
@@ -153,7 +157,10 @@ export function FilterControl({ compact }: FilterControlProps) {
tankFilters.tiers.filter((t) => t !== tier), tankFilters.tiers.filter((t) => t !== tier),
); );
} else { } else {
$tankFilters.setKey('tiers', [...tankFilters.tiers, tier]); $tankFilters.setKey('tiers', [
...tankFilters.tiers,
tier,
]);
} }
}} }}
> >
@@ -171,7 +178,9 @@ export function FilterControl({ compact }: FilterControlProps) {
}} }}
/> />
<Flex direction={compact ? 'column' : { md: 'row', initial: 'column' }}> <Flex
direction={compact ? 'column' : { md: 'row', initial: 'column' }}
>
{times(5, (index) => { {times(5, (index) => {
const tier = index + 6; const tier = index + 6;
const selected = tankFilters.tiers?.includes(tier); const selected = tankFilters.tiers?.includes(tier);
@@ -190,7 +199,10 @@ export function FilterControl({ compact }: FilterControlProps) {
tankFilters.tiers.filter((t) => t !== tier), tankFilters.tiers.filter((t) => t !== tier),
); );
} else { } else {
$tankFilters.setKey('tiers', [...tankFilters.tiers, tier]); $tankFilters.setKey('tiers', [
...tankFilters.tiers,
tier,
]);
} }
}} }}
> >
@@ -202,11 +214,14 @@ export function FilterControl({ compact }: FilterControlProps) {
</Flex> </Flex>
<Flex <Flex
flexShrink="0"
direction={compact ? 'row' : { initial: 'row', md: 'column' }} direction={compact ? 'row' : { initial: 'row', md: 'column' }}
overflow="hidden" overflow="hidden"
style={{ borderRadius: 'var(--radius-5)' }} style={{ borderRadius: 'var(--radius-5)' }}
> >
<Flex direction={compact ? 'column' : { md: 'row', initial: 'column' }}> <Flex
direction={compact ? 'column' : { md: 'row', initial: 'column' }}
>
{gameDefinitions.nations {gameDefinitions.nations
.slice(0, Math.ceil(gameDefinitions.nations.length / 2)) .slice(0, Math.ceil(gameDefinitions.nations.length / 2))
.map((nation) => { .map((nation) => {
@@ -250,7 +265,9 @@ export function FilterControl({ compact }: FilterControlProps) {
}} }}
/> />
<Flex direction={compact ? 'column' : { md: 'row', initial: 'column' }}> <Flex
direction={compact ? 'column' : { md: 'row', initial: 'column' }}
>
{gameDefinitions.nations {gameDefinitions.nations
.slice(Math.ceil(gameDefinitions.nations.length / 2)) .slice(Math.ceil(gameDefinitions.nations.length / 2))
.map((nation) => { .map((nation) => {
@@ -366,7 +383,9 @@ export function FilterControl({ compact }: FilterControlProps) {
} }
radius="none" radius="none"
color={ color={
tankFilters.gunType.includes('auto_loader') ? undefined : 'gray' tankFilters.gunType.includes('auto_loader')
? undefined
: 'gray'
} }
highContrast highContrast
onClick={() => { onClick={() => {
@@ -387,7 +406,9 @@ export function FilterControl({ compact }: FilterControlProps) {
</IconButton> </IconButton>
<IconButton <IconButton
variant={ variant={
tankFilters.gunType.includes('auto_reloader') ? 'solid' : 'soft' tankFilters.gunType.includes('auto_reloader')
? 'solid'
: 'soft'
} }
radius="none" radius="none"
color={ color={
@@ -414,18 +435,15 @@ export function FilterControl({ compact }: FilterControlProps) {
</IconButton> </IconButton>
</Flex> </Flex>
<Box display={{ initial: 'none', md: 'block' }}> <Flex
<Button overflow="hidden"
color="red" style={{ borderRadius: 'var(--radius-full)' }}
onClick={() => { direction={compact ? 'column' : { md: 'row', initial: 'column' }}
$tankFilters.set(initialTankFilters);
$tankopediaSort.set(initialTankopediaSort);
}}
> >
<ReloadIcon /> <ShellFilter index={0} />
{strings.website.common.tank_search.clear_filters} <ShellFilter index={1} premium />
</Button> <ShellFilter index={2} />
</Box> </Flex>
</Flex> </Flex>
<Flex gap="2" align="start"> <Flex gap="2" align="start">
@@ -467,11 +485,15 @@ export function FilterControl({ compact }: FilterControlProps) {
</IconButton> </IconButton>
<IconButton <IconButton
variant={ variant={
tankFilters.types?.includes(TankType.PREMIUM) ? 'solid' : 'soft' tankFilters.types?.includes(TankType.PREMIUM)
? 'solid'
: 'soft'
} }
radius="none" radius="none"
color={ color={
tankFilters.types?.includes(TankType.PREMIUM) ? 'amber' : 'gray' tankFilters.types?.includes(TankType.PREMIUM)
? 'amber'
: 'gray'
} }
highContrast highContrast
onClick={() => { onClick={() => {
@@ -584,30 +606,25 @@ export function FilterControl({ compact }: FilterControlProps) {
/> />
</IconButton> </IconButton>
</Flex> </Flex>
<Flex
overflow="hidden"
style={{ borderRadius: 'var(--radius-full)' }}
direction={compact ? 'column' : { md: 'row', initial: 'column' }}
>
<ShellFilter index={0} />
<ShellFilter index={1} premium />
<ShellFilter index={2} />
</Flex> </Flex>
</Flex> </Flex>
</Flex> </Flex>
<Box display={{ initial: 'block', md: 'none' }} ml="4"> {clearable && (
<IconButton <Link
color="red" color="red"
onClick={() => { underline="always"
mt="4"
href="#"
onClick={(event) => {
event.preventDefault();
$tankFilters.set(initialTankFilters); $tankFilters.set(initialTankFilters);
$tankopediaSort.set(initialTankopediaSort); $tankopediaSort.set(initialTankopediaSort);
}} }}
> >
<ReloadIcon /> {strings.website.common.tank_search.clear_filters}
</IconButton> </Link>
</Box> )}
</Flex> </Flex>
); );
} }