UNPKG

wix-style-react

Version:
192 lines (158 loc) • 7.43 kB
"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 _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 _FormFieldError = _interopRequireDefault(require("wix-ui-icons-common/system/FormFieldError")); var _FormFieldErrorSmall = _interopRequireDefault(require("wix-ui-icons-common/system/FormFieldErrorSmall")); var _ToggleOn = _interopRequireDefault(require("wix-ui-icons-common/system/ToggleOn")); var _CircleLoaderCheck = _interopRequireDefault(require("wix-ui-icons-common/system/CircleLoaderCheck")); var _CircleLoaderCheckSmall = _interopRequireDefault(require("wix-ui-icons-common/system/CircleLoaderCheckSmall")); var _Arc = _interopRequireDefault(require("./Arc")); var _Heading = _interopRequireDefault(require("../Heading")); var _Tooltip = _interopRequireDefault(require("../Tooltip")); var _LoaderSt = require("./Loader.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 arcsAngles = { tiny: { light: 216, dark: 144 }, small: { light: 216, dark: 144 }, medium: { light: 108, dark: 108 }, large: { light: 180, dark: 180 } }; var strokeWidths = { tiny: 3, small: 4, medium: 4, large: 4 }; var sizesInPx = { tiny: 18, small: 30, medium: 54, large: 102 }; var FULL_CIRCLE_ANGLE = 359; var sizeToSuccessIcon = { tiny: /*#__PURE__*/_react["default"].createElement(_ToggleOn["default"], null), small: /*#__PURE__*/_react["default"].createElement(_CircleLoaderCheckSmall["default"], null), medium: /*#__PURE__*/_react["default"].createElement(_CircleLoaderCheck["default"], null), large: /*#__PURE__*/_react["default"].createElement(_CircleLoaderCheck["default"], null) }; var sizeToErrorIcon = { tiny: /*#__PURE__*/_react["default"].createElement(_FormFieldError["default"], null), small: /*#__PURE__*/_react["default"].createElement(_FormFieldErrorSmall["default"], null), medium: /*#__PURE__*/_react["default"].createElement(_FormFieldError["default"], null), large: /*#__PURE__*/_react["default"].createElement(_FormFieldError["default"], null) }; var Loader = /*#__PURE__*/function (_React$PureComponent) { (0, _inherits2["default"])(Loader, _React$PureComponent); var _super = _createSuper(Loader); function Loader() { (0, _classCallCheck2["default"])(this, Loader); return _super.apply(this, arguments); } (0, _createClass2["default"])(Loader, [{ key: "render", value: function render() { var _this$props = this.props, dataHook = _this$props.dataHook, size = _this$props.size, color = _this$props.color, text = _this$props.text, status = _this$props.status, statusMessage = _this$props.statusMessage; var sizeInPx = sizesInPx[size]; var shouldShowFullCircle = status !== 'loading'; var lightArcAngle = !shouldShowFullCircle ? arcsAngles[size].light : FULL_CIRCLE_ANGLE; var darkArcAngle = !shouldShowFullCircle ? arcsAngles[size].dark : FULL_CIRCLE_ANGLE; var shouldShowText = size !== 'tiny'; var successIcon = sizeToSuccessIcon[size]; var errorIcon = sizeToErrorIcon[size]; var strokeWidth = strokeWidths[size]; var loader = /*#__PURE__*/_react["default"].createElement("div", { className: _LoaderSt.classes.arcsContainer, style: { width: "".concat(sizeInPx, "px"), height: "".concat(sizeInPx, "px") } }, /*#__PURE__*/_react["default"].createElement(_Arc["default"], { angle: lightArcAngle, className: _LoaderSt.classes.lightArc, strokeWidth: strokeWidth, viewBoxSize: sizeInPx }), /*#__PURE__*/_react["default"].createElement(_Arc["default"], { angle: darkArcAngle, className: _LoaderSt.classes.darkArc, strokeWidth: strokeWidth, viewBoxSize: sizeInPx }), status !== 'loading' && /*#__PURE__*/_react["default"].createElement("div", { className: _LoaderSt.classes.statusIndicator }, status === 'success' && successIcon, status === 'error' && errorIcon)); return /*#__PURE__*/_react["default"].createElement("div", { className: (0, _LoaderSt.st)(_LoaderSt.classes.root, { size: size, color: color, status: status }), "data-hook": dataHook, "data-size": size, "data-color": color, "data-status": status }, statusMessage ? /*#__PURE__*/_react["default"].createElement(_Tooltip["default"], { content: statusMessage, appendTo: "window", dataHook: "loader-tooltip" }, loader) : loader, shouldShowText && text && /*#__PURE__*/_react["default"].createElement("div", { className: _LoaderSt.classes.text }, /*#__PURE__*/_react["default"].createElement(_Heading["default"], { appearance: "H6", dataHook: "loader-text" }, this.props.text))); } }]); return Loader; }(_react["default"].PureComponent); (0, _defineProperty2["default"])(Loader, "displayName", 'Loader'); (0, _defineProperty2["default"])(Loader, "propTypes", { /** Applied as data-hook HTML attribute that can be used in the tests */ dataHook: _propTypes["default"].string, /** The size of the loader */ size: _propTypes["default"].oneOf(['tiny', 'small', 'medium', 'large']), /** The color of the loader */ color: _propTypes["default"].oneOf(['blue', 'white']), /** Node (usually text) to be shown below the loader */ text: _propTypes["default"].node, /** The status of the loader */ status: _propTypes["default"].oneOf(['loading', 'success', 'error']), /** Text to be shown in the tooltip **/ statusMessage: _propTypes["default"].string }); (0, _defineProperty2["default"])(Loader, "defaultProps", { size: 'medium', color: 'blue', status: 'loading' }); var _default = Loader; exports["default"] = _default;