UNPKG

yqcloud-ui

Version:

An enterprise-class UI design language and React-based implementation

472 lines (422 loc) 18 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _extends2 = require('babel-runtime/helpers/extends'); var _extends3 = _interopRequireDefault(_extends2); var _defineProperty2 = require('babel-runtime/helpers/defineProperty'); var _defineProperty3 = _interopRequireDefault(_defineProperty2); 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 _propTypes = require('prop-types'); var _propTypes2 = _interopRequireDefault(_propTypes); var _classnames = require('classnames'); var _classnames2 = _interopRequireDefault(_classnames); var _omit = require('omit.js'); var _omit2 = _interopRequireDefault(_omit); var _icon = require('../icon'); var _icon2 = _interopRequireDefault(_icon); 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 fixControlledValue(value) { if (typeof value === 'undefined' || value === null) { return ''; } return value; } var Input = function (_React$Component) { (0, _inherits3['default'])(Input, _React$Component); function Input() { (0, _classCallCheck3['default'])(this, Input); var _this = (0, _possibleConstructorReturn3['default'])(this, (Input.__proto__ || Object.getPrototypeOf(Input)).apply(this, arguments)); _this.state = { inputLength: 0, focused: false, renderedStyle: { width: '100%', margin: 0 }, showLengthInfo: true, showPassword: false, type: 'text' }; _this.handleKeyDown = function (e) { var _this$props = _this.props, onPressEnter = _this$props.onPressEnter, onKeyDown = _this$props.onKeyDown; if (e.keyCode === 13 && onPressEnter) { onPressEnter(e); } if (onKeyDown) { onKeyDown(e); } }; _this.handleFocus = function (e) { var _this$props2 = _this.props, onFocus = _this$props2.onFocus, readOnly = _this$props2.readOnly; if (!readOnly) { _this.setState({ focused: true }); } if (onFocus) { onFocus(e); } }; _this.handleInput = function () { _this.setState({ inputLength: _this.input.value.length }); }; _this.handleBlur = function (e) { var _this$props3 = _this.props, onBlur = _this$props3.onBlur, readOnly = _this$props3.readOnly; if (!readOnly) { _this.setState({ focused: false }); } if (onBlur) { onBlur(e); } }; _this.handleCopy = function () { var onCopy = _this.props.onCopy; _this.input.select(); document.execCommand('Copy'); if (onCopy) { onCopy(_this.input.value); } }; _this.handleShowPassword = function () { _this.setState({ type: 'text', showPassword: true }); }; _this.handleHidePassword = function () { _this.setState({ type: 'password', showPassword: false }); }; _this.saveInput = function (node) { _this.input = node; }; return _this; } (0, _createClass3['default'])(Input, [{ key: 'componentDidMount', value: function componentDidMount() { var inputLength = this.state.inputLength; var _props = this.props, focused = _props.focused, showLengthInfo = _props.showLengthInfo; var inputValueLength = this.input.value.length; if (inputValueLength !== inputLength) { this.setState({ inputLength: inputValueLength, showLengthInfo: showLengthInfo }); } if (this.props.autoFocus) { this.setState({ focused: true }); } if (typeof focused === 'boolean') { this.setState({ focused: focused }); } this.setState({ type: this.props.type }); this.setRenderedStyle(); } }, { key: 'componentWillReceiveProps', value: function componentWillReceiveProps(nextProps) { if (this.input.value !== nextProps.value) { var inputLength = nextProps.value && nextProps.value.length; this.setState({ inputLength: inputLength || 0 }); } if (nextProps.autoFocus) { this.setState({ focused: true }); } if (typeof nextProps.focused === 'boolean') { this.setState({ focused: nextProps.focused }); } if ('showLengthInfo' in nextProps) { this.setState({ showLengthInfo: nextProps.showLengthInfo }); } this.setState({ type: nextProps.type }); } }, { key: 'componentDidUpdate', value: function componentDidUpdate() { var inputLength = this.state.inputLength; var inputValueLength = this.input.value.length; if (inputValueLength !== inputLength) { this.setState({ inputLength: inputValueLength }); } this.setRenderedStyle(); } }, { key: 'setRenderedStyle', value: function setRenderedStyle() { var suffix = this.refs.suffix; var prefix = this.refs.prefix; var rendered = this.refs.rendered; var suffixWidth = void 0; var prefixWidth = void 0; var margin = '0'; var width = '100%'; if (suffix && prefix) { suffixWidth = (suffix.clientWidth || -2) + 2 + 'px'; prefixWidth = (prefix.clientWidth || -2) + 2 + 'px'; margin = '0 ' + suffixWidth + ' 0 ' + prefixWidth; width = 'calc(100% - ' + suffixWidth + ' - ' + prefixWidth + ')'; } else if (suffix) { suffixWidth = (suffix.clientWidth || -2) + 2 + 'px'; margin = '0 ' + suffixWidth + ' 0 0'; width = 'calc(100% - ' + suffixWidth + ')'; } else if (prefix) { prefixWidth = (prefix.clientWidth || -2) + 2 + 'px'; margin = '0 0 0 ' + prefixWidth; width = 'calc(100% - ' + prefixWidth + ')'; } rendered.style.margin = margin; rendered.style.width = width; } }, { key: 'focus', value: function focus() { this.input.focus(); } }, { key: 'blur', value: function blur() { this.input.blur(); } }, { key: 'getInputClassName', value: function getInputClassName() { var _classNames; var _props2 = this.props, prefixCls = _props2.prefixCls, size = _props2.size, copy = _props2.copy; return (0, _classnames2['default'])(prefixCls, (_classNames = {}, (0, _defineProperty3['default'])(_classNames, prefixCls + '-sm', size === 'small'), (0, _defineProperty3['default'])(_classNames, prefixCls + '-lg', size === 'large'), (0, _defineProperty3['default'])(_classNames, prefixCls + '-has-copy', copy), _classNames)); } }, { key: 'renderCopyIcon', value: function renderCopyIcon() { var _props3 = this.props, prefixCls = _props3.prefixCls, copy = _props3.copy; return copy ? React.createElement( 'span', { className: prefixCls + '-icon', onClick: this.handleCopy }, React.createElement(_icon2['default'], { className: prefixCls + '-icon-copy', type: 'library_books' }) ) : null; } }, { key: 'renderShowPassword', value: function renderShowPassword() { var _props4 = this.props, prefixCls = _props4.prefixCls, type = _props4.type; var showPassword = this.state.showPassword; return type === 'password' ? React.createElement( 'span', { className: prefixCls + '-icon', onMouseDown: this.handleShowPassword, onMouseLeave: this.handleHidePassword, onMouseUp: this.handleHidePassword }, React.createElement(_icon2['default'], { className: prefixCls + '-icon-copy', type: showPassword ? 'visibility' : 'visibility_off' }) ) : null; } }, { key: 'renderInput', value: function renderInput() { var _props5 = this.props, value = _props5.value, className = _props5.className, label = _props5.label; // Fix https://fb.me/react-unknown-prop var otherProps = (0, _omit2['default'])(this.props, ['placeholder', 'prefixCls', 'onPressEnter', 'addonBefore', 'addonAfter', 'prefix', 'suffix', 'label', 'copy', 'style', 'underline', 'focused', 'showLengthInfo', 'showPasswordEye']); if ('value' in this.props) { otherProps.value = fixControlledValue(value); // Input elements must be either controlled or uncontrolled, // specify either the value prop, or the defaultValue prop, but not both. delete otherProps.defaultValue; } otherProps.onInput = this.handleInput; if ('placeholder' in this.props && label) { delete otherProps.placeholder; } return React.createElement('input', (0, _extends3['default'])({}, otherProps, { className: (0, _classnames2['default'])(this.getInputClassName(), className), onKeyDown: this.handleKeyDown, ref: this.saveInput, onFocus: this.handleFocus, onBlur: this.handleBlur, type: this.state.type })); } }, { key: 'getLengthInfo', value: function getLengthInfo() { var _props6 = this.props, prefixCls = _props6.prefixCls, maxLength = _props6.maxLength; var _state = this.state, inputLength = _state.inputLength, showLengthInfo = _state.showLengthInfo; return maxLength && showLengthInfo ? React.createElement( 'span', { className: prefixCls + '-icon' }, React.createElement( 'span', { className: prefixCls + '-icon-copy ' + prefixCls + '-length-info' }, inputLength + '/' + maxLength ) ) : null; } }, { key: 'getUnderLine', value: function getUnderLine() { var _props7 = this.props, prefixCls = _props7.prefixCls, underline = _props7.underline; return underline ? React.createElement( 'div', { className: prefixCls + '-underline' }, React.createElement('span', { className: prefixCls + '-ripple' }) ) : null; } }, { key: 'getSizeClassName', value: function getSizeClassName(name) { var _classNames2; var _props8 = this.props, prefixCls = _props8.prefixCls, size = _props8.size; return (0, _classnames2['default'])(prefixCls + '-' + name, (_classNames2 = {}, (0, _defineProperty3['default'])(_classNames2, prefixCls + '-' + name + '-sm', size === 'small'), (0, _defineProperty3['default'])(_classNames2, prefixCls + '-' + name + '-lg', size === 'large'), _classNames2)); } }, { key: 'render', value: function render() { var _classNames3; var props = this.props; var _props9 = this.props, prefixCls = _props9.prefixCls, disabled = _props9.disabled, label = _props9.label, style = _props9.style, placeholder = _props9.placeholder, showPasswordEye = _props9.showPasswordEye; var _state2 = this.state, inputLength = _state2.inputLength, focused = _state2.focused; var prefix = props.prefix ? React.createElement( 'span', { ref: 'prefix', className: this.getSizeClassName('prefix') }, props.prefix ) : null; var suffix = props.suffix ? React.createElement( 'span', { ref: 'suffix', className: this.getSizeClassName('suffix') }, props.suffix ) : null; var className = (0, _classnames2['default'])(prefixCls + '-wrapper', (_classNames3 = {}, (0, _defineProperty3['default'])(_classNames3, prefixCls + '-has-value', inputLength !== 0), (0, _defineProperty3['default'])(_classNames3, prefixCls + '-focus', focused), (0, _defineProperty3['default'])(_classNames3, prefixCls + '-disabled', disabled), (0, _defineProperty3['default'])(_classNames3, prefixCls + '-has-label', !!label), (0, _defineProperty3['default'])(_classNames3, prefixCls + '-has-prefix', !!prefix), (0, _defineProperty3['default'])(_classNames3, prefixCls + '-has-suffix', !!suffix), _classNames3)); return React.createElement( 'span', { className: className, style: style }, React.createElement( 'div', { className: prefixCls + '-content' }, label ? React.createElement( 'div', { className: prefixCls + '-label' }, label ) : null, React.createElement( 'div', { className: prefixCls + '-rendered-wrapper' }, prefix, React.createElement( 'div', { className: this.getSizeClassName('rendered'), ref: 'rendered' }, React.createElement( 'div', { className: prefixCls + '-placeholder' }, placeholder ), this.renderInput(), this.renderCopyIcon(), showPasswordEye ? this.renderShowPassword() : null ), suffix ), this.getLengthInfo() ), this.getUnderLine() ); } }]); return Input; }(React.Component); exports['default'] = Input; Input.defaultProps = { prefixCls: 'ant-input', type: 'text', disabled: false, underline: true, readOnly: false, showLengthInfo: true, showPasswordEye: false }; Input.propTypes = { type: _propTypes2['default'].string, id: _propTypes2['default'].oneOfType([_propTypes2['default'].string, _propTypes2['default'].number]), label: _propTypes2['default'].node, size: _propTypes2['default'].oneOf(['small', 'default', 'large']), maxLength: _propTypes2['default'].oneOfType([_propTypes2['default'].string, _propTypes2['default'].number]), disabled: _propTypes2['default'].bool, value: _propTypes2['default'].any, defaultValue: _propTypes2['default'].any, className: _propTypes2['default'].string, addonBefore: _propTypes2['default'].node, addonAfter: _propTypes2['default'].node, prefixCls: _propTypes2['default'].string, autosize: _propTypes2['default'].oneOfType([_propTypes2['default'].bool, _propTypes2['default'].object]), onPressEnter: _propTypes2['default'].func, onKeyDown: _propTypes2['default'].func, onKeyUp: _propTypes2['default'].func, onFocus: _propTypes2['default'].func, onBlur: _propTypes2['default'].func, prefix: _propTypes2['default'].node, suffix: _propTypes2['default'].node, copy: _propTypes2['default'].bool, onCopy: _propTypes2['default'].func, underline: _propTypes2['default'].bool, readOnly: _propTypes2['default'].bool, focused: _propTypes2['default'].bool, showLengthInfo: _propTypes2['default'].bool, showPasswordEye: _propTypes2['default'].bool }; module.exports = exports['default'];