import { useCallback, useEffect, useRef, useState } from 'react' import { useNavigate } from 'react-router-dom' import { FileText, Zap, PenTool, LayoutGrid, Search, Loader2 } from 'lucide-react' import { searchDocuments, type DocumentRecord } from '../../lib/documents' import { formatRelativeTime, getActivityDate, typeColors, typeLabels } from '../../lib/documentUtils' import type { CreateType } from '../../data/createData' const typeIcons: Record = { silo: FileText, shed: Zap, sketch: PenTool, stead: LayoutGrid, } interface SearchOverlayProps { open: boolean onClose: () => void initialQuery?: string } export default function SearchOverlay({ open, onClose, initialQuery = '' }: SearchOverlayProps) { const [query, setQuery] = useState(initialQuery) const [results, setResults] = useState([]) const [loading, setLoading] = useState(false) const [error, setError] = useState(null) const inputRef = useRef(null) const navigate = useNavigate() useEffect(() => { if (open) { setQuery(initialQuery) setTimeout(() => inputRef.current?.focus(), 0) } }, [open, initialQuery]) const runSearch = useCallback(async (value: string) => { if (!value.trim()) { setResults([]) setError(null) return } setLoading(true) setError(null) try { const docs = await searchDocuments(value) setResults(docs) } catch { setError('Could not search. Is MongoDB running?') setResults([]) } finally { setLoading(false) } }, []) useEffect(() => { if (!open) return const timer = setTimeout(() => void runSearch(query), 250) return () => clearTimeout(timer) }, [query, open, runSearch]) if (!open) return null return (
) })}
) }