wix-style-react
Version:
276 lines (224 loc) • 12.2 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
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 _context = require("../WixStyleReactProvider/context");
var _Content = _interopRequireDefault(require("./components/Content"));
var _Layout = require("../Layout");
var _Proportion = _interopRequireDefault(require("../Proportion"));
var _constants = require("./constants");
var _MarketingLayoutSt = require("./MarketingLayout.st.css");
var _colorsSt = require("../Foundation/stylable/colors.st.css");
var _deprecationLog = _interopRequireDefault(require("../utils/deprecationLog"));
var _cellSpansBySize, _imagePlaceholderAspe;
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 cellSpansBySize = (_cellSpansBySize = {}, (0, _defineProperty2["default"])(_cellSpansBySize, _constants.SIZES.tiny, {
image: 4,
content: 8
}), (0, _defineProperty2["default"])(_cellSpansBySize, _constants.SIZES.small, {
image: 3,
spacer: 1,
content: 8
}), (0, _defineProperty2["default"])(_cellSpansBySize, _constants.SIZES.medium, {
image: 4,
spacer: 1,
content: 7
}), (0, _defineProperty2["default"])(_cellSpansBySize, _constants.SIZES.large, {
image: 5,
spacer: 1,
content: 6
}), _cellSpansBySize);
var imagePlaceholderAspectRatioBySize = (_imagePlaceholderAspe = {}, (0, _defineProperty2["default"])(_imagePlaceholderAspe, _constants.SIZES.tiny, 1), (0, _defineProperty2["default"])(_imagePlaceholderAspe, _constants.SIZES.small, 1), (0, _defineProperty2["default"])(_imagePlaceholderAspe, _constants.SIZES.medium, 282 / 188), (0, _defineProperty2["default"])(_imagePlaceholderAspe, _constants.SIZES.large, 360 / 240), _imagePlaceholderAspe);
/** Marketing layout is a layout designed to promote new features or display first time visit.
* Component has title, description, action and illustration areas. */
var MarketingLayout = /*#__PURE__*/function (_React$PureComponent) {
(0, _inherits2["default"])(MarketingLayout, _React$PureComponent);
var _super = _createSuper(MarketingLayout);
function MarketingLayout() {
var _this;
(0, _classCallCheck2["default"])(this, MarketingLayout);
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), "_renderSpacerCell", function (span) {
return /*#__PURE__*/_react["default"].createElement(_Layout.Cell, {
key: "spacer",
span: span
});
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_renderImagePlaceholder", function () {
var size = _this.props.size;
return /*#__PURE__*/_react["default"].createElement(_Proportion["default"], {
aspectRatio: imagePlaceholderAspectRatioBySize[size]
}, /*#__PURE__*/_react["default"].createElement("div", {
className: _MarketingLayoutSt.classes.imagePlaceholder
}));
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_renderImageCell", function (span) {
var _this$props = _this.props,
image = _this$props.image,
imageBackgroundColor = _this$props.imageBackgroundColor;
return /*#__PURE__*/_react["default"].createElement(_Layout.Cell, {
key: "image",
span: span
}, /*#__PURE__*/_react["default"].createElement("div", {
className: _MarketingLayoutSt.classes.imageWrapper
}, imageBackgroundColor && /*#__PURE__*/_react["default"].createElement("div", {
className: _MarketingLayoutSt.classes.imageBackground,
style: {
backgroundColor: _colorsSt.stVars[imageBackgroundColor] || imageBackgroundColor
}
}), /*#__PURE__*/_react["default"].createElement("div", {
className: _MarketingLayoutSt.classes.imageContainer
}, typeof image === 'string' ? /*#__PURE__*/_react["default"].createElement("img", {
src: image,
width: "100%"
}) : image || _this._renderImagePlaceholder())));
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_renderContentCell", function (span) {
var _this$props2 = _this.props,
size = _this$props2.size,
actions = _this$props2.actions,
title = _this$props2.title,
description = _this$props2.description,
badge = _this$props2.badge,
hiddenBadge = _this$props2.hiddenBadge;
return /*#__PURE__*/_react["default"].createElement(_Layout.Cell, {
key: "content",
span: span
}, badge && !hiddenBadge && /*#__PURE__*/_react["default"].createElement("div", {
className: _MarketingLayoutSt.classes.badge
}, badge), /*#__PURE__*/_react["default"].createElement(_Content["default"], {
size: size,
actions: actions,
title: title,
description: description,
badge: badge
}));
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_renderContent", function () {
var _this$props3 = _this.props,
direction = _this$props3.direction,
size = _this$props3.size;
var isVertical = direction === _constants.DIRECTIONS.vertical;
return /*#__PURE__*/_react["default"].createElement(_Layout.Layout, {
gap: size === _constants.SIZES.tiny ? '24px' : '30px'
}, isVertical ? _this._renderVerticalCells() : _this._renderHorizontalCells());
});
return _this;
}
(0, _createClass2["default"])(MarketingLayout, [{
key: "_renderHorizontalCells",
value: function _renderHorizontalCells() {
var _this$props4 = this.props,
inverted = _this$props4.inverted,
size = _this$props4.size;
var _cellSpansBySize$size = cellSpansBySize[size],
image = _cellSpansBySize$size.image,
spacer = _cellSpansBySize$size.spacer,
content = _cellSpansBySize$size.content;
var contentCell = this._renderContentCell(content);
var spacerCell = size !== _constants.SIZES.tiny && this._renderSpacerCell(spacer);
var imageCell = this._renderImageCell(image);
return inverted ? [imageCell, contentCell, spacerCell] : [contentCell, spacerCell, imageCell];
}
}, {
key: "_renderVerticalCells",
value: function _renderVerticalCells() {
var _this$props5 = this.props,
inverted = _this$props5.inverted,
image = _this$props5.image;
var imageCell = image && this._renderImageCell(12);
var contentCell = this._renderContentCell(12);
return inverted ? [contentCell, imageCell] : [imageCell, contentCell];
}
}, {
key: "render",
value: function render() {
var _this2 = this;
var _this$props6 = this.props,
size = _this$props6.size,
badge = _this$props6.badge,
hiddenBadge = _this$props6.hiddenBadge,
alignItems = _this$props6.alignItems,
inverted = _this$props6.inverted,
actions = _this$props6.actions,
dataHook = _this$props6.dataHook,
imageBackgroundColor = _this$props6.imageBackgroundColor,
direction = _this$props6.direction;
if (size === _constants.SIZES.large) {
(0, _deprecationLog["default"])("<MarketingLayout/> size large wil be deprecated in the next major version");
}
return /*#__PURE__*/_react["default"].createElement(_context.WixStyleReactContext.Consumer, null, function (_ref) {
var reducedSpacingAndImprovedLayout = _ref.reducedSpacingAndImprovedLayout;
return /*#__PURE__*/_react["default"].createElement("div", {
className: (0, _MarketingLayoutSt.st)(_MarketingLayoutSt.classes.root, {
size: size,
badge: !!badge,
hiddenBadge: hiddenBadge,
alignItems: alignItems,
inverted: inverted,
withActions: !!actions,
withImageBackground: !!imageBackgroundColor,
reducedSpacingAndImprovedLayout: reducedSpacingAndImprovedLayout,
direction: direction
}),
"data-hook": dataHook
}, _this2._renderContent());
});
}
}]);
return MarketingLayout;
}(_react["default"].PureComponent);
(0, _defineProperty2["default"])(MarketingLayout, "displayName", 'MarketingLayout');
(0, _defineProperty2["default"])(MarketingLayout, "propTypes", {
/** Applies a data-hook HTML attribute that can be used in the tests. */
dataHook: _propTypes["default"].string,
/** Accepts image URL or a custom element to be displayed on the side of content. */
image: _propTypes["default"].node,
/** Specifies image area background color. Can be a keyword from color palette or any supported CSS color value (HEX, RGB, etc.). */
imageBackgroundColor: _propTypes["default"].string,
/**
* Controls the size of the marketing layout.<br/>
* Large size will be deprecated in the next major version.
*/
size: _propTypes["default"].oneOf(['tiny', 'small', 'medium', 'large']),
/** Controls content direction. */
direction: _propTypes["default"].oneOf(['horizontal', 'vertical']),
/** Controls the vertical alignment of the content. */
alignItems: _propTypes["default"].oneOf(['center', 'stretch']),
/** Flips content layout. If true, image will be displayed on the left side of the content. */
inverted: _propTypes["default"].bool,
/** Sets marketing layout actions. Accepts single or multiple interactive components. Most commonly contain `<Button/>` or `<TextButton/>`. */
actions: _propTypes["default"].node,
/** Sets the marketing layout title. Accepts text string or a custom element. */
title: _propTypes["default"].node,
/** Sets the marketing layout description. Accepts text string or a custom element. */
description: _propTypes["default"].node,
/** Adds a container for a `<Badge/>` component at the top left corner. Affect component height. */
badge: _propTypes["default"].node,
/** Specifies whether the badge is hidden. Can be used to add additional vertical spacing, if no badge is given. */
hiddenBadge: _propTypes["default"].bool
});
(0, _defineProperty2["default"])(MarketingLayout, "defaultProps", {
size: 'small',
alignItems: 'center',
inverted: false,
direction: 'horizontal',
hiddenBadge: false
});
var _default = MarketingLayout;
exports["default"] = _default;