UNPKG

6.08 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6
7var _react = require('react');
8
9var _react2 = _interopRequireDefault(_react);
10
11var _propTypes = require('prop-types');
12
13var _propTypes2 = _interopRequireDefault(_propTypes);
14
15var _Checkbox = require('./Checkbox');
16
17var _Checkbox2 = _interopRequireDefault(_Checkbox);
18
19var _lodash = require('lodash.isequal');
20
21var _lodash2 = _interopRequireDefault(_lodash);
22
23function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
24
25function _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; }
26
27function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
28
29function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
30
31function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : _defaults(subClass, superClass); }
32
33var propTypes = {
34 clsPrefix: _propTypes2["default"].string,
35 value: _propTypes2["default"].array,
36 onChange: _propTypes2["default"].func,
37 disabled: _propTypes2["default"].bool,
38 options: _propTypes2["default"].array,
39 defaultValue: _propTypes2["default"].array
40};
41
42var defaultProps = {
43 clsPrefix: 'u-checkbox-group',
44 onChange: function onChange() {},
45 disabled: false,
46 options: []
47};
48
49var CheckboxGroup = function (_React$Component) {
50 _inherits(CheckboxGroup, _React$Component);
51
52 function CheckboxGroup(props) {
53 _classCallCheck(this, CheckboxGroup);
54
55 var _this = _possibleConstructorReturn(this, _React$Component.call(this, props));
56
57 _this.changeHandle = function (v) {
58 var values = _this.state.values;
59 if (values.indexOf(v) != -1) {
60 values.splice(values.indexOf(v), 1);
61 } else {
62 values.push(v);
63 }
64 _this.setState({
65 values: values
66 });
67 var onChange = _this.props.onChange;
68
69 if (onChange) {
70 var options = _this.getOptions();
71 onChange(values.filter(function (val) {
72 return values.indexOf(val) !== -1;
73 }).sort(function (a, b) {
74 var indexA = options.findIndex(function (opt) {
75 return opt.value === a;
76 });
77 var indexB = options.findIndex(function (opt) {
78 return opt.value === b;
79 });
80 return indexA - indexB;
81 }));
82 }
83 };
84
85 _this.state = {
86 values: props.value || props.defaultValue || []
87 };
88 return _this;
89 }
90
91 CheckboxGroup.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {
92 if (!(0, _lodash2["default"])(nextProps.value, this.state.values)) {
93 this.setState({
94 values: nextProps.value
95 });
96 }
97 };
98
99 CheckboxGroup.prototype.getOptions = function getOptions() {
100 var options = this.props.options;
101
102 return options.map(function (option) {
103 if (typeof option === 'string') {
104 return {
105 label: option,
106 value: option
107 };
108 }
109 return option;
110 });
111 };
112
113 CheckboxGroup.prototype.render = function render() {
114 var _this2 = this;
115
116 var state = this.state;
117 var props = this.props;
118 var clsPrefix = props.clsPrefix,
119 className = props.className,
120 disabled = props.disabled,
121 children = props.children,
122 options = props.options;
123
124 var classes = clsPrefix;
125 if (className) classes += ' ' + className;
126 if (options && options.length > 0) {
127 children = this.getOptions().map(function (option) {
128 return _react2["default"].createElement(
129 _Checkbox2["default"],
130 {
131 key: option.value.toString(),
132 disabled: 'disabled' in option ? option.disabled : props.disabled,
133 value: option.value,
134 checked: state.values.indexOf(option.value) !== -1,
135 onChange: option.onChange
136 },
137 option.label
138 );
139 });
140 }
141 return _react2["default"].createElement(
142 'div',
143 { className: classes },
144 _react2["default"].Children.map(children, function (child) {
145 return _react2["default"].cloneElement(child, {
146 onChange: function onChange() {
147 _this2.changeHandle(child.props.value);
148 },
149 checked: state.values.indexOf(child.props.value) != -1,
150 disabled: child.props.disabled || disabled
151 });
152 })
153 );
154 };
155
156 return CheckboxGroup;
157}(_react2["default"].Component);
158
159CheckboxGroup.propTypes = propTypes;
160CheckboxGroup.defaultProps = defaultProps;
161
162exports["default"] = CheckboxGroup;
163module.exports = exports['default'];
\No newline at end of file