'use client' import { useState, useEffect, useRef } from 'react' import { useRouter } from 'next/navigation' import { Search, X } from 'lucide-react' import { searchConversations, Session } from '@/utils/api' import { MessageSquare } from 'lucide-react' interface SearchPopupProps { isOpen: boolean onClose: () => void } export default function SearchPopup({ isOpen, onClose }: SearchPopupProps) { const [searchQuery, setSearchQuery] = useState('') const [searchResults, setSearchResults] = useState([]) const [isLoading, setIsLoading] = useState(false) const inputRef = useRef(null) const router = useRouter() useEffect(() => { if (isOpen && inputRef.current) { inputRef.current.focus() } }, [isOpen]) useEffect(() => { const handleEscape = (e: KeyboardEvent) => { if (e.key === 'Escape' && isOpen) { onClose() } } document.addEventListener('keydown', handleEscape) return () => document.removeEventListener('keydown', handleEscape) }, [isOpen, onClose]) const handleSearch = async (query: string) => { if (!query.trim()) { setSearchResults([]) return } setIsLoading(true) try { const results = await searchConversations(query) setSearchResults(results) } catch (error) { console.error('Search failed:', error) setSearchResults([]) } finally { setIsLoading(false) } } const handleInputChange = (e: React.ChangeEvent) => { const query = e.target.value setSearchQuery(query) handleSearch(query) } const handleBackgroundClick = (e: React.MouseEvent) => { if (e.target === e.currentTarget) { onClose() } } if (!isOpen) return null return (
Type # to access summaries, ? for help.
{searchQuery && (
{isLoading ? (

Searching...

) : searchResults.length > 0 ? (
{searchResults.map((result) => { const timestamp = new Date(result.started_at * 1000).toLocaleString() return (
{ router.push(`/activity/${result.id}`) onClose() }} >

{result.title || 'Untitled Conversation'}

{timestamp}
) })}
) : (

No results found for "{searchQuery}"

)}
)}
) }