@yncoder/element-react
Version:
Element UI for React
331 lines (270 loc) • 9.78 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _extends2 = require('babel-runtime/helpers/extends');
var _extends3 = _interopRequireDefault(_extends2);
var _objectWithoutProperties2 = require('babel-runtime/helpers/objectWithoutProperties');
var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = require('babel-runtime/helpers/createClass');
var _createClass3 = _interopRequireDefault(_createClass2);
var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
var _inherits2 = require('babel-runtime/helpers/inherits');
var _inherits3 = _interopRequireDefault(_inherits2);
var _react = require('react');
var React = _interopRequireWildcard(_react);
var _libs = require('../../libs');
var _calcTextareaHeight = require('./calcTextareaHeight');
var _calcTextareaHeight2 = _interopRequireDefault(_calcTextareaHeight);
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
(function () {
var enterModule = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.enterModule : undefined;
enterModule && enterModule(module);
})();
var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) {
return a;
};
var Input = function (_Component) {
(0, _inherits3.default)(Input, _Component);
function Input(props) {
(0, _classCallCheck3.default)(this, Input);
var _this = (0, _possibleConstructorReturn3.default)(this, (Input.__proto__ || Object.getPrototypeOf(Input)).call(this, props));
_this.state = {
textareaStyle: { resize: props.resize }
};
return _this;
}
(0, _createClass3.default)(Input, [{
key: 'componentDidMount',
value: function componentDidMount() {
this.resizeTextarea();
}
/* <Instance Methods */
}, {
key: 'focus',
value: function focus() {
var _this2 = this;
setTimeout(function () {
(_this2.refs.input || _this2.refs.textarea).focus();
});
}
}, {
key: 'blur',
value: function blur() {
var _this3 = this;
setTimeout(function () {
(_this3.refs.input || _this3.refs.textarea).blur();
});
}
/* Instance Methods> */
}, {
key: 'fixControlledValue',
value: function fixControlledValue(value) {
if (typeof value === 'undefined' || value === null) {
return '';
}
return value;
}
}, {
key: 'handleChange',
value: function handleChange(e) {
var onChange = this.props.onChange;
if (onChange) {
onChange(e.target.value);
}
this.resizeTextarea();
}
}, {
key: 'handleFocus',
value: function handleFocus(e) {
var onFocus = this.props.onFocus;
if (onFocus) onFocus(e);
}
}, {
key: 'handleBlur',
value: function handleBlur(e) {
var onBlur = this.props.onBlur;
if (this.props.trim) this.handleTrim();
if (onBlur) onBlur(e);
}
}, {
key: 'handleTrim',
value: function handleTrim() {
this.refs.input.value = this.refs.input.value.trim();
if (this.props.onChange) {
// this's for controlled components
this.props.onChange(this.refs.input.value.trim());
}
}
}, {
key: 'handleIconClick',
value: function handleIconClick(e) {
if (this.props.onIconClick) {
this.props.onIconClick(e);
}
}
}, {
key: 'resizeTextarea',
value: function resizeTextarea() {
var _props = this.props,
autosize = _props.autosize,
type = _props.type;
if (!autosize || type !== 'textarea') {
return;
}
var minRows = autosize.minRows;
var maxRows = autosize.maxRows;
var textareaCalcStyle = (0, _calcTextareaHeight2.default)(this.refs.textarea, minRows, maxRows);
this.setState({
textareaStyle: Object.assign({}, this.state.textareaStyle, textareaCalcStyle)
});
}
}, {
key: 'render',
value: function render() {
var _props2 = this.props,
type = _props2.type,
size = _props2.size,
prepend = _props2.prepend,
append = _props2.append,
icon = _props2.icon,
autoComplete = _props2.autoComplete,
validating = _props2.validating,
rows = _props2.rows,
onMouseEnter = _props2.onMouseEnter,
onMouseLeave = _props2.onMouseLeave,
trim = _props2.trim,
otherProps = (0, _objectWithoutProperties3.default)(_props2, ['type', 'size', 'prepend', 'append', 'icon', 'autoComplete', 'validating', 'rows', 'onMouseEnter', 'onMouseLeave', 'trim']);
var classname = this.classNames(type === 'textarea' ? 'el-textarea' : 'el-input', size && 'el-input--' + size, {
'is-disabled': this.props.disabled,
'el-input-group': prepend || append,
'el-input-group--append': !!append,
'el-input-group--prepend': !!prepend
});
if ('value' in this.props) {
otherProps.value = this.fixControlledValue(this.props.value);
delete otherProps.defaultValue;
}
delete otherProps.resize;
delete otherProps.style;
delete otherProps.autosize;
delete otherProps.onIconClick;
if (type === 'textarea') {
return React.createElement(
'div',
{ style: this.style(), className: this.className(classname) },
React.createElement('textarea', (0, _extends3.default)({}, otherProps, {
ref: 'textarea',
className: 'el-textarea__inner',
style: this.state.textareaStyle,
rows: rows,
onChange: this.handleChange.bind(this),
onFocus: this.handleFocus.bind(this),
onBlur: this.handleBlur.bind(this)
}))
);
} else {
return React.createElement(
'div',
{ style: this.style(), className: this.className(classname), onMouseEnter: onMouseEnter, onMouseLeave: onMouseLeave },
prepend && React.createElement(
'div',
{ className: 'el-input-group__prepend' },
prepend
),
typeof icon === 'string' ? React.createElement(
'i',
{ className: 'el-input__icon el-icon-' + icon, onClick: this.handleIconClick.bind(this) },
prepend
) : icon,
React.createElement('input', (0, _extends3.default)({}, otherProps, {
ref: 'input',
type: type,
className: 'el-input__inner',
autoComplete: autoComplete,
onChange: this.handleChange.bind(this),
onFocus: this.handleFocus.bind(this),
onBlur: this.handleBlur.bind(this)
})),
validating && React.createElement('i', { className: 'el-input__icon el-icon-loading' }),
append && React.createElement(
'div',
{ className: 'el-input-group__append' },
append
)
);
}
}
}, {
key: '__reactstandin__regenerateByEval',
// @ts-ignore
value: function __reactstandin__regenerateByEval(key, code) {
// @ts-ignore
this[key] = eval(code);
}
}]);
return Input;
}(_libs.Component);
Input.defaultProps = {
type: 'text',
autosize: false,
rows: 2,
trim: false,
autoComplete: 'off'
};
var _default = Input;
exports.default = _default;
Input.propTypes = {
// base
type: _libs.PropTypes.string,
icon: _libs.PropTypes.oneOfType([_libs.PropTypes.element, _libs.PropTypes.string]),
disabled: _libs.PropTypes.bool,
name: _libs.PropTypes.string,
placeholder: _libs.PropTypes.string,
readOnly: _libs.PropTypes.bool,
autoFocus: _libs.PropTypes.bool,
maxLength: _libs.PropTypes.number,
minLength: _libs.PropTypes.number,
defaultValue: _libs.PropTypes.any,
value: _libs.PropTypes.any,
trim: _libs.PropTypes.bool,
// type !== 'textarea'
size: _libs.PropTypes.oneOf(['large', 'small', 'mini']),
prepend: _libs.PropTypes.node,
append: _libs.PropTypes.node,
// type === 'textarea'
autosize: _libs.PropTypes.oneOfType([_libs.PropTypes.bool, _libs.PropTypes.object]),
rows: _libs.PropTypes.number,
resize: _libs.PropTypes.oneOf(['none', 'both', 'horizontal', 'vertical']),
// event
onFocus: _libs.PropTypes.func,
onBlur: _libs.PropTypes.func,
onChange: _libs.PropTypes.func,
onIconClick: _libs.PropTypes.func,
onMouseEnter: _libs.PropTypes.func,
onMouseLeave: _libs.PropTypes.func,
// autoComplete
autoComplete: _libs.PropTypes.string,
inputSelect: _libs.PropTypes.func,
// form related
form: _libs.PropTypes.string,
validating: _libs.PropTypes.bool
};
;
(function () {
var reactHotLoader = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default : undefined;
if (!reactHotLoader) {
return;
}
reactHotLoader.register(Input, 'Input', 'src/input/Input.jsx');
reactHotLoader.register(_default, 'default', 'src/input/Input.jsx');
})();
;
(function () {
var leaveModule = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.leaveModule : undefined;
leaveModule && leaveModule(module);
})();