"use client"; import { useState, useEffect, useRef } from "react"; import { Search, X, Clock, MessageSquare } from "lucide-react"; import { useRouter } from "next/navigation"; import { useSessionSearch } from "@/lib/hooks"; export function SearchOverlay() { const [open, setOpen] = useState(false); const [query, setQuery] = useState(""); const inputRef = useRef(null); const router = useRouter(); const { data, isFetching } = useSessionSearch(open ? query : ""); // Cmd+K / Ctrl+K to open useEffect(() => { const handler = (e: KeyboardEvent) => { if ((e.metaKey || e.ctrlKey) && e.key === "k") { e.preventDefault(); setOpen(true); } if (e.key === "Escape") { setOpen(false); setQuery(""); } }; window.addEventListener("keydown", handler); return () => window.removeEventListener("keydown", handler); }, []); useEffect(() => { if (open) inputRef.current?.focus(); }, [open]); const go = (sessionId: string) => { setOpen(false); setQuery(""); router.push("/history/" + sessionId); }; if (!open) return null; return (
{ setOpen(false); setQuery(""); }} >
e.stopPropagation()} >
setQuery(e.target.value)} placeholder="Search all sessions..." className="w-full pl-9 pr-9 py-3 rounded-t-2xl text-[15px] outline-none" style={{ background: "var(--bg-raised)", border: "1px solid var(--border)", color: "var(--text-1)", borderBottom: "none" }} /> {query && ( )}
{query.length < 2 ? (
Type to search across all sessions
) : isFetching ? (
Searching...
) : data?.results?.length ? ( data.results.map((r) => ( )) ) : (
No results for “{query}”
)}
); }