import { useState } from "react"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { AiSettingsPopover } from "./AiSettingsPopover"; import { useGenerateSql } from "@/hooks/use-ai"; import { Sparkles, Loader2, X, Eraser } from "lucide-react"; import { toast } from "sonner"; interface Props { connectionId: string; onSqlGenerated: (sql: string) => void; onClose: () => void; onExecute?: () => void; } export function AiBar({ connectionId, onSqlGenerated, onClose, onExecute }: Props) { const [prompt, setPrompt] = useState(""); const generateMutation = useGenerateSql(); const handleGenerate = () => { if (!prompt.trim() || generateMutation.isPending) return; generateMutation.mutate( { connectionId, prompt }, { onSuccess: (sql) => { onSqlGenerated(sql); }, onError: (err) => { toast.error("AI generation failed", { description: String(err) }); }, } ); }; const handleKeyDown = (e: React.KeyboardEvent) => { if (e.key === "Enter" && (e.ctrlKey || e.metaKey)) { e.preventDefault(); e.stopPropagation(); onExecute?.(); return; } if (e.key === "Enter" && !e.shiftKey) { e.preventDefault(); e.stopPropagation(); handleGenerate(); return; } if (e.key === "Escape") { e.stopPropagation(); onClose(); } }; return (
setPrompt(e.target.value)} onKeyDown={handleKeyDown} placeholder="Describe the query you want..." className="h-7 min-w-0 flex-1 border-tusk-purple/20 bg-tusk-purple/5 text-xs placeholder:text-muted-foreground/40 focus:border-tusk-purple/40 focus:ring-tusk-purple/20" autoFocus disabled={generateMutation.isPending} /> {prompt.trim() && ( )}
); }