UNPKG

@alicloud/cloud-charts

Version:

![](https://img.shields.io/npm/v/@alicloud/cloud-charts?color=%23ff8200)

178 lines (173 loc) 13.2 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports["default"] = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _react = _interopRequireWildcard(require("react")); var _tinycolor = _interopRequireDefault(require("tinycolor2")); var _index = _interopRequireDefault(require("../../themes/index")); var _Wnumber = _interopRequireDefault(require("../../Wnumber")); var _globalResizeObserver = require("../../common/globalResizeObserver"); require("./index.css"); function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); } function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; } function getClipPath(width, height) { return ['M0,10', "Q" + 0.125 * width + "," + height + " " + 0.25 * width + "," + height / 4, "Q" + 0.375 * width + "," + -height / 4 + " " + 0.5 * width + "," + height / 2, "Q" + 0.625 * width + "," + height + " " + 0.75 * width + "," + height / 4, "Q" + 0.875 * width + "," + -height / 4 + " " + width + "," + height / 2, "L" + width + ",0", "L" + width + "," + height, "L0," + height, 'L0,0', 'Z'].join(' '); } // 实现水位动画一致性 function PercentBar(props) { var _translateStartColor, _config$guide$status3, _config$guide4, _config$guide$thresho2, _config$guide5, _config$guide$status4, _config$guide6, _config$guide$status5, _config$guide7, _config$guide$status6, _config$guide8, _config$guide$thresho3, _config$guide9, _config$percentConfig, _config$labelConfig; var data = props.data, config = props.config, prefix = props.prefix; var ref = (0, _react.useRef)(null); var _useState = (0, _react.useState)(0), width = _useState[0], setWidth = _useState[1]; var _useState2 = (0, _react.useState)(0), offsetX = _useState2[0], setOffsetX = _useState2[1]; var unityAnimation = function unityAnimation(waterWidth) { var _ref$current$getBound, _ref$current, _ref$current$getBound2; var currentX = (_ref$current$getBound = ref === null || ref === void 0 ? void 0 : (_ref$current = ref.current) === null || _ref$current === void 0 ? void 0 : (_ref$current$getBound2 = _ref$current.getBoundingClientRect()) === null || _ref$current$getBound2 === void 0 ? void 0 : _ref$current$getBound2.left) !== null && _ref$current$getBound !== void 0 ? _ref$current$getBound : 0; var capcityList = document.getElementsByClassName(prefix + "-percent-container"); var minX = 9999999; for (var i = 0; i < (capcityList === null || capcityList === void 0 ? void 0 : capcityList.length); i++) { var x_position = capcityList[i].getBoundingClientRect().left; minX = Math.min(minX, x_position); } ; // 计算距离 var distance = Math.ceil(currentX) === Math.ceil(minX) ? 0 : currentX - minX - waterWidth; // 计算偏移,减去最左侧的水位 var offsetX = distance - Math.floor(distance / waterWidth) * waterWidth; setOffsetX(offsetX); }; (0, _react.useEffect)(function () { var timer; var handleResize = function handleResize() { clearTimeout(timer); timer = setTimeout(function () { var _ref$current$clientWi, _ref$current2; if (!ref.current) return; var waterWidth = (_ref$current$clientWi = ref === null || ref === void 0 ? void 0 : (_ref$current2 = ref.current) === null || _ref$current2 === void 0 ? void 0 : _ref$current2.clientWidth) !== null && _ref$current$clientWi !== void 0 ? _ref$current$clientWi : 0; setWidth(waterWidth); if (!config.closeUniAnimation || !_index["default"]['widgets-global-uni-animation'] && _index["default"]['widgets-global-uni-animation'] !== 'true') { unityAnimation(waterWidth); } }, 0); }; handleResize(); var parent = ref.current && ref.current.parentElement; if (parent) { _globalResizeObserver.GlobalResizeObserver.observe(parent, handleResize); } return function () { clearTimeout(timer); var parent = ref.current && ref.current.parentElement; if (parent) { _globalResizeObserver.GlobalResizeObserver.unobserve(parent); } }; }, [ref]); // 默认态是图表主色 var statusColors = { normal: _index["default"]['widgets-capacity-color-grey'], // 平常态是灰色 success: _index["default"]['widgets-color-green'], warning: _index["default"]['widgets-color-orange'], error: _index["default"]['widgets-color-red'] }; var translateStartColor = function translateStartColor(data, config) { if (data.percent.displayNumber === 0 || data.percent.displayNumber === '-' || !data.percent.displayNumber) { return { status: 'empty', color: _index["default"]['widgets-tooltip-cross-line'] }; } else if (config !== null && config !== void 0 && config.guide) { var _ref, _config$guide$thresho, _config$guide; var threshold = Number((_ref = (_config$guide$thresho = config === null || config === void 0 ? void 0 : (_config$guide = config.guide) === null || _config$guide === void 0 ? void 0 : _config$guide.threshold) !== null && _config$guide$thresho !== void 0 ? _config$guide$thresho : '80%') === null || _ref === void 0 ? void 0 : _ref.replace('%', '')); if (data.percent.displayNumber >= threshold) { var _config$guide$status, _config$guide2, _config$guide$status2, _config$guide3; return { status: (_config$guide$status = config === null || config === void 0 ? void 0 : (_config$guide2 = config.guide) === null || _config$guide2 === void 0 ? void 0 : _config$guide2.status) !== null && _config$guide$status !== void 0 ? _config$guide$status : 'error', color: statusColors[(_config$guide$status2 = config === null || config === void 0 ? void 0 : (_config$guide3 = config.guide) === null || _config$guide3 === void 0 ? void 0 : _config$guide3.status) !== null && _config$guide$status2 !== void 0 ? _config$guide$status2 : 'error'] }; } else { var _Object$keys; return { status: (_Object$keys = Object.keys(statusColors)) !== null && _Object$keys !== void 0 && _Object$keys.includes(config === null || config === void 0 ? void 0 : config.startColor) ? config === null || config === void 0 ? void 0 : config.startColor : 'normal', color: statusColors[config === null || config === void 0 ? void 0 : config.startColor] || (config === null || config === void 0 ? void 0 : config.startColor) || _index["default"]['widgets-color-normal'] }; } } else { var _Object$keys2; return { status: (_Object$keys2 = Object.keys(statusColors)) !== null && _Object$keys2 !== void 0 && _Object$keys2.includes(config === null || config === void 0 ? void 0 : config.startColor) ? config === null || config === void 0 ? void 0 : config.startColor : 'normal', color: statusColors[config === null || config === void 0 ? void 0 : config.startColor] || (config === null || config === void 0 ? void 0 : config.startColor) || _index["default"]['widgets-color-normal'] }; } }; return /*#__PURE__*/_react["default"].createElement("div", { className: prefix + "-percent-container", style: (0, _extends2["default"])({ width: (config === null || config === void 0 ? void 0 : config.barSize) || '100%' }, config === null || config === void 0 ? void 0 : config.percentConfig), ref: ref }, /*#__PURE__*/_react["default"].createElement("div", { className: prefix + "-bar-container " + ((_translateStartColor = translateStartColor(data, config)) === null || _translateStartColor === void 0 ? void 0 : _translateStartColor.status), style: config === null || config === void 0 ? void 0 : config.barConfig }, (config === null || config === void 0 ? void 0 : config.guide) && /*#__PURE__*/_react["default"].createElement("div", { className: prefix + "-bar-guide-line " + ((_config$guide$status3 = config === null || config === void 0 ? void 0 : (_config$guide4 = config.guide) === null || _config$guide4 === void 0 ? void 0 : _config$guide4.status) !== null && _config$guide$status3 !== void 0 ? _config$guide$status3 : 'error'), style: { height: (_config$guide$thresho2 = config === null || config === void 0 ? void 0 : (_config$guide5 = config.guide) === null || _config$guide5 === void 0 ? void 0 : _config$guide5.threshold) !== null && _config$guide$thresho2 !== void 0 ? _config$guide$thresho2 : '80%', borderTopColor: statusColors[(_config$guide$status4 = config === null || config === void 0 ? void 0 : (_config$guide6 = config.guide) === null || _config$guide6 === void 0 ? void 0 : _config$guide6.status) !== null && _config$guide$status4 !== void 0 ? _config$guide$status4 : 'error'] } }, /*#__PURE__*/_react["default"].createElement(_Wnumber["default"], { className: prefix + "-bar-guide-text " + ((_config$guide$status5 = config === null || config === void 0 ? void 0 : (_config$guide7 = config.guide) === null || _config$guide7 === void 0 ? void 0 : _config$guide7.status) !== null && _config$guide$status5 !== void 0 ? _config$guide$status5 : 'error'), style: { color: statusColors[(_config$guide$status6 = config === null || config === void 0 ? void 0 : (_config$guide8 = config.guide) === null || _config$guide8 === void 0 ? void 0 : _config$guide8.status) !== null && _config$guide$status6 !== void 0 ? _config$guide$status6 : 'error'] } }, (_config$guide$thresho3 = config === null || config === void 0 ? void 0 : (_config$guide9 = config.guide) === null || _config$guide9 === void 0 ? void 0 : _config$guide9.threshold) !== null && _config$guide$thresho3 !== void 0 ? _config$guide$thresho3 : '-')), /*#__PURE__*/_react["default"].createElement("div", { className: prefix + "-process-bar", style: (0, _extends2["default"])({ width: (config === null || config === void 0 ? void 0 : config.barSize) || (config === null || config === void 0 ? void 0 : (_config$percentConfig = config.percentConfig) === null || _config$percentConfig === void 0 ? void 0 : _config$percentConfig.width) || '100%', height: data.percent.displayNumber === 0 || data.percent.displayNumber === '-' ? '15px' : "calc(" + data.percent.displayNumber + "% + 15px)" }, config === null || config === void 0 ? void 0 : config.processBarConfig) }, /*#__PURE__*/_react["default"].createElement("div", { className: prefix + "-process-back", style: (0, _extends2["default"])({ background: "linear-gradient(180deg, transparent 19px, " + translateStartColor(data, config).color + " 0%, " + ((config === null || config === void 0 ? void 0 : config.endColor) || (0, _tinycolor["default"])(translateStartColor(data, config).color).setAlpha(0.1).toRgbString()) + " 100%)" }, config === null || config === void 0 ? void 0 : config.processBarBackConfig, { transform: "translate3d(" + -offsetX + "px,0,0) scale(1, 1) perspective(1px)" }) }, /*#__PURE__*/_react["default"].createElement("svg", { className: "process-svg", width: "100%", height: 20, version: "1.1", xmlns: "http://www.w3.org/2000/svg" }, /*#__PURE__*/_react["default"].createElement("g", { stroke: "none", strokeWidth: "1", fill: "none", fillRule: "evenodd" }, /*#__PURE__*/_react["default"].createElement("path", { d: getClipPath(width * 2, 20), fill: translateStartColor(data, config).color, opacity: "0.5", transform: "translate(" + -0.5 * width + ",0)" }), /*#__PURE__*/_react["default"].createElement("path", { d: getClipPath(width * 2, 20), fill: translateStartColor(data, config).color }))))), /*#__PURE__*/_react["default"].createElement(_Wnumber["default"], { className: prefix + "-percent-bar-label-content " + ((config === null || config === void 0 ? void 0 : config.size) || 'medium'), style: config === null || config === void 0 ? void 0 : config.labelConfig }, data.percent.displayNumber, /*#__PURE__*/_react["default"].createElement("span", { className: prefix + "-percent-bar-label-unit" }, (config === null || config === void 0 ? void 0 : (_config$labelConfig = config.labelConfig) === null || _config$labelConfig === void 0 ? void 0 : _config$labelConfig.unit) || '%')), /*#__PURE__*/_react["default"].createElement("div", { className: prefix + "-percent-bar-label-title", style: config === null || config === void 0 ? void 0 : config.titleConfig }, data.percent.name))); } var _default = exports["default"] = PercentBar;