import classnames from 'classnames'; import { Component, createRef, TextareaHTMLAttributes } from 'react'; import injectSheet, { WithStylesProps } from 'react-jss'; import { IFormField } from '../typings/generic'; 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: () => {}, onBlur: () => {}, onFocus: () => {}, showLabel: true, disabled: false, rows: 5, }; private textareaRef = createRef(); componentDidMount() { const { data } = this.props; if (this.textareaRef && this.textareaRef.current && data) { Object.keys(data).map( 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, );