import React, { ForwardRefRenderFunction, forwardRef, useEffect, useState, } from 'react' import classNames from 'classnames' import './index.scss' interface Props extends React.HTMLProps { fieldName: string placeholder: string value?: string limit: number error: string onBlur?: (event: React.ChangeEvent) => void onChange?: (event: React.ChangeEvent) => void } const CharLimitedFieldset: ForwardRefRenderFunction = ( { fieldName, placeholder, value, limit, error, onBlur, onChange: onInputChange, ...props }, ref ) => { // States const [currentCount, setCurrentCount] = useState( () => limit - (value || '').length ) // Hooks useEffect(() => { setCurrentCount(limit - (value || '').length) }, [limit, value]) // Event handlers const handleInputChange = (event: React.ChangeEvent) => { const { value: inputValue } = event.currentTarget setCurrentCount(limit - inputValue.length) if (onInputChange) { onInputChange(event) } } // Rendering methods return (
{currentCount}
{error.length > 0 &&

{error}

}
) } export default forwardRef(CharLimitedFieldset)