import classnames from 'classnames'; import { Component, type TextareaHTMLAttributes, createRef } from 'react'; import injectSheet, { type WithStylesProps } from 'react-jss'; import { noop } from 'lodash'; import type { IFormField } from '../typings/generic'; // biome-ignore lint/suspicious/noShadowRestrictedNames: import Error from '../error'; import Label from '../label'; import Wrapper from '../wrapper'; import styles from './styles'; interface IData { [index: string]: string; } interface IProps extends TextareaHTMLAttributes, IFormField, WithStylesProps { data: IData; textareaClassName?: string; } class TextareaComponent extends Component { static defaultProps = { onChange: noop, onBlur: noop, onFocus: noop, showLabel: true, disabled: false, rows: 5, }; private textareaRef = createRef(); componentDidMount() { const { data } = this.props; if (this.textareaRef?.current && data) { Object.keys(data).map( // biome-ignore lint/suspicious/noAssignInExpressions: key => (this.textareaRef.current!.dataset[key] = data[key]), ); } } onChange(e: React.ChangeEvent) { const { onChange } = this.props; if (onChange) { onChange(e); } } render() { const { classes, className, disabled, error, id, textareaClassName, label, showLabel, value, name, placeholder, spellCheck, onBlur, onFocus, minLength, maxLength, required, rows, noMargin, } = this.props; return ( {error && } ); } } export default injectSheet(styles, { injectTheme: true })(TextareaComponent);