antd
Version:
An enterprise-class UI design language and React components implementation
55 lines (54 loc) • 1.57 kB
JavaScript
"use client";
import * as React from 'react';
import { isFunction, isNumber } from '../_util/is';
const StatisticNumber = props => {
const {
value,
formatter,
precision,
decimalSeparator,
groupSeparator = '',
prefixCls,
className,
style
} = props;
let valueNode;
if (isFunction(formatter)) {
// Customize formatter
valueNode = formatter(value);
} else {
// Internal formatter
const val = String(value);
const cells = val.match(/^(-?)(\d*)(\.(\d+))?$/);
// Process if illegal number
if (!cells || val === '-') {
valueNode = val;
} else {
const negative = cells[1];
let int = cells[2] || '0';
let decimal = cells[4] || '';
int = int.replace(/\B(?=(\d{3})+(?!\d))/g, groupSeparator);
if (isNumber(precision)) {
decimal = decimal.padEnd(precision, '0').slice(0, precision > 0 ? precision : 0);
}
if (decimal) {
decimal = `${decimalSeparator}${decimal}`;
}
valueNode = [/*#__PURE__*/React.createElement("span", {
key: "int",
className: `${prefixCls}-content-value-int`
}, negative, int), decimal && (/*#__PURE__*/React.createElement("span", {
key: "decimal",
className: `${prefixCls}-content-value-decimal`
}, decimal))];
}
}
return /*#__PURE__*/React.createElement("span", {
className: className,
style: style
}, valueNode);
};
if (process.env.NODE_ENV !== 'production') {
StatisticNumber.displayName = 'StatisticNumber';
}
export default StatisticNumber;