import React from 'react' type Props = Omit, 'onChange'> & { onChange: (value: string) => void } export const AutosizeInput: React.FC = ({ value, placeholder, onChange, ...rest }) => { const [content, setContent] = React.useState(value?.toString() || '') const [width, setWidth] = React.useState(0) const span = React.useRef(null) const isContentChangedRef = React.useRef(false) const handleChange = (e: React.ChangeEvent) => { if (!isContentChangedRef.current) isContentChangedRef.current = true setContent(e.currentTarget.value) } React.useEffect(() => { const newContent = value?.toString() if (newContent && newContent !== content) setContent(newContent) }, [value]) React.useEffect(() => { setWidth(span.current?.offsetWidth || 0) if (isContentChangedRef.current) onChange(content) }, [content]) return (
{content || placeholder}
) }