UNPKG

3.12 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 vertical: false
29};
30
31var ToggleButtonGroup = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
32 var _useUncontrolled = (0, _uncontrollable.useUncontrolled)(props, {
33 value: 'onChange'
34 }),
35 children = _useUncontrolled.children,
36 type = _useUncontrolled.type,
37 name = _useUncontrolled.name,
38 value = _useUncontrolled.value,
39 onChange = _useUncontrolled.onChange,
40 controlledProps = (0, _objectWithoutPropertiesLoose2.default)(_useUncontrolled, ["children", "type", "name", "value", "onChange"]);
41
42 var getValues = function getValues() {
43 return value == null ? [] : [].concat(value);
44 };
45
46 var handleToggle = function handleToggle(inputVal, event) {
47 if (!onChange) {
48 return;
49 }
50
51 var values = getValues();
52 var isActive = values.indexOf(inputVal) !== -1;
53
54 if (type === 'radio') {
55 if (!isActive && onChange) onChange(inputVal, event);
56 return;
57 }
58
59 if (isActive) {
60 onChange(values.filter(function (n) {
61 return n !== inputVal;
62 }), event);
63 } else {
64 onChange([].concat(values, [inputVal]), event);
65 }
66 };
67
68 !(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;
69 return /*#__PURE__*/_react.default.createElement(_ButtonGroup.default, (0, _extends2.default)({}, controlledProps, {
70 ref: ref,
71 toggle: true
72 }), (0, _ElementChildren.map)(children, function (child) {
73 var values = getValues();
74 var _child$props = child.props,
75 childVal = _child$props.value,
76 childOnChange = _child$props.onChange;
77
78 var handler = function handler(e) {
79 return handleToggle(childVal, e);
80 };
81
82 return /*#__PURE__*/_react.default.cloneElement(child, {
83 type: type,
84 name: child.name || name,
85 checked: values.indexOf(childVal) !== -1,
86 onChange: (0, _createChainedFunction.default)(childOnChange, handler)
87 });
88 }));
89});
90
91ToggleButtonGroup.defaultProps = defaultProps;
92ToggleButtonGroup.Button = _ToggleButton.default;
93var _default = ToggleButtonGroup;
94exports.default = _default;
95module.exports = exports["default"];
\No newline at end of file