UNPKG

wix-style-react

Version:
178 lines (146 loc) • 7.26 kB
"use strict"; 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 _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); 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 _Text = _interopRequireDefault(require("../Text")); var _constants = require("./constants"); var _Tab = _interopRequireDefault(require("./Tab")); var _CardFolderTabsSt = require("./CardFolderTabs.st.css"); var _Focusable = require("wix-ui-core/dist/src/hocs/Focusable"); 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 tabButton = function tabButton(_ref) { var className = _ref.className, id = _ref.id, name = _ref.name, disabled = _ref.disabled, selected = _ref.selected, maxTabWidth = _ref.maxTabWidth, onTabChange = _ref.onTabChange, focusableOnFocus = _ref.focusableOnFocus, focusableOnBlur = _ref.focusableOnBlur, fluid = _ref.fluid, ellipsis = _ref.ellipsis, size = _ref.size, beforeSelected = _ref.beforeSelected, afterSelected = _ref.afterSelected; return /*#__PURE__*/_react["default"].createElement("button", { "data-hook": _constants.dataHooks.tabButton(id), className: (0, _CardFolderTabsSt.st)(_CardFolderTabsSt.classes.button, { selected: selected, disabled: disabled, fluid: fluid, beforeSelected: beforeSelected, afterSelected: afterSelected }, className), style: fluid ? {} : (0, _defineProperty2["default"])({}, _CardFolderTabsSt.vars['maxWidth'], maxTabWidth), onClick: function onClick() { return onTabChange(id); }, disabled: disabled, key: id, onFocus: focusableOnFocus, onBlur: focusableOnBlur }, /*#__PURE__*/_react["default"].createElement(_Text["default"], { dataHook: _constants.dataHooks.tabText(id), ellipsis: ellipsis, className: _CardFolderTabsSt.classes.buttonText, size: size }, name)); }; var TabButton = (0, _Focusable.withFocusable)(tabButton); var CardFolderTabs = /*#__PURE__*/function (_React$PureComponent) { (0, _inherits2["default"])(CardFolderTabs, _React$PureComponent); var _super = _createSuper(CardFolderTabs); function CardFolderTabs() { (0, _classCallCheck2["default"])(this, CardFolderTabs); return _super.apply(this, arguments); } (0, _createClass2["default"])(CardFolderTabs, [{ key: "render", value: function render() { var _this$props = this.props, dataHook = _this$props.dataHook, className = _this$props.className, children = _this$props.children, activeId = _this$props.activeId, maxTabWidth = _this$props.maxTabWidth, onTabChange = _this$props.onTabChange, fluid = _this$props.fluid, ellipsis = _this$props.ellipsis, size = _this$props.size; var cardFolderTabs = Array.isArray(children) ? children : [children]; var selectedTabIndex = cardFolderTabs.findIndex(function (tab) { return activeId === tab.props.id; }); return /*#__PURE__*/_react["default"].createElement("div", { className: (0, _CardFolderTabsSt.st)(_CardFolderTabsSt.classes.root, { fluid: fluid }, className), "data-hook": dataHook }, /*#__PURE__*/_react["default"].createElement("div", { "data-hook": _constants.dataHooks.header, className: _CardFolderTabsSt.classes.headerWrapper }, cardFolderTabs.map(function (_ref3, index) { var props = _ref3.props; return /*#__PURE__*/_react["default"].createElement(TabButton, (0, _extends2["default"])({ key: props.id }, props, { selected: activeId === props.id, beforeSelected: index === selectedTabIndex - 1, afterSelected: index === selectedTabIndex + 1, maxTabWidth: maxTabWidth, fluid: fluid, ellipsis: ellipsis, size: size, onTabChange: typeof onTabChange === 'function' ? onTabChange : undefined })); })), /*#__PURE__*/_react["default"].createElement("div", { "data-hook": _constants.dataHooks.content, className: _CardFolderTabsSt.classes.tabContentWrapper }, cardFolderTabs.filter(function (tab) { return activeId === tab.props.id; }))); } }]); return CardFolderTabs; }(_react["default"].PureComponent); CardFolderTabs.displayName = 'CardFolderTabs'; CardFolderTabs.propTypes = { /** Applies a data-hook HTML attribute that can be used in the tests. */ dataHook: _propTypes["default"].string, /** Specifies a CSS class name to be appended to the component’s root element. */ className: _propTypes["default"].string, /** Specifies an id of a currently visible tab. */ activeId: _propTypes["default"].string.isRequired, /** Defines a callback function which is called on tab change. An id of a newly selected tab is passed as a parameter. */ onTabChange: _propTypes["default"].func, /** Defines a maximum width of a tab button. */ maxTabWidth: _propTypes["default"].oneOfType([_propTypes["default"].number, _propTypes["default"].string]), /** Stretches tabs to fill a 100% of a parent container width */ fluid: _propTypes["default"].bool, /** Specifies whether text that exceeds tab width is truncated with ellipsis. If false, text will wrap to another line. */ ellipsis: _propTypes["default"].bool, /** Controls tab label font size */ size: _propTypes["default"].oneOf(['medium', 'small']) }; CardFolderTabs.defaultProps = { maxTabWidth: '138px', ellipsis: true, size: 'medium', fluid: false }; CardFolderTabs.Tab = _Tab["default"]; var _default = CardFolderTabs; exports["default"] = _default;