|
@@ -23,6 +23,7 @@ const SearchInput: FC<SearchInputProps> = ({
|
|
|
const { t } = useTranslation()
|
|
|
const [focus, setFocus] = useState<boolean>(false)
|
|
|
const isComposing = useRef<boolean>(false)
|
|
|
+ const [internalValue, setInternalValue] = useState<string>(value)
|
|
|
|
|
|
return (
|
|
|
<div className={cn(
|
|
@@ -45,16 +46,18 @@ const SearchInput: FC<SearchInputProps> = ({
|
|
|
white && '!bg-white hover:!bg-white group-hover:!bg-white placeholder:!text-gray-400',
|
|
|
)}
|
|
|
placeholder={placeholder || t('common.operation.search')!}
|
|
|
- value={value}
|
|
|
+ value={internalValue}
|
|
|
onChange={(e) => {
|
|
|
+ setInternalValue(e.target.value)
|
|
|
if (!isComposing.current)
|
|
|
onChange(e.target.value)
|
|
|
}}
|
|
|
onCompositionStart={() => {
|
|
|
isComposing.current = true
|
|
|
}}
|
|
|
- onCompositionEnd={() => {
|
|
|
+ onCompositionEnd={(e) => {
|
|
|
isComposing.current = false
|
|
|
+ onChange(e.data)
|
|
|
}}
|
|
|
onFocus={() => setFocus(true)}
|
|
|
onBlur={() => setFocus(false)}
|
|
@@ -63,7 +66,10 @@ const SearchInput: FC<SearchInputProps> = ({
|
|
|
{value && (
|
|
|
<div
|
|
|
className='shrink-0 flex items-center justify-center w-4 h-4 cursor-pointer group/clear'
|
|
|
- onClick={() => onChange('')}
|
|
|
+ onClick={() => {
|
|
|
+ onChange('')
|
|
|
+ setInternalValue('')
|
|
|
+ }}
|
|
|
>
|
|
|
<XCircle className='w-3.5 h-3.5 text-gray-400 group-hover/clear:text-gray-600' />
|
|
|
</div>
|