Feat: Add InnerBlurInput component to avoid frequent updates of zustand causing the input box to lose focus #3221 (#7955)

### What problem does this PR solve?

Feat: Add InnerBlurInput component to avoid frequent updates of zustand
causing the input box to lose focus #3221
### Type of change


- [x] New Feature (non-breaking change which adds functionality)
This commit is contained in:
balibabu
2025-05-29 19:52:56 +08:00
committed by GitHub
parent 49ff1ca934
commit e97fd2b5e6
11 changed files with 249 additions and 37 deletions

View File

@ -67,4 +67,42 @@ const SearchInput = (props: InputProps) => {
);
};
type Value = string | readonly string[] | number | undefined;
export const InnerBlurInput = React.forwardRef<
HTMLInputElement,
InputProps & { value: Value; onChange(value: Value): void }
>(({ value, onChange, ...props }, ref) => {
const [val, setVal] = React.useState<Value>();
const handleChange: React.ChangeEventHandler<HTMLInputElement> =
React.useCallback((e) => {
setVal(e.target.value);
}, []);
const handleBlur: React.FocusEventHandler<HTMLInputElement> =
React.useCallback(
(e) => {
onChange?.(e.target.value);
},
[onChange],
);
React.useEffect(() => {
setVal(value);
}, [value]);
return (
<Input
{...props}
value={val}
onBlur={handleBlur}
onChange={handleChange}
ref={ref}
></Input>
);
});
export const BlurInput = React.memo(InnerBlurInput);
export { ExpandedInput, Input, SearchInput };