UNPKG

wix-style-react

Version:
297 lines (250 loc) • 12.7 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 _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 _wixAnimations = require("wix-animations"); var _propTypes = _interopRequireDefault(require("prop-types")); var _ChevronDown = _interopRequireDefault(require("wix-ui-icons-common/ChevronDown")); var _ChevronUp = _interopRequireDefault(require("wix-ui-icons-common/ChevronUp")); var _context = require("../../WixStyleReactProvider/context"); var _Text = _interopRequireDefault(require("../../Text")); var _Button = _interopRequireDefault(require("../../Button")); var _TextButton = _interopRequireDefault(require("../../TextButton")); var _constants = require("../constants"); var _AccordionItemSt = require("./AccordionItem.st.css"); 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 AccordionItem = /*#__PURE__*/function (_React$PureComponent) { (0, _inherits2["default"])(AccordionItem, _React$PureComponent); var _super = _createSuper(AccordionItem); function AccordionItem() { var _this; (0, _classCallCheck2["default"])(this, AccordionItem); 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", { hover: false }); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_onMouseLeave", function (e) { var _this$props = _this.props, disabled = _this$props.disabled, onMouseLeave = _this$props.onMouseLeave; _this.setState({ hover: false }); !disabled && onMouseLeave && onMouseLeave(e); }); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_onMouseEnter", function (e) { var _this$props2 = _this.props, disabled = _this$props2.disabled, onMouseEnter = _this$props2.onMouseEnter; _this.setState({ hover: true }); !disabled && onMouseEnter && onMouseEnter(e); }); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_renderOpenButton", function (show) { var _this$props3 = _this.props, expandLabel = _this$props3.expandLabel, buttonType = _this$props3.buttonType, skin = _this$props3.skin, disabled = _this$props3.disabled; var commonProps = { disabled: disabled, skin: skin === _constants.skins.neutral ? 'dark' : 'standard', dataHook: _constants.dataHooks.toggleButton }; var label; if (buttonType === _constants.buttonTypes.node) { label = show && expandLabel; } if (buttonType === _constants.buttonTypes.button && expandLabel) { label = show && /*#__PURE__*/_react["default"].createElement(_Button["default"], (0, _extends2["default"])({}, commonProps, { size: "small", children: expandLabel })); } if (buttonType === _constants.buttonTypes.textButton) { label = /*#__PURE__*/_react["default"].createElement(_TextButton["default"], (0, _extends2["default"])({}, commonProps, { suffixIcon: /*#__PURE__*/_react["default"].createElement(_ChevronDown["default"], { size: "24px" }), children: show && expandLabel })); } return label; }); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_renderCloseButton", function (show) { var _this$props4 = _this.props, collapseLabel = _this$props4.collapseLabel, buttonType = _this$props4.buttonType, skin = _this$props4.skin, disabled = _this$props4.disabled; var commonProps = { disabled: disabled, skin: skin === _constants.skins.neutral ? 'dark' : 'standard', dataHook: _constants.dataHooks.toggleButton }; var label; if (buttonType === _constants.buttonTypes.node) { label = show && collapseLabel; } if (buttonType === _constants.buttonTypes.button && collapseLabel) { label = show && /*#__PURE__*/_react["default"].createElement(_Button["default"], (0, _extends2["default"])({}, commonProps, { size: "small", priority: "secondary", children: collapseLabel })); } if (buttonType === _constants.buttonTypes.textButton) { label = /*#__PURE__*/_react["default"].createElement(_TextButton["default"], (0, _extends2["default"])({}, commonProps, { suffixIcon: /*#__PURE__*/_react["default"].createElement(_ChevronUp["default"], { size: "24px" }), children: show && collapseLabel })); } return label; }); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_renderButton", function () { var _this$props5 = _this.props, showLabel = _this$props5.showLabel, buttonType = _this$props5.buttonType, open = _this$props5.open; var hover = _this.state.hover; var showLabelValue = showLabel; // Only for buttonType='button', showLabel should be 'always' by default. if (!showLabelValue) { showLabelValue = buttonType === _constants.buttonTypes.button ? _constants.SHOW_LABEL.always : _constants.SHOW_LABEL.hover; } if (showLabelValue === _constants.SHOW_LABEL.always) { return open ? _this._renderCloseButton(true) : _this._renderOpenButton(true); } if (showLabelValue === _constants.SHOW_LABEL.hover) { return open ? _this._renderCloseButton(hover) : _this._renderOpenButton(hover); } }); return _this; } (0, _createClass2["default"])(AccordionItem, [{ key: "render", value: function render() { var _this2 = this; var _this$props6 = this.props, icon = _this$props6.icon, title = _this$props6.title, subtitle = _this$props6.subtitle, open = _this$props6.open, children = _this$props6.children, onToggle = _this$props6.onToggle, disabled = _this$props6.disabled, skin = _this$props6.skin, hideShadow = _this$props6.hideShadow, className = _this$props6.className, size = _this$props6.size, horizontalPadding = _this$props6.horizontalPadding, last = _this$props6.last, transitionSpeed = _this$props6.transitionSpeed, onAnimationEnter = _this$props6.onAnimationEnter, onAnimationExit = _this$props6.onAnimationExit; var hover = this.state.hover; return /*#__PURE__*/_react["default"].createElement(_context.WixStyleReactContext.Consumer, null, function (_ref) { var reducedSpacingAndImprovedLayout = _ref.reducedSpacingAndImprovedLayout; return /*#__PURE__*/_react["default"].createElement("div", { className: (0, _AccordionItemSt.st)(_AccordionItemSt.classes.root, { disabled: disabled, hover: hover, open: open, skin: skin, hideShadow: hideShadow, size: size, horizontalPadding: horizontalPadding, last: last, reducedSpacingAndImprovedLayout: reducedSpacingAndImprovedLayout }, className) }, /*#__PURE__*/_react["default"].createElement("div", { "data-hook": _constants.dataHooks.item }, /*#__PURE__*/_react["default"].createElement("div", { onClick: !disabled ? onToggle : null, className: (0, _AccordionItemSt.st)(_AccordionItemSt.classes.header, { size: size }), "data-hook": "header", onMouseEnter: _this2._onMouseEnter, onMouseLeave: _this2._onMouseLeave }, icon && /*#__PURE__*/_react["default"].createElement("div", { className: _AccordionItemSt.classes.icon, "data-hook": "icon" }, icon), /*#__PURE__*/_react["default"].createElement("div", { className: _AccordionItemSt.classes.titleWrapper }, title && /*#__PURE__*/_react["default"].createElement("div", { "data-hook": "titleContainer" }, typeof title === 'string' ? /*#__PURE__*/_react["default"].createElement(_Text["default"], { dataHook: "title", ellipsis: true, weight: "normal" }, title) : title), subtitle && /*#__PURE__*/_react["default"].createElement("div", { "data-hook": _constants.dataHooks.subtitle }, typeof subtitle === 'string' ? /*#__PURE__*/_react["default"].createElement(_Text["default"], { size: "small" }, subtitle) : subtitle)), /*#__PURE__*/_react["default"].createElement("div", { className: _AccordionItemSt.classes.toggleButton, "data-hook": "toggle-accordion-wrapper", children: _this2._renderButton() })), /*#__PURE__*/_react["default"].createElement(_wixAnimations.Animator, { show: open, height: true, timing: _constants.transitionSpeedMap[transitionSpeed], onAnimationEnter: onAnimationEnter, onAnimationExit: onAnimationExit }, /*#__PURE__*/_react["default"].createElement("div", { "data-hook": "children", className: _AccordionItemSt.classes.children }, children)))); }); } }]); return AccordionItem; }(_react["default"].PureComponent); (0, _defineProperty2["default"])(AccordionItem, "displayName", 'AccordionItem'); (0, _defineProperty2["default"])(AccordionItem, "propTypes", { buttonType: _propTypes["default"].oneOf(['textButton', 'button', 'node']), title: _propTypes["default"].node, subtitle: _propTypes["default"].node, expandLabel: _propTypes["default"].node, collapseLabel: _propTypes["default"].node, showLabel: _propTypes["default"].oneOf(['hover', 'always']), children: _propTypes["default"].node, icon: _propTypes["default"].node, open: _propTypes["default"].bool, initiallyOpen: _propTypes["default"].bool, disabled: _propTypes["default"].bool, onToggle: _propTypes["default"].func, onMouseEnter: _propTypes["default"].func, onMouseLeave: _propTypes["default"].func, skin: _propTypes["default"].oneOf(['standard', 'light', 'neutral']), hideShadow: _propTypes["default"].bool, className: _propTypes["default"].string, size: _propTypes["default"].oneOf(['tiny', 'small', 'medium', 'large']), horizontalPadding: _propTypes["default"].oneOf(['tiny', 'small', 'medium', 'large']), transitionSpeed: _propTypes["default"].oneOf(['slow', 'medium', 'fast']), onAnimationEnter: _propTypes["default"].func, onAnimationExit: _propTypes["default"].func }); (0, _defineProperty2["default"])(AccordionItem, "defaultProps", { buttonType: 'textButton' }); var _default = AccordionItem; exports["default"] = _default;