Files

61 lines
1.7 KiB
JavaScript

import React from 'react';
import PropTypes from 'prop-types';
import './textarea.scss';
export class Textarea extends React.Component {
constructor(props){
super(props);
}
render() {
let className = "component_textarea";
if(/Firefox/.test(navigator.userAgent)){
className += " firefox";
}
if((this.refs.el !== undefined && this.refs.el.value.length > 0) || (this.props.value !== undefined && this.props.value.length > 0)){
className += " hasText";
}
const disabledEnter = (e) => {
if(e.key === "Enter" && e.shiftKey === false){
e.preventDefault();
const $form = getForm(this.refs.el);
if($form){
$form.dispatchEvent(new Event('submit', { cancelable: true }));
}
}
function getForm($el){
if(!$el.parentElement) return $el;
if($el.parentElement.nodeName == "FORM"){
return $el.parentElement;
}
return getForm($el.parentElement);
}
};
const inputProps = (p) => {
return Object.keys(p).reduce((acc, key) => {
if(key === "disabledEnter") return acc;
acc[key] = p[key];
return acc;
}, {});
};
return (
<textarea
onKeyPress={disabledEnter}
{...inputProps(this.props)}
className={className}
ref={"el"}
></textarea>
);
}
}
Textarea.propTypes = {
type: PropTypes.string,
placeholder: PropTypes.string,
disabledEnter: PropTypes.bool
};