UNPKG

8.83 kBJavaScriptView Raw
1'use strict';
2
3exports.__esModule = true;
4
5var _extends2 = require('babel-runtime/helpers/extends');
6
7var _extends3 = _interopRequireDefault(_extends2);
8
9var _objectWithoutProperties2 = require('babel-runtime/helpers/objectWithoutProperties');
10
11var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);
12
13var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
14
15var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
16
17var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
18
19var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
20
21var _inherits2 = require('babel-runtime/helpers/inherits');
22
23var _inherits3 = _interopRequireDefault(_inherits2);
24
25var _class, _temp;
26
27var _classnames = require('classnames');
28
29var _classnames2 = _interopRequireDefault(_classnames);
30
31var _react = require('react');
32
33var _react2 = _interopRequireDefault(_react);
34
35var _propTypes = require('prop-types');
36
37var _propTypes2 = _interopRequireDefault(_propTypes);
38
39var _reactLifecyclesCompat = require('react-lifecycles-compat');
40
41var _util = require('../util');
42
43var _icon = require('../icon');
44
45var _icon2 = _interopRequireDefault(_icon);
46
47var _configProvider = require('../config-provider');
48
49var _configProvider2 = _interopRequireDefault(_configProvider);
50
51var _zhCn = require('../locale/zh-cn');
52
53var _zhCn2 = _interopRequireDefault(_zhCn);
54
55function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
56
57/** Switch*/
58var Switch = (_temp = _class = function (_React$Component) {
59 (0, _inherits3.default)(Switch, _React$Component);
60
61 function Switch(props, context) {
62 (0, _classCallCheck3.default)(this, Switch);
63
64 var _this = (0, _possibleConstructorReturn3.default)(this, _React$Component.call(this, props, context));
65
66 var checked = props.checked || props.defaultChecked;
67 _this.onChange = _this.onChange.bind(_this);
68 _this.onKeyDown = _this.onKeyDown.bind(_this);
69 _this.state = {
70 checked: checked
71 };
72 return _this;
73 }
74
75 Switch.getDerivedStateFromProps = function getDerivedStateFromProps(props, state) {
76 if ('checked' in props && props.checked !== state.checked) {
77 return {
78 checked: !!props.checked
79 };
80 }
81
82 return null;
83 };
84
85 Switch.prototype.onChange = function onChange(ev) {
86 var checked = !this.state.checked;
87
88 if (!('checked' in this.props)) {
89 this.setState({
90 checked: checked
91 });
92 }
93 this.props.onChange(checked, ev);
94 this.props.onClick && this.props.onClick(ev);
95 };
96
97 Switch.prototype.onKeyDown = function onKeyDown(e) {
98 if (e.keyCode === _util.KEYCODE.ENTER || e.keyCode === _util.KEYCODE.SPACE) {
99 this.onChange(e);
100 }
101 this.props.onKeyDown && this.props.onKeyDown(e);
102 };
103
104 Switch.prototype.render = function render() {
105 var _classNames;
106
107 var _props = this.props,
108 prefix = _props.prefix,
109 className = _props.className,
110 disabled = _props.disabled,
111 readOnly = _props.readOnly,
112 size = _props.size,
113 loading = _props.loading,
114 autoWidth = _props.autoWidth,
115 checkedChildren = _props.checkedChildren,
116 unCheckedChildren = _props.unCheckedChildren,
117 rtl = _props.rtl,
118 isPreview = _props.isPreview,
119 renderPreview = _props.renderPreview,
120 locale = _props.locale,
121 others = (0, _objectWithoutProperties3.default)(_props, ['prefix', 'className', 'disabled', 'readOnly', 'size', 'loading', 'autoWidth', 'checkedChildren', 'unCheckedChildren', 'rtl', 'isPreview', 'renderPreview', 'locale']);
122 var checked = this.state.checked;
123
124 var status = checked ? 'on' : 'off';
125 var children = checked ? checkedChildren : unCheckedChildren;
126
127 var _size = size;
128 if (_size !== 'small' && _size !== 'medium') {
129 _size = 'medium';
130 }
131
132 var classes = (0, _classnames2.default)((_classNames = {}, _classNames[prefix + 'switch'] = true, _classNames[prefix + 'switch-loading'] = loading, _classNames[prefix + 'switch-' + status] = true, _classNames[prefix + 'switch-' + _size] = true, _classNames[prefix + 'switch-auto-width'] = autoWidth, _classNames[className] = className, _classNames));
133 var attrs = void 0;
134 var isDisabled = disabled || readOnly;
135
136 if (!isDisabled) {
137 attrs = {
138 onClick: this.onChange,
139 tabIndex: 0,
140 onKeyDown: this.onKeyDown,
141 disabled: false
142 };
143 } else {
144 attrs = {
145 disabled: true
146 };
147 }
148
149 if (isPreview) {
150 var _classNames2;
151
152 var previewCls = (0, _classnames2.default)(className, (_classNames2 = {}, _classNames2[prefix + 'form-preview'] = true, _classNames2));
153
154 if ('renderPreview' in this.props) {
155 return _react2.default.createElement(
156 'div',
157 (0, _extends3.default)({ className: previewCls }, others),
158 renderPreview(checked, this.props)
159 );
160 }
161
162 return _react2.default.createElement(
163 'p',
164 (0, _extends3.default)({ className: previewCls }, others),
165 children || locale[status]
166 );
167 }
168
169 return _react2.default.createElement(
170 'div',
171 (0, _extends3.default)({
172 role: 'switch',
173 dir: rtl ? 'rtl' : undefined,
174 tabIndex: '0'
175 }, others, {
176 className: classes
177 }, attrs, {
178 'aria-checked': checked
179 }),
180 _react2.default.createElement(
181 'div',
182 { className: prefix + 'switch-btn' },
183 loading && _react2.default.createElement(_icon2.default, { type: 'loading', className: prefix + 'switch-inner-icon' })
184 ),
185 _react2.default.createElement(
186 'div',
187 { className: prefix + 'switch-children' },
188 children
189 )
190 );
191 };
192
193 return Switch;
194}(_react2.default.Component), _class.contextTypes = {
195 prefix: _propTypes2.default.string
196}, _class.propTypes = {
197 prefix: _propTypes2.default.string,
198 rtl: _propTypes2.default.bool,
199 pure: _propTypes2.default.bool,
200 /**
201 * 自定义类名
202 */
203 className: _propTypes2.default.string,
204 /**
205 * 自定义内敛样式
206 */
207 style: _propTypes2.default.object,
208 /**
209 * 打开时的内容
210 */
211 checkedChildren: _propTypes2.default.any,
212 /**
213 * 关闭时的内容
214 */
215 unCheckedChildren: _propTypes2.default.any,
216 /**
217 * 开关状态改变是触发此事件
218 * @param {Boolean} checked 是否为打开状态
219 * @param {Event} e DOM事件对象
220 */
221 onChange: _propTypes2.default.func,
222 /**
223 * 开关当前的值(针对受控组件)
224 */
225 checked: _propTypes2.default.bool,
226 /**
227 * 开关默认值 (针对非受控组件)
228 */
229 defaultChecked: _propTypes2.default.bool,
230 /**
231 * 表示开关被禁用
232 */
233 disabled: _propTypes2.default.bool,
234 /**
235 * loading
236 */
237 loading: _propTypes2.default.bool,
238 /**
239 * switch的尺寸
240 * @enumdesc 正常大小, 缩小版大小
241 */
242 size: _propTypes2.default.oneOf(['medium', 'small']),
243 /**
244 * 鼠标点击事件
245 * @param {Event} e DOM事件对象
246 */
247 onClick: _propTypes2.default.func,
248 /**
249 * 键盘按键事件
250 * @param {Event} e DOM事件对象
251 */
252 onKeyDown: _propTypes2.default.func,
253 /**
254 * 是否为预览态
255 */
256 isPreview: _propTypes2.default.bool,
257 /**
258 * 预览态模式下渲染的内容
259 * @param {number} value 评分值
260 */
261 renderPreview: _propTypes2.default.func,
262 /**
263 * 开启后宽度根据内容自适应
264 * @version 1.23
265 */
266 autoWidth: _propTypes2.default.bool,
267 /**
268 * 国际化配置
269 */
270 locale: _propTypes2.default.object
271}, _class.defaultProps = {
272 prefix: 'next-',
273 size: 'medium',
274 disabled: false,
275 defaultChecked: false,
276 isPreview: false,
277 loading: false,
278 readOnly: false,
279 autoWidth: false,
280 onChange: function onChange() {},
281 locale: _zhCn2.default.Switch
282}, _temp);
283Switch.displayName = 'Switch';
284exports.default = _configProvider2.default.config((0, _reactLifecyclesCompat.polyfill)(Switch));
285module.exports = exports['default'];
\No newline at end of file