ssc-grid
Version:
React grid component for SSC 3.0
162 lines (126 loc) • 4.52 kB
JavaScript
;
exports.__esModule = true;
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
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 _react2 = _interopRequireDefault(_react);
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
var _FormControl = require('react-bootstrap/lib/FormControl');
var _FormControl2 = _interopRequireDefault(_FormControl);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
/**
* 控件(control/widget)分类
* Command input: Button, Drop-down list, ...
* Data input-output: Checkbox Color picker Combo box Cycle button Date Picker Grid view List box List builder Radio button Scrollbar Search box Slider Spinner Text box
* 来源:https://en.wikipedia.org/wiki/Widget_(GUI)
* 第二来源:https://docs.joomla.org/Standard_form_field_types
* Joomla的名称和Web更贴切,wikipedia不区分Web还是Client
*/
var propTypes = {
/**
* 输入框类型
*/
type: _propTypes2['default'].string,
/**
* 是否禁用输入框
*/
disabled: _propTypes2['default'].bool,
/**
* 当光标离开输入框
*/
onBlur: _propTypes2['default'].func,
/**
* 当文本框内容被修改时候调用
*/
onChange: _propTypes2['default'].func,
/**
* 当文本框被聚焦
*/
onFocus: _propTypes2['default'].func,
onKeyDown: _propTypes2['default'].func,
/**
* 文本框占位字符
*/
placeholder: _propTypes2['default'].string,
/**
* 文本框中显示的值
* TODO `value`应该改为`defaultValue`,类似于默认的`input`组件区分`value`和
* `defaultValue`一样,使用`defaultValue`说明该组件是uncontrolled
*/
value: _propTypes2['default'].oneOfType([_propTypes2['default'].string, _propTypes2['default'].number])
};
var defaultProps = {
value: ''
};
/**
* 文本框控件 (uncontrolled)
*/
var TextField = function (_Component) {
(0, _inherits3['default'])(TextField, _Component);
function TextField(props) {
(0, _classCallCheck3['default'])(this, TextField);
var _this = (0, _possibleConstructorReturn3['default'])(this, _Component.call(this, props));
_this.state = {
value: props.value
};
_this.handleChange = _this.handleChange.bind(_this);
_this.handleFocus = _this.handleFocus.bind(_this);
_this.handleBlur = _this.handleBlur.bind(_this);
_this.handleKeyDown = _this.handleKeyDown.bind(_this);
return _this;
}
TextField.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {
// 只有当值改变的情况下才会更新状态
if (nextProps.value !== this.props.value) {
this.setState({
value: nextProps.value
});
}
};
TextField.prototype.handleChange = function handleChange(event) {
var value = event.target.value;
this.setState({ value: value });
if (this.props.onChange) {
this.props.onChange(event);
}
};
TextField.prototype.handleBlur = function handleBlur(event) {
if (this.props.onBlur) {
this.props.onBlur(event);
}
};
TextField.prototype.handleFocus = function handleFocus(event) {
if (this.props.onFocus) {
this.props.onFocus(event);
}
};
TextField.prototype.handleKeyDown = function handleKeyDown(event) {
if (this.props.onKeyDown) {
this.props.onKeyDown(event);
}
};
TextField.prototype.render = function render() {
return _react2['default'].createElement(_FormControl2['default'], {
componentClass: this.props.type || 'input',
type: this.props.type || 'text',
value: this.state.value,
disabled: this.props.disabled === true,
placeholder: this.props.placeholder,
onChange: this.handleChange,
onFocus: this.handleFocus,
onBlur: this.handleBlur,
onKeyDown: this.handleKeyDown
});
};
return TextField;
}(_react.Component);
TextField.displayName = 'TextField';
TextField.propTypes = propTypes;
TextField.defaultProps = defaultProps;
exports['default'] = TextField;
module.exports = exports['default'];