import { useState } from "react"; import { useMutation } from "@tanstack/react-query"; import { useTranslation } from "react-i18next"; import { Input } from "@/components/ui/input"; import { Sparkles, Search, Loader2, X } from "lucide-react"; import { useNavigate } from "react-router-dom"; import { analyticsService } from "@/services/analytics.service"; import { useToast } from "@/hooks/use-toast"; export default function AiSearchBar() { const [query, setQuery] = useState(""); const navigate = useNavigate(); const { toast } = useToast(); const { t } = useTranslation(); const searchMutation = useMutation({ mutationFn: (q: string) => analyticsService.search(q), onError: (err: Error) => { toast({ variant: "destructive", title: t("chrome.aiSearchFailedTitle"), description: err.message || t("chrome.aiSearchFailedDesc"), }); }, }); const handleSearch = () => { if (!query.trim() || searchMutation.isPending) return; searchMutation.mutate(query.trim()); }; const result = searchMutation.data; return (
{ setQuery(e.target.value); searchMutation.reset(); }} onKeyDown={(e) => e.key === "Enter" && handleSearch()} /> {query && ( )}
{(searchMutation.isPending || result !== undefined) && (
{searchMutation.isPending ? (
{t("chrome.aiSearching")}
) : result?.answer ? (

{result.answer}

{result.suggestions?.length > 0 && (

{t("chrome.aiRelatedQueries")}

{result.suggestions.map((s, i) => ( ))}
)} {result.related_actions?.map((a, i) => ( ))}
) : (

{t("chrome.aiNoResults", { q: query })}

)}
)}
); }