wix-style-react
Version:
136 lines (112 loc) • 5.14 kB
JavaScript
import _extends from "@babel/runtime/helpers/extends";
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
import _createClass from "@babel/runtime/helpers/createClass";
import _inherits from "@babel/runtime/helpers/inherits";
import _possibleConstructorReturn from "@babel/runtime/helpers/possibleConstructorReturn";
import _getPrototypeOf from "@babel/runtime/helpers/getPrototypeOf";
import _defineProperty from "@babel/runtime/helpers/defineProperty";
var _excluded = ["skin", "size", "className", "dataHook", "children"];
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(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; } }
import React, { PureComponent } from 'react';
import { ThemeProviderConsumerBackwardCompatible } from '../ThemeProvider/ThemeProviderConsumerBackwardCompatible';
import { generateDataAttr } from '../utils/generateDataAttr';
import { ButtonNext } from "wix-ui-core/dist/es/src/components/button-next";
import Close from 'wix-ui-icons-common/system/Close';
import CloseLarge from 'wix-ui-icons-common/system/CloseLarge';
import { SIZES } from './constants';
import PropTypes from 'prop-types';
import { st, classes } from './CloseButton.st.css';
var childSize = '18px';
var CloseButton = /*#__PURE__*/function (_PureComponent) {
_inherits(CloseButton, _PureComponent);
var _super = _createSuper(CloseButton);
function CloseButton() {
_classCallCheck(this, CloseButton);
return _super.apply(this, arguments);
}
_createClass(CloseButton, [{
key: "_renderCloseIcon",
value: function _renderCloseIcon(Icon, size) {
var CloseIcon;
if (size === SIZES.small) {
// fallback to Close icon if children not provided (current behavior)
CloseIcon = /*#__PURE__*/React.createElement(Icon, {
"data-hook": "close"
});
} else if (size === SIZES.medium) {
CloseIcon = /*#__PURE__*/React.createElement(Icon, {
"data-hook": "close-medium"
});
} else {
CloseIcon = /*#__PURE__*/React.createElement(Icon, {
"data-hook": "close-large",
size: "12"
});
}
return CloseIcon;
}
}, {
key: "render",
value: function render() {
var _this = this;
var _this$props = this.props,
skin = _this$props.skin,
size = _this$props.size,
className = _this$props.className,
dataHook = _this$props.dataHook,
children = _this$props.children,
rest = _objectWithoutProperties(_this$props, _excluded);
return /*#__PURE__*/React.createElement(ButtonNext, _extends({}, rest, {
className: st(classes.root, {
skin: skin,
size: size
}, className)
}, generateDataAttr(this.props, ['skin', 'size']), {
"data-hook": dataHook
}), children ? /*#__PURE__*/React.cloneElement(children, {
size: childSize,
width: childSize,
height: childSize
}) : /*#__PURE__*/React.createElement(ThemeProviderConsumerBackwardCompatible, {
defaultIcons: {
CloseButton: {
small: Close,
medium: CloseLarge,
large: CloseLarge
}
}
}, function (_ref) {
var icons = _ref.icons;
return _this._renderCloseIcon(icons.CloseButton[size], size);
}));
}
}]);
return CloseButton;
}(PureComponent);
_defineProperty(CloseButton, "displayName", 'CloseButton');
_defineProperty(CloseButton, "propTypes", {
/** render as some other component or DOM tag */
as: PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.string]),
/** additional css classes */
className: PropTypes.string,
/** Used for passing any wix-style-react icon. For external icon make sure to follow ux sizing guidelines */
children: PropTypes.node,
/** skins of closebutton */
skin: PropTypes.oneOf(['standard', 'standardFilled', 'light', 'lightFilled', 'dark', 'transparent']),
/** size of closebutton */
size: PropTypes.oneOf(['small', 'medium', 'large']),
/** Click event handler */
onClick: PropTypes.func,
/** applies disabled styles */
disabled: PropTypes.bool,
/** string based data hook for testing */
dataHook: PropTypes.string
});
_defineProperty(CloseButton, "defaultProps", {
skin: 'standard',
size: 'small',
disabled: false
});
export default CloseButton;