'use client'; import { InfoCircledIcon, MagnifyingGlassIcon } from '@radix-ui/react-icons'; import { AlertDialog, Button, Card, Flex, Link, Text, TextField, } from '@radix-ui/themes'; import { debounce } from 'lodash'; import { useEffect, useRef, useState } from 'react'; import PageWrapper from '../../../components/PageWrapper'; import { UNLOCALIZED_REGION_NAMES_SHORT } from '../../../constants/regions'; import { authURL } from '../../../core/blitz/authURL'; import { getAccountInfo } from '../../../core/blitz/getAccountInfo'; import getTankStats from '../../../core/blitz/getTankStats'; import { idToRegion } from '../../../core/blitz/idToRegion'; import searchPlayersAcrossRegions, { AccountListWithServer, } from '../../../core/blitz/searchPlayersAcrossRegions'; import { useApp } from '../../../stores/app'; import mutateSession, { SessionTracking, useSession, } from '../../../stores/session'; export default function Page() { const [showSearch, setShowSearch] = useState(false); const [searching, setSearching] = useState(false); const [searchResults, setSearchResults] = useState([]); const [showFurtherVerification, setShowFurtherVerification] = useState(false); const input = useRef(null); const session = useSession(); const login = useApp((state) => state.login); const search = debounce(async () => { if (!input.current) return; setSearchResults(await searchPlayersAcrossRegions(input.current.value, 9)); setSearching(false); }, 500); useEffect(() => { (async () => { if (!session.tracking || !input.current) return; let accountInfo = await getAccountInfo( session.player.region, session.player.id, ); let tankStats = await getTankStats( session.player.region, session.player.id, ); if (accountInfo === null) { if (login?.id === session.player.id) { accountInfo = await getAccountInfo( idToRegion(session.player.id), session.player.id, [], { access_token: login.token }, ); tankStats = await getTankStats( idToRegion(session.player.id), session.player.id, { access_token: login.token }, ); console.log(accountInfo, tankStats); input.current.value = accountInfo.nickname; } else { setShowFurtherVerification(true); } } })(); }, [session.tracking && session.player.id]); return ( {/* omit totally to avoid accessing undefined player */} {showFurtherVerification && ( We need further verification You're trying to track a CC account which have private statistics. Please sign in to verify the ownership of this account. Individual tank statistics won't be available. {login && ( You are currently signed with a different account. )} )} { if (!input.current) return; const sanitized = input.current.value.trim(); if (sanitized.length > 0) { setShowSearch(true); setSearching(true); search(); } else { setShowSearch(false); } }} > {showSearch && ( {searching && ( Searching... )} {!searching && searchResults.length === 0 && ( No players found )} {!searching && searchResults.length > 0 && ( {searchResults.map((player) => ( ))} )} )} ); }