diff --git a/jupyterlab/src/components/Debounce.tsx b/jupyterlab/src/components/Debounce.tsx new file mode 100644 index 00000000..d3ff760d --- /dev/null +++ b/jupyterlab/src/components/Debounce.tsx @@ -0,0 +1,28 @@ +import React, { FC, useEffect } from 'react'; +import { TextField, TextFieldProps } from '@mui/material'; + +export const DebouncedInputTextField: FC<{ + onChange: (s: string, valid: boolean) => void; + delay: number; + textFieldProps: TextFieldProps; +}> = ({ onChange, delay, textFieldProps }) => { + const [text, setText] = React.useState(''); + const [valid, setValidity] = React.useState(true); + useEffect(() => { + const timer = setTimeout(() => { + onChange(text, valid); + }, delay); + return () => { + clearTimeout(timer); + }; + }, [text, delay]); + return ( + { + setText(e.target.value); + setValidity(e.target.validity.valid); + }} + {...textFieldProps} + /> + ); +}; \ No newline at end of file