'use client'; import { CaretRightIcon, Cross2Icon, MagnifyingGlassIcon, } from '@radix-ui/react-icons'; import { Button, Card, Flex, Heading, IconButton, Spinner, Text, TextField, } from '@radix-ui/themes'; import { go } from 'fuzzysort'; import { debounce } from 'lodash'; import { useRef, useState } from 'react'; import { Link } from '../components/Link'; import { NAVBAR_HEIGHT } from '../components/Navbar'; import PageWrapper from '../components/PageWrapper'; import { UNLOCALIZED_REGION_NAMES_SHORT } from '../constants/regions'; import searchPlayersAcrossRegions, { AccountListWithServer, } from '../core/blitz/searchPlayersAcrossRegions'; import { TankDefinition, tankDefinitions, tankNames, } from '../core/blitzkit/tankDefinitions'; import { TIER_ROMAN_NUMERALS } from '../core/blitzkit/tankDefinitions/constants'; import { useWideFormat } from '../hooks/useWideFormat'; import { theme } from '../stitches.config'; const DISCRIMINATOR_WIDTH = 32; export default function Page() { const wideFormat = useWideFormat(512); const [showSearch, setShowSearch] = useState(false); const [searching, setSearching] = useState(false); const [searchResults, setSearchResults] = useState(); const search = useRef(null); const performSearch = debounce(async () => { if (!search.current) return; const sanitized = search.current.value.trim(); const awaitedTankDefinitions = await tankDefinitions; const awaitedTankNames = await tankNames; const tanks = go(sanitized, awaitedTankNames, { keys: ['combined'], limit: 6, }); const players = await searchPlayersAcrossRegions(sanitized, 6); setSearchResults({ tanks: tanks.map((tank) => awaitedTankDefinitions[tank.obj.id]), players, }); setSearching(false); }, 500); return ( <>
BlitzKit Everything World of Tanks Blitz
{ if (!search.current) return; const sanitized = search.current.value.trim(); if (sanitized.length > 0) { setShowSearch(true); setSearching(true); performSearch(); } else { setShowSearch(false); } }} onFocus={() => { if (!search.current) return; const sanitized = search.current.value.trim(); setShowSearch(sanitized.length > 0); }} > {showSearch && ( { if (!search.current) return; search.current.value = ''; setShowSearch(false); }} > )} {showSearch && ( {searching && ( )} {!searching && searchResults && ( <> Tankopedia {searchResults.tanks.map((tank) => ( ))} {searchResults.tanks.length === 0 && ( No tanks found )} Players {searchResults.players.map((player) => ( ))} {searchResults.players.length === 0 && ( No players found )} )} )}
{/* hello there! ignore my existence pretty please :) */}
); }