mirror of
https://github.com/blitzkit/blitzkit.git
synced 2026-10-25 03:29:51 +01:00
feat: some fixes
This commit is contained in:
1 parent
8bcd74262c
commit
e0e8c3554a
2 files changed
+35
-15
No files matched your search
@@ -0,0 +1,25 @@
|
|||||||
|
import { CaretRightIcon } from '@radix-ui/react-icons';
|
||||||
|
import { Button, Link, TextField } from '@radix-ui/themes';
|
||||||
|
import { TankDefinition } from '../../../../core/blitzkit/tankDefinitions';
|
||||||
|
import { useTankopediaFilters } from '../../../../stores/tankopediaFilters';
|
||||||
|
|
||||||
|
interface QuickLinkProps {
|
||||||
|
topResult?: TankDefinition;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function QuickLink({ topResult }: QuickLinkProps) {
|
||||||
|
const search = useTankopediaFilters((state) => state.search);
|
||||||
|
const searching = useTankopediaFilters((state) => state.searching);
|
||||||
|
|
||||||
|
if (!search || !topResult || searching) return null;
|
||||||
|
|
||||||
|
return (
|
||||||
|
<TextField.Slot>
|
||||||
|
<Link href={`/tools/tankopedia/${topResult.id}`}>
|
||||||
|
<Button variant="ghost">
|
||||||
|
{topResult.name} <CaretRightIcon />
|
||||||
|
</Button>
|
||||||
|
</Link>
|
||||||
|
</TextField.Slot>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
import { CaretRightIcon, MagnifyingGlassIcon } from '@radix-ui/react-icons';
|
import { MagnifyingGlassIcon } from '@radix-ui/react-icons';
|
||||||
import { Button, Flex, Spinner, TextField } from '@radix-ui/themes';
|
import { Flex, Spinner, TextField } from '@radix-ui/themes';
|
||||||
import { debounce } from 'lodash';
|
import { debounce } from 'lodash';
|
||||||
import { useRouter } from 'next/navigation';
|
import { useRouter } from 'next/navigation';
|
||||||
import { KeyboardEventHandler, useCallback, useRef } from 'react';
|
import { KeyboardEventHandler, useCallback, useRef } from 'react';
|
||||||
import { Link } from '../../../../components/Link';
|
|
||||||
import { TankDefinition } from '../../../../core/blitzkit/tankDefinitions';
|
import { TankDefinition } from '../../../../core/blitzkit/tankDefinitions';
|
||||||
import { useTankopediaFilters } from '../../../../stores/tankopediaFilters';
|
import { useTankopediaFilters } from '../../../../stores/tankopediaFilters';
|
||||||
|
import { QuickLink } from './QuickLink';
|
||||||
import { Sort } from './Sort';
|
import { Sort } from './Sort';
|
||||||
|
|
||||||
interface SearchBarProps {
|
interface SearchBarProps {
|
||||||
@@ -16,7 +16,7 @@ export function SearchBar({ topResult }: SearchBarProps) {
|
|||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const input = useRef<HTMLInputElement>(null);
|
const input = useRef<HTMLInputElement>(null);
|
||||||
const searching = useTankopediaFilters((state) => state.searching);
|
const searching = useTankopediaFilters((state) => state.searching);
|
||||||
const search = useCallback(
|
const performSearch = useCallback(
|
||||||
debounce(() => {
|
debounce(() => {
|
||||||
useTankopediaFilters.setState({ searching: false });
|
useTankopediaFilters.setState({ searching: false });
|
||||||
|
|
||||||
@@ -31,8 +31,11 @@ export function SearchBar({ topResult }: SearchBarProps) {
|
|||||||
[],
|
[],
|
||||||
);
|
);
|
||||||
const handleChange = useCallback(() => {
|
const handleChange = useCallback(() => {
|
||||||
useTankopediaFilters.setState({ searching: true });
|
if (!useTankopediaFilters.getState().searching) {
|
||||||
search();
|
useTankopediaFilters.setState({ searching: true });
|
||||||
|
}
|
||||||
|
|
||||||
|
performSearch();
|
||||||
}, []);
|
}, []);
|
||||||
const handleKeyDown = useCallback<KeyboardEventHandler>(
|
const handleKeyDown = useCallback<KeyboardEventHandler>(
|
||||||
(event) => {
|
(event) => {
|
||||||
@@ -58,15 +61,7 @@ export function SearchBar({ topResult }: SearchBarProps) {
|
|||||||
{searching ? <Spinner /> : <MagnifyingGlassIcon />}
|
{searching ? <Spinner /> : <MagnifyingGlassIcon />}
|
||||||
</TextField.Slot>
|
</TextField.Slot>
|
||||||
|
|
||||||
{topResult && !searching && (
|
<QuickLink topResult={topResult} />
|
||||||
<TextField.Slot>
|
|
||||||
<Link href={`/tools/tankopedia/${topResult.id}`}>
|
|
||||||
<Button variant="ghost">
|
|
||||||
{topResult.name} <CaretRightIcon />
|
|
||||||
</Button>
|
|
||||||
</Link>
|
|
||||||
</TextField.Slot>
|
|
||||||
)}
|
|
||||||
</TextField.Root>
|
</TextField.Root>
|
||||||
|
|
||||||
<Sort />
|
<Sort />
|
||||||
|
|||||||
Reference in new issue
Block a user