wix-style-react
Version:
171 lines (129 loc) • 7.14 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _react = _interopRequireDefault(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _SegmentedToggleSt = require("./SegmentedToggle.st.css");
var _ToggleButton = _interopRequireDefault(require("./ToggleButton/ToggleButton"));
var _ToggleIcon = _interopRequireDefault(require("./ToggleIcon/ToggleIcon"));
var _excluded = ["dataHook", "children", "disabled", "defaultSelected", "onClick", "selected"];
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
var SegmentedToggle = /*#__PURE__*/function (_React$Component) {
(0, _inherits2["default"])(SegmentedToggle, _React$Component);
var _super = _createSuper(SegmentedToggle);
function SegmentedToggle() {
var _this;
(0, _classCallCheck2["default"])(this, SegmentedToggle);
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
_this = _super.call.apply(_super, [this].concat(args));
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "state", {
selected: _this.props.defaultSelected
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_onClick", function (evt) {
var _this$props = _this.props,
onClick = _this$props.onClick,
selected = _this$props.selected;
var value = evt.currentTarget.value;
if (selected) {
return onClick && onClick(evt, value);
}
_this.setState({
selected: value
}, function () {
return onClick && onClick(evt, value);
});
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_addDividers", function (childrenNodes, disabled) {
var childrenNodesWithDividers = [];
var isTransparent = function isTransparent(childNode1, childNode2) {
return childNode1.props.selected !== childNode2.props.selected;
};
for (var i = 0; i < childrenNodes.length - 1; i++) {
var childNode1 = childrenNodes[i];
var childNode2 = childrenNodes[i + 1];
var transparent = isTransparent(childNode1, childNode2);
var divider = /*#__PURE__*/_react["default"].createElement("div", {
key: "divider-".concat(i),
className: (0, _SegmentedToggleSt.st)(_SegmentedToggleSt.classes.divider, {
disabled: disabled,
transparent: transparent
})
});
childrenNodesWithDividers.push(childNode1, divider);
}
var lastChild = childrenNodes[childrenNodes.length - 1];
childrenNodesWithDividers.push(lastChild);
return childrenNodesWithDividers;
});
return _this;
}
(0, _createClass2["default"])(SegmentedToggle, [{
key: "render",
value: function render() {
var _this2 = this;
var _this$props2 = this.props,
dataHook = _this$props2.dataHook,
children = _this$props2.children,
disabled = _this$props2.disabled,
defaultSelected = _this$props2.defaultSelected,
onClick = _this$props2.onClick,
selected = _this$props2.selected,
rest = (0, _objectWithoutProperties2["default"])(_this$props2, _excluded);
var selection = selected || this.state.selected;
var childrenNodes = _react["default"].Children.map(children, function (child, index) {
return /*#__PURE__*/_react["default"].cloneElement(child, {
disabled: disabled,
'data-click': "segmented-toggle-".concat(index + 1),
'aria-selected': child.props.value === selection,
onClick: _this2._onClick,
selected: child.props.value === selection
});
});
childrenNodes = this._addDividers(childrenNodes, disabled);
return /*#__PURE__*/_react["default"].createElement("div", (0, _extends2["default"])({}, rest, {
"data-hook": dataHook,
className: (0, _SegmentedToggleSt.st)(_SegmentedToggleSt.classes.root, {
disabled: disabled
})
}), childrenNodes);
}
}]);
return SegmentedToggle;
}(_react["default"].Component);
(0, _defineProperty2["default"])(SegmentedToggle, "displayName", 'SegmentedToggle');
(0, _defineProperty2["default"])(SegmentedToggle, "propTypes", {
/** Applies a data-hook HTML attribute that can be used in the tests */
dataHook: _propTypes["default"].string,
/** Specifies the initially selected option */
defaultSelected: _propTypes["default"].node,
/** Specifies whether an option is selected */
selected: _propTypes["default"].node,
/** Defines a callback function which is called every time option is clicked. Returns a selected element and its value. */
onClick: _propTypes["default"].func,
/** Specifies whether interactions are disabled. */
disabled: _propTypes["default"].bool,
/** Accepts <SegmentedToggle.Icon/> or <SegmentedToggle.Button/> as child items to list down available options */
children: _propTypes["default"].array.isRequired
});
(0, _defineProperty2["default"])(SegmentedToggle, "defaultProps", {
children: []
});
SegmentedToggle.Button = _ToggleButton["default"];
SegmentedToggle.Icon = _ToggleIcon["default"];
var _default = SegmentedToggle;
exports["default"] = _default;