import { useState, useRef, useEffect } from 'react' import { useSearchAbilities } from '../../hooks/useMoves' interface AbilitySelectorProps { label: string selectedId: number | null initialName?: string onChange: (id: number | null, name: string) => void } export function AbilitySelector({ label, selectedId, initialName, onChange, }: AbilitySelectorProps) { const [search, setSearch] = useState(initialName ?? '') const [open, setOpen] = useState(false) const ref = useRef(null) const { data } = useSearchAbilities(search) const abilities = data?.items ?? [] useEffect(() => { function handleClick(e: MouseEvent) { if (ref.current && !ref.current.contains(e.target as Node)) { setOpen(false) } } document.addEventListener('mousedown', handleClick) return () => document.removeEventListener('mousedown', handleClick) }, []) return (
{ setSearch(e.target.value) setOpen(true) if (!e.target.value) onChange(null, '') }} onFocus={() => search && setOpen(true)} placeholder="Search ability..." className="w-full px-2 py-1.5 text-sm border rounded bg-surface-2 border-border-default" /> {open && abilities.length > 0 && ( )}
) }