'use client'; import { useEffect, useState } from 'react'; import Link from 'next/link'; import { countryCodeToFlag, formatMinutes } from '@/lib/steam'; interface Player { steamid: string; current_name: string; current_country: string | null; matched_name: string | null; total_minutes: number | null; } export default function PlayerSearch() { const [q, setQ] = useState(''); const [sort, setSort] = useState<'recent' | 'name' | 'playtime'>('recent'); const [players, setPlayers] = useState([]); const [loading, setLoading] = useState(true); useEffect(() => { const handle = setTimeout(async () => { setLoading(true); const params = new URLSearchParams({ q, sort }); const res = await fetch(`/api/players?${params.toString()}`); const data = await res.json(); setPlayers(data.players); setLoading(false); }, 250); // debounce so we're not hitting the DB on every keystroke return () => clearTimeout(handle); }, [q, sort]); return (
setQ(e.target.value)} className="flex-1 bg-base-panel border border-base-border rounded-lg px-4 py-3 text-ink placeholder:text-ink-faint focus:border-accent/50 transition-colors" />
{loading ? (
loading…
) : players.length === 0 ? (
No players found.
) : ( players.map((p) => (
{countryCodeToFlag(p.current_country)}
{p.current_name}
{p.matched_name && p.matched_name !== p.current_name && (
previously: {p.matched_name}
)}
{formatMinutes(p.total_minutes)} {p.steamid}
)) )}
); }