'use client'; import { Plus, X } from 'lucide-react'; import { useRouter } from 'next/navigation'; import { useEffect, useState } from 'react'; import { clientApi } from '@/lib/client-api'; import { routes } from '@/lib/site'; import type { Suggestion } from '@/lib/types'; /** Add/remove companies on /company/compare via `/search/suggest` (2–6 slugs in the URL). */ export function ComparePicker({ slugs, names }: { slugs: string[]; names: Record }) { const router = useRouter(); const [q, setQ] = useState(''); const [items, setItems] = useState([]); useEffect(() => { if (q.trim().length < 1) { setItems([]); return; } const ctrl = new AbortController(); const t = setTimeout(() => { clientApi .suggest(q.trim(), ctrl.signal) .then((r) => setItems(r.items.filter((s) => s.kind === 'company'))) .catch(() => setItems([])); }, 120); return () => { clearTimeout(t); ctrl.abort(); }; }, [q]); const slugOf = (href: string) => href.replace(/^\/company\//, '').split('?')[0] ?? ''; const add = (s: string) => { if (!s || slugs.includes(s) || slugs.length >= 6) return; router.push(routes.compare([...slugs, s])); setQ(''); setItems([]); }; const remove = (s: string) => router.push(routes.compare(slugs.filter((x) => x !== s))); return (
{slugs.map((s) => ( {names[s] ?? s} ))} {slugs.length < 6 && (
setQ(e.target.value)} placeholder="Add company…" className="h-10 w-40 bg-transparent text-sm focus:outline-none" autoComplete="off" data-compare-input onKeyDown={(e) => e.key === 'Enter' && items[0] && add(slugOf(items[0].href))} /> {items.length > 0 && (
    {items.slice(0, 8).map((s) => (
  • ))}
)}
)}
); }