"use client"; import { Input } from "components/Input"; import { Combobox, ComboboxResult } from "components/Combobox"; import { useActorTypeahead } from "src/hooks/useActorTypeahead"; import { DotLoader } from "components/utils/DotLoader"; import { theme } from "tailwind.config"; import { AtmosphereAccount } from "components/Icons/AtmosphereAccount"; export const HandleInput = (props: { autoFocus?: boolean; action?: React.ReactNode; leading?: React.ReactNode; className?: string; large?: boolean; compact?: boolean; loading?: boolean; onSubmit?: (handle: string) => void; }) => { let { handleValue, setHandleValue, suggestions, setSuggestions, dropdownOpen, setDropdownOpen, highlighted, setHighlighted, } = useActorTypeahead(); const handleSelect = (handle?: string) => { const selected = handle ?? handleValue; if (!selected) return; setHandleValue(selected); setDropdownOpen(false); setSuggestions([]); setHighlighted(undefined); props.onSubmit?.(selected); }; const handles = suggestions.map((s) => s.handle); return ( { if (!open) { setDropdownOpen(false); setHighlighted(undefined); } }} results={handles} highlighted={highlighted} setHighlighted={setHighlighted} onSelect={() => handleSelect(highlighted)} zIndex={60} sideOffset={4} className="w-(--radix-popover-trigger-width)!" trigger={
{props.leading ?? }
setHandleValue(e.target.value)} onClick={(e) => e.stopPropagation()} onPointerDown={(e) => e.stopPropagation()} onKeyDown={(e) => { if (e.key === "Enter") { e.preventDefault(); // handle Enter here (with the current handleValue) instead of // relying on the Combobox's window listener, which only submits // when a suggestion is highlighted. stopPropagation keeps that // listener from also firing with a stale value. e.stopPropagation(); handleSelect(highlighted); } }} autoComplete="off" disabled={props.loading} /> {props.loading ? ( ) : props.onSubmit ? ( ) : ( props.action )}
} > {suggestions.map((actor) => ( handleSelect(actor.handle)} className=" flex-row! gap-2! leading-snug text-sm" > {actor.avatar ? ( ) : (
)}
{actor.displayName || actor.handle}
{actor.displayName && (
@{actor.handle}
)}
))} ); };