import { Search, X } from 'lucide-react'
import { useRef } from 'react'
import { useTranslation } from 'react-i18next'
import { Input } from '@/components/ui/input'
import { cn } from '@/lib/utils'
interface SearchBarProps {
value: string
onChange: (value: string) => void
placeholder?: string
className?: string
}
export function SearchBar({ value, onChange, placeholder, className }: SearchBarProps) {
const { t } = useTranslation()
const inputRef = useRef<HTMLInputElement>(null)
return (
<div className={cn('relative flex-1 max-w-sm', className)}>
<Search className="absolute left-2.5 top-2.5 h-4 w-4 text-muted-foreground" />
<Input
ref={inputRef}
value={value}
onChange={(e) => onChange(e.target.value)}
placeholder={placeholder ?? t('dataTable.search', 'Search...')}
className="pl-8 pr-8 h-9 transition-shadow focus-visible:shadow-sm"
/>
{value && (
<button
type="button"
onClick={() => {
onChange('')
inputRef.current?.focus()
}}
className="absolute right-2.5 top-2.5 text-muted-foreground hover:text-foreground"
>
<X className="h-4 w-4" />
</button>
)}
</div>
)
}