import { clsx } from 'clsx'; import { Search, X } from 'lucide-react'; import React from 'react'; import { useNavigate } from 'react-router-dom'; import Button from './Button'; import Input from './Input'; export interface SearchBarProps extends Omit, 'onChange' | 'onSubmit'> { value: string; onChange: (value: string) => void; onClear?: () => void; onSubmit?: (value: string) => void; placeholder?: string; showClearButton?: boolean; className?: string; containerClassName?: string; navigateOnEnter?: boolean; } /** * Search bar component with clear button */ export const SearchBar = React.forwardRef( ( { value, onChange, onClear, onSubmit, placeholder = 'Search...', showClearButton = true, className, containerClassName, navigateOnEnter = false, ...props }, ref ) => { const navigate = useNavigate(); const handleClear = () => { onChange(''); onClear?.(); }; const handleKeyDown = (e: React.KeyboardEvent) => { if (e.key === 'Enter') { e.preventDefault(); if (onSubmit) { onSubmit(value); } else if (navigateOnEnter && value.trim()) { navigate(`/search?q=${encodeURIComponent(value.trim())}`); } } props.onKeyDown?.(e); }; return (
onChange(e.target.value)} onKeyDown={handleKeyDown} placeholder={placeholder} className={clsx('pl-9', showClearButton && value && 'pr-9', !containerClassName && className)} {...props} /> {showClearButton && value && ( )}
); } ); SearchBar.displayName = 'SearchBar'; // Default export for backward compatibility export default SearchBar;