UNPKG

2.8 kBJavaScriptView Raw
1'use strict';
2
3exports.__esModule = true;
4
5var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
6
7var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
8
9var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
10
11var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
12
13var _inherits2 = require('babel-runtime/helpers/inherits');
14
15var _inherits3 = _interopRequireDefault(_inherits2);
16
17var _react = require('react');
18
19var _react2 = _interopRequireDefault(_react);
20
21var _classnames = require('classnames');
22
23var _classnames2 = _interopRequireDefault(_classnames);
24
25var _util = require('../util');
26
27function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
28
29var makeChain = _util.func.makeChain;
30// UIState 为一些特殊元素的状态响应提供了标准的方式,
31// 尤其适合CSS无法完全定制的控件,比如checkbox,radio等。
32// 若组件 disable 则自行判断是否需要绑定状态管理。
33// 注意:disable 不会触发事件,请使用resetUIState还原状态
34/* eslint-disable react/prop-types */
35
36var UIState = function (_Component) {
37 (0, _inherits3.default)(UIState, _Component);
38
39 function UIState(props) {
40 (0, _classCallCheck3.default)(this, UIState);
41
42 var _this = (0, _possibleConstructorReturn3.default)(this, _Component.call(this, props));
43
44 _this.state = {};
45 ['_onUIFocus', '_onUIBlur'].forEach(function (item) {
46 _this[item] = _this[item].bind(_this);
47 });
48 return _this;
49 }
50 // base 事件绑定的元素
51
52
53 UIState.prototype.getStateElement = function getStateElement(base) {
54 var _props = this.props,
55 onFocus = _props.onFocus,
56 onBlur = _props.onBlur;
57
58 return _react2.default.cloneElement(base, {
59 onFocus: makeChain(this._onUIFocus, onFocus),
60 onBlur: makeChain(this._onUIBlur, onBlur)
61 });
62 };
63 // 获取状态classname
64
65
66 UIState.prototype.getStateClassName = function getStateClassName() {
67 var focused = this.state.focused;
68
69 return (0, _classnames2.default)({
70 focused: focused
71 });
72 };
73 // 复原状态
74
75
76 UIState.prototype.resetUIState = function resetUIState() {
77 this.setState({
78 focused: false
79 });
80 };
81
82 UIState.prototype._onUIFocus = function _onUIFocus() {
83 this.setState({
84 focused: true
85 });
86 };
87
88 UIState.prototype._onUIBlur = function _onUIBlur() {
89 this.setState({
90 focused: false
91 });
92 };
93
94 return UIState;
95}(_react.Component);
96
97UIState.displayName = 'UIState';
98exports.default = UIState;
99module.exports = exports['default'];
\No newline at end of file