import classnames from 'classnames'; import React, { Component, createRef } from 'react'; import injectSheet from 'react-jss'; import { IFormField, IWithStyle } 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 React.TextareaHTMLAttributes, IFormField, IWithStyle { focus?: boolean; data: IData; textareaClassName?: string; } class TextareaComponent extends Component { static defaultProps = { focus: false, 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, focus, id, textareaClassName, label, showLabel, value, name, placeholder, spellCheck, onBlur, onFocus, minLength, maxLength, required, rows, noMargin, } = this.props; return ( {error && ( )} ); } } export const Textarea = injectSheet(styles)(TextareaComponent);