UNPKG

4.12 kBJavaScriptView Raw
1'use strict';
2
3exports.__esModule = true;
4
5var _extends2 = require('babel-runtime/helpers/extends');
6
7var _extends3 = _interopRequireDefault(_extends2);
8
9var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
10
11var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
12
13var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
14
15var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
16
17var _inherits2 = require('babel-runtime/helpers/inherits');
18
19var _inherits3 = _interopRequireDefault(_inherits2);
20
21var _class, _temp;
22
23var _react = require('react');
24
25var _react2 = _interopRequireDefault(_react);
26
27var _propTypes = require('prop-types');
28
29var _propTypes2 = _interopRequireDefault(_propTypes);
30
31var _classnames = require('classnames');
32
33var _classnames2 = _interopRequireDefault(_classnames);
34
35var _reactLifecyclesCompat = require('react-lifecycles-compat');
36
37var _util = require('../util');
38
39var _tag = require('./tag');
40
41var _tag2 = _interopRequireDefault(_tag);
42
43function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
44
45var noop = _util.func.noop,
46 bindCtx = _util.func.bindCtx;
47
48/**
49 * Tag.Selectable
50 */
51
52var Selectable = (_temp = _class = function (_Component) {
53 (0, _inherits3.default)(Selectable, _Component);
54
55 function Selectable(props) {
56 (0, _classCallCheck3.default)(this, Selectable);
57
58 var _this = (0, _possibleConstructorReturn3.default)(this, _Component.call(this, props));
59
60 _this.state = {
61 checked: 'checked' in props ? props.checked : props.defaultChecked || false
62 };
63
64 bindCtx(_this, ['handleClick']);
65 return _this;
66 }
67
68 Selectable.getDerivedStateFromProps = function getDerivedStateFromProps(props, state) {
69 if (props.checked !== undefined && props.checked !== state.checked) {
70 return {
71 checked: props.checked
72 };
73 }
74
75 return null;
76 };
77
78 Selectable.prototype.handleClick = function handleClick(e) {
79 e && e.preventDefault();
80 // IE9 不支持 pointer-events,还是可能会触发 click 事件
81 if (this.props.disabled) {
82 return false;
83 }
84
85 var checked = this.state.checked;
86
87
88 this.setState({
89 checked: !checked
90 });
91
92 this.props.onChange(!checked, e);
93 };
94
95 Selectable.prototype.render = function render() {
96 var attrFilterTarget = ['checked', 'defaultChecked', 'onChange', 'className',
97 // 防止这些额外的参数影响 tag 的类型
98 '_shape', 'closable'];
99
100 var others = _util.obj.pickOthers(attrFilterTarget, this.props);
101 var isChecked = 'checked' in this.props ? this.props.checked : this.state.checked;
102 var clazz = (0, _classnames2.default)(this.props.className, {
103 checked: isChecked
104 });
105 return _react2.default.createElement(_tag2.default, (0, _extends3.default)({}, others, {
106 role: 'checkbox',
107 _shape: 'checkable',
108 'aria-checked': isChecked,
109 className: clazz,
110 onClick: this.handleClick
111 }));
112 };
113
114 return Selectable;
115}(_react.Component), _class.propTypes = {
116 /**
117 * 标签是否被选中,受控用法
118 * tag checked or not, a controlled way
119 */
120 checked: _propTypes2.default.bool,
121 /**
122 * 标签是否默认被选中,非受控用法
123 * tag checked or not by default, a uncontrolled way
124 */
125 defaultChecked: _propTypes2.default.bool,
126 /**
127 * 选中状态变化时触发的事件
128 * @param {Boolean} checked 是否选中
129 * @param {Event} e Dom 事件对象
130 */
131 onChange: _propTypes2.default.func,
132 /**
133 * 标签是否被禁用
134 */
135 disabled: _propTypes2.default.bool,
136 className: _propTypes2.default.any
137}, _class.defaultProps = {
138 onChange: noop
139}, _temp);
140Selectable.displayName = 'Selectable';
141exports.default = (0, _reactLifecyclesCompat.polyfill)(Selectable);
142module.exports = exports['default'];
\No newline at end of file