UNPKG

@nutui/nutui-react

Version:

京东风格的轻量级移动端 React 组件库,支持一套代码生成 H5 和小程序

90 lines (89 loc) 3.92 kB
import { _ as _object_spread } from "@swc/helpers/_/_object_spread"; import { _ as _object_spread_props } from "@swc/helpers/_/_object_spread_props"; import { _ as _object_without_properties } from "@swc/helpers/_/_object_without_properties"; import React, { useRef } from "react"; import { TriangleDown, TriangleUp } from "@nutui/icons-react"; import { ComponentDefaults } from "../../utils/typings"; var defaultProps = _object_spread_props(_object_spread({}, ComponentDefaults), { value: 0, digits: 2, symbol: false, zero: false, left: false, sync: true, color: '', riseColor: 'var(--nutui-brand-6)', dropColor: 'var(--nutui-secondary-1)', riseIcon: null, dropIcon: null }); export var TrendArrow = function(props) { var _ref = _object_spread({}, defaultProps, props), value = _ref.value, digits = _ref.digits, symbol = _ref.symbol, zero = _ref.zero, left = _ref.left, sync = _ref.sync, color = _ref.color, riseColor = _ref.riseColor, dropColor = _ref.dropColor, riseIcon = _ref.riseIcon, dropIcon = _ref.dropIcon, className = _ref.className, style = _ref.style, children = _ref.children, rest = _object_without_properties(_ref, [ "value", "digits", "symbol", "zero", "left", "sync", "color", "riseColor", "dropColor", "riseIcon", "dropIcon", "className", "style", "children" ]); var classPrefix = 'nut-trendarrow'; var rateTrend = useRef(value > 0); var myFixed = function(num) { var digit = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 2; if (Object.is(parseFloat(num), NaN)) { return console.warn("传入的值:".concat(num, "不是一个数字")); } num = parseFloat(num); // eslint-disable-next-line no-restricted-properties var numPow = Math.pow(10, digit); return (Math.round((num + Number.EPSILON) * numPow) / numPow).toFixed(digit); }; var calcStyle = function() { var arrowColor = rateTrend.current ? riseColor : dropColor; var textEquArrowColor = sync ? arrowColor : color; var style = { color: value === 0 ? color : textEquArrowColor }; return style; }(); var calcRate = function() { rateTrend.current = value > 0; var absRate = Math.abs(value); if (!zero && value === 0) { return '--'; } var resultRate = "".concat(// eslint-disable-next-line no-nested-ternary symbol && value !== 0 ? rateTrend.current ? '+' : '-' : '').concat(myFixed(Number(absRate), digits), "%"); return resultRate; }(); var calcIconProps = function() { var iconProps = { color: rateTrend.current ? riseColor : dropColor }; return iconProps; }(); var renderContent = function(left) { var classNameSuffix = !left ? 'icon-after' : 'icon-before'; return /*#__PURE__*/ React.createElement("span", { className: "".concat(classPrefix, "-").concat(classNameSuffix, " ").concat(classPrefix, "-value"), style: calcStyle }, calcRate); }; return /*#__PURE__*/ React.createElement("div", _object_spread({ className: "".concat(classPrefix, " ").concat(className), style: style }, rest), !left && renderContent(!left), Number(value) !== 0 && /*#__PURE__*/ React.createElement(React.Fragment, null, rateTrend.current ? /*#__PURE__*/ React.createElement(React.Fragment, null, riseIcon || /*#__PURE__*/ React.createElement(TriangleUp, { color: calcIconProps.color })) : /*#__PURE__*/ React.createElement(React.Fragment, null, dropIcon || /*#__PURE__*/ React.createElement(TriangleDown, { color: calcIconProps.color }))), left && renderContent(!left)); }; TrendArrow.displayName = 'NutTrendArrow';