mirror of
				https://github.com/mickael-kerjean/filestash.git
				synced 2025-10-31 18:16:00 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			61 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			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'));
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             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
 | |
| };
 | 
