UNPKG

3 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 _react = _interopRequireDefault(require("react"));
13
14var _invariant = _interopRequireDefault(require("invariant"));
15
16var _uncontrollable = require("uncontrollable");
17
18var _createChainedFunction = _interopRequireDefault(require("./createChainedFunction"));
19
20var _ElementChildren = require("./ElementChildren");
21
22var _ButtonGroup = _interopRequireDefault(require("./ButtonGroup"));
23
24var _ToggleButton = _interopRequireDefault(require("./ToggleButton"));
25
26var defaultProps = {
27 type: 'radio'
28};
29
30var ToggleButtonGroup = _react.default.forwardRef(function (props, ref) {
31 var _useUncontrolled = (0, _uncontrollable.useUncontrolled)(props, {
32 value: 'onChange'
33 }),
34 children = _useUncontrolled.children,
35 type = _useUncontrolled.type,
36 name = _useUncontrolled.name,
37 value = _useUncontrolled.value,
38 onChange = _useUncontrolled.onChange,
39 controlledProps = (0, _objectWithoutPropertiesLoose2.default)(_useUncontrolled, ["children", "type", "name", "value", "onChange"]);
40
41 var getValues = function getValues() {
42 return value == null ? [] : [].concat(value);
43 };
44
45 var handleToggle = function handleToggle(inputVal, event) {
46 var values = getValues();
47 var isActive = values.indexOf(inputVal) !== -1;
48
49 if (type === 'radio') {
50 if (!isActive) onChange(inputVal, event);
51 return;
52 }
53
54 if (isActive) {
55 onChange(values.filter(function (n) {
56 return n !== inputVal;
57 }), event);
58 } else {
59 onChange([].concat(values, [inputVal]), event);
60 }
61 };
62
63 !(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;
64 return _react.default.createElement(_ButtonGroup.default, (0, _extends2.default)({}, controlledProps, {
65 ref: ref,
66 toggle: true
67 }), (0, _ElementChildren.map)(children, function (child) {
68 var values = getValues();
69 var _child$props = child.props,
70 childVal = _child$props.value,
71 childOnChange = _child$props.onChange;
72
73 var handler = function handler(e) {
74 return handleToggle(childVal, e);
75 };
76
77 return _react.default.cloneElement(child, {
78 type: type,
79 name: child.name || name,
80 checked: values.indexOf(childVal) !== -1,
81 onChange: (0, _createChainedFunction.default)(childOnChange, handler)
82 });
83 }));
84});
85
86ToggleButtonGroup.defaultProps = defaultProps;
87ToggleButtonGroup.Button = _ToggleButton.default;
88var _default = ToggleButtonGroup;
89exports.default = _default;
90module.exports = exports["default"];
\No newline at end of file