/* Global search — GET /search/fetch. Deep-links use live UUIDs so the target screen can resolve the row. Debounced so we don't fire on every keystroke. */ import { useEffect, useRef, useState } from 'react' import { useNavigate } from 'react-router-dom' import { useQuery } from '@tanstack/react-query' import { Avatar, Icon } from '../ui/primitives' import { qk } from '../lib/queryKeys' import * as searchApi from '../api/search' export default function GlobalSearch({ inputRef }) { const navigate = useNavigate() const [q, setQ] = useState('') const [debounced, setDebounced] = useState('') const [open, setOpen] = useState(false) const boxRef = useRef(null) useEffect(() => { const t = setTimeout(() => setDebounced(q.trim()), 250) return () => clearTimeout(t) }, [q]) const query = useQuery({ queryKey: qk.search.query({ q: debounced }), queryFn: async () => { const res = await searchApi.fetch({ q: debounced, limit: 4 }) return res?.data ?? { jobs: [], candidates: [], managers: [] } }, enabled: debounced.length > 0, }) const results = debounced ? (query.data ?? { jobs: [], candidates: [], managers: [] }) : null const jobs = results?.jobs ?? [] const candidates = results?.candidates ?? [] const managers = results?.managers ?? [] const empty = results && !query.isPending && !jobs.length && !candidates.length && !managers.length function go(path, state) { setQ('') setOpen(false) navigate(path, { state }) } return (