mirror of
https://github.com/infiniflow/ragflow.git
synced 2025-12-08 20:42:30 +08:00
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:
@ -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 };
|
||||
|
||||
Reference in New Issue
Block a user