|
import { useState, KeyboardEvent } from 'react'; |
|
import { Input } from '@/components/ui/input'; |
|
import { Button } from '@/components/ui/button'; |
|
import { MessageSquarePlus, Loader2 } from 'lucide-react'; |
|
import { cn } from '@/lib/utils'; |
|
|
|
interface FollowUpInputProps { |
|
onSubmit: (query: string) => void; |
|
isLoading?: boolean; |
|
} |
|
|
|
export function FollowUpInput({ |
|
onSubmit, |
|
isLoading = false, |
|
}: FollowUpInputProps) { |
|
const [query, setQuery] = useState(''); |
|
|
|
const handleSubmit = () => { |
|
if (query.trim() && !isLoading) { |
|
onSubmit(query.trim()); |
|
setQuery(''); |
|
} |
|
}; |
|
|
|
const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => { |
|
if (e.key === 'Enter') { |
|
e.preventDefault(); |
|
handleSubmit(); |
|
} |
|
}; |
|
|
|
return ( |
|
<div className="relative flex flex-col sm:flex-row items-stretch sm:items-center gap-2"> |
|
<div className="flex-1"> |
|
<Input |
|
value={query} |
|
onChange={(e) => setQuery(e.target.value)} |
|
onKeyDown={handleKeyDown} |
|
placeholder="Ask a follow-up question..." |
|
className={cn( |
|
"transition-all duration-200", |
|
"focus-visible:ring-1 focus-visible:ring-primary", |
|
"placeholder:text-muted-foreground/70", |
|
"w-full" |
|
)} |
|
disabled={isLoading} |
|
/> |
|
</div> |
|
|
|
<Button |
|
onClick={handleSubmit} |
|
disabled={!query.trim() || isLoading} |
|
className="flex items-center justify-center gap-2 w-full sm:w-auto" |
|
> |
|
{isLoading ? ( |
|
<Loader2 className="h-4 w-4 animate-spin" /> |
|
) : ( |
|
<> |
|
<MessageSquarePlus className="h-4 w-4" /> |
|
Ask |
|
</> |
|
)} |
|
</Button> |
|
</div> |
|
); |
|
} |