wix-style-react
Version:
192 lines (158 loc) • 7.43 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 _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;