UNPKG

3.59 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
5exports.__esModule = true;
6exports.default = void 0;
7
8var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
10var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
11
12var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose"));
13
14var _react = _interopRequireDefault(require("react"));
15
16var _invariant = _interopRequireDefault(require("invariant"));
17
18var _uncontrollable = require("uncontrollable");
19
20var _createChainedFunction = _interopRequireDefault(require("./utils/createChainedFunction"));
21
22var _ElementChildren = require("./utils/ElementChildren");
23
24var _ButtonGroup = _interopRequireDefault(require("./ButtonGroup"));
25
26var _ToggleButton = _interopRequireDefault(require("./ToggleButton"));
27
28var defaultProps = {
29 type: 'radio'
30};
31
32var ToggleButtonGroup =
33/*#__PURE__*/
34function (_React$Component) {
35 (0, _inheritsLoose2.default)(ToggleButtonGroup, _React$Component);
36
37 function ToggleButtonGroup() {
38 return _React$Component.apply(this, arguments) || this;
39 }
40
41 var _proto = ToggleButtonGroup.prototype;
42
43 _proto.getValues = function getValues() {
44 var value = this.props.value;
45 return value == null ? [] : [].concat(value);
46 };
47
48 _proto.handleToggle = function handleToggle(value, event) {
49 var _this$props = this.props,
50 type = _this$props.type,
51 onChange = _this$props.onChange;
52 var values = this.getValues();
53 var isActive = values.indexOf(value) !== -1;
54
55 if (type === 'radio') {
56 if (!isActive) onChange(value, event);
57 return;
58 }
59
60 if (isActive) {
61 onChange(values.filter(function (n) {
62 return n !== value;
63 }), event);
64 } else {
65 onChange([].concat(values, [value]), event);
66 }
67 };
68
69 _proto.render = function render() {
70 var _this = this;
71
72 var _this$props2 = this.props,
73 children = _this$props2.children,
74 type = _this$props2.type,
75 name = _this$props2.name,
76 props = (0, _objectWithoutPropertiesLoose2.default)(_this$props2, ["children", "type", "name"]);
77 delete props.onChange;
78 delete props.value;
79 var values = this.getValues();
80 !(type !== 'radio' || !!name) ? process.env.NODE_ENV !== "production" ? (0, _invariant.default)(false, 'A `name` is required to group the toggle buttons when the `type` ' + 'is set to "radio"') : invariant(false) : void 0;
81 return _react.default.createElement(_ButtonGroup.default, (0, _extends2.default)({}, props, {
82 toggle: true
83 }), (0, _ElementChildren.map)(children, function (child) {
84 var _child$props = child.props,
85 value = _child$props.value,
86 onChange = _child$props.onChange;
87
88 var handler = function handler(e) {
89 return _this.handleToggle(value, e);
90 };
91
92 return _react.default.cloneElement(child, {
93 type: type,
94 name: child.name || name,
95 checked: values.indexOf(value) !== -1,
96 onChange: (0, _createChainedFunction.default)(onChange, handler)
97 });
98 }));
99 };
100
101 return ToggleButtonGroup;
102}(_react.default.Component);
103
104ToggleButtonGroup.defaultProps = defaultProps;
105var UncontrolledToggleButtonGroup = (0, _uncontrollable.uncontrollable)(ToggleButtonGroup, {
106 value: 'onChange'
107});
108UncontrolledToggleButtonGroup.Button = _ToggleButton.default;
109var _default = UncontrolledToggleButtonGroup;
110exports.default = _default;
111module.exports = exports["default"];
\No newline at end of file