UNPKG

ssc-grid

Version:

React grid component for SSC 3.0

162 lines (126 loc) 4.52 kB
'use strict'; 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'];