wix-style-react
Version:
178 lines (146 loc) • 7.26 kB
JavaScript
"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;