choerodon-ui
Version:
An enterprise-class UI design language and React-based implementation
278 lines (209 loc) • 7.33 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.formatCurrency = formatCurrency;
exports.formatFileSize = formatFileSize;
exports.formatNumber = formatNumber;
exports.formatString = formatString;
exports.formatTemplate = formatTemplate;
exports.transformString = transformString;
exports.trimString = trimString;
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
var _isString = _interopRequireDefault(require("lodash/isString"));
var _capitalize = _interopRequireDefault(require("lodash/capitalize"));
var _bignumber = _interopRequireDefault(require("bignumber.js"));
var _enum = require("../data-set/enum");
var _utils = require("../utils");
var _math = _interopRequireDefault(require("../math"));
function trimString(value, fieldTrim) {
if (fieldTrim) {
switch (fieldTrim) {
case _enum.FieldTrim.both:
return value.trim();
case _enum.FieldTrim.left:
return value.trimLeft();
case _enum.FieldTrim.right:
return value.trimRight();
default:
}
}
return value;
}
function transformString(value, format) {
if (format) {
switch (format) {
case _enum.FieldFormat.uppercase:
return value.toUpperCase();
case _enum.FieldFormat.lowercase:
return value.toLowerCase();
case _enum.FieldFormat.capitalize:
return (0, _capitalize["default"])(value);
default:
}
}
return value;
}
function formatString(value, _ref) {
var trim = _ref.trim,
format = _ref.format;
if ((0, _isString["default"])(value)) {
return transformString(trimString(value, trim), format);
}
return value;
}
function $formatNumber(v, lang, options) {
return v.toLocaleString((0, _utils.normalizeLanguage)(lang), options);
}
var bigNumberGroupMap = new Map();
var bigNumberCurrencyMap = new Map();
var separatorReg = /\D+/;
function getCurrencyOptions(lang, options) {
var style = options.style,
currency = options.currency;
if (style === 'currency' && currency) {
var currencyMap = bigNumberCurrencyMap.get(lang);
if (!currencyMap) {
currencyMap = new Map();
bigNumberCurrencyMap.set(lang, currencyMap);
}
var _options = currencyMap.get(currency);
if (_options) {
return _options;
}
var formatted = $formatNumber(1, lang, {
style: style,
currency: currency
});
var matches = formatted.match(separatorReg);
if (matches) {
var currencyOptions = matches.index === 0 ? {
prefix: matches[0]
} : {
suffix: matches[0]
};
currencyMap.set(currency, currencyOptions);
return currencyOptions;
}
}
}
function getBigNumberFormatOptionsByGroupSize(lang, groupSize) {
var formatted = $formatNumber(Math.pow(10, groupSize), lang);
var matches = formatted.match(separatorReg);
if (matches && matches.index === 1) {
var decimalMatches = $formatNumber(0.1, lang).match(separatorReg);
var matchedGroup = {
groupSeparator: matches[0],
decimalSeparator: decimalMatches ? decimalMatches[0] : '.',
groupSize: groupSize
};
bigNumberGroupMap.set(lang, matchedGroup);
return matchedGroup;
}
}
var defaultBigNumberFormatOptions = {
groupSeparator: ',',
decimalSeparator: '.',
groupSize: 3
};
function getBigNumberFormatOption(lang) {
if (!lang) {
return defaultBigNumberFormatOptions;
}
var option = bigNumberGroupMap.get(lang);
if (option) {
return option;
}
for (var groupSize = 3, s = groupSize; s > 0 && groupSize < 6; groupSize += 1) {
var g = getBigNumberFormatOptionsByGroupSize(lang, groupSize);
if (g) {
return g;
}
s -= 1;
var sg = getBigNumberFormatOptionsByGroupSize(lang, s);
if (sg) {
return sg;
}
}
bigNumberGroupMap.set(lang, defaultBigNumberFormatOptions);
return defaultBigNumberFormatOptions;
}
function $formatBigNumber(value, lang, options) {
var _getBigNumberFormatOp = getBigNumberFormatOption(lang),
groupSeparator = _getBigNumberFormatOp.groupSeparator,
groupSize = _getBigNumberFormatOp.groupSize,
decimalSeparator = _getBigNumberFormatOp.decimalSeparator;
var _ref2 = getCurrencyOptions(lang, options) || {},
_ref2$prefix = _ref2.prefix,
prefix = _ref2$prefix === void 0 ? '' : _ref2$prefix,
_ref2$suffix = _ref2.suffix,
suffix = _ref2$suffix === void 0 ? '' : _ref2$suffix;
var useGrouping = options.useGrouping;
var fmt = {
prefix: prefix,
decimalSeparator: decimalSeparator,
groupSeparator: useGrouping === false ? '' : groupSeparator,
groupSize: useGrouping === false ? 0 : groupSize,
secondaryGroupSize: 0,
fractionGroupSeparator: ' ',
fractionGroupSize: 0,
suffix: suffix
};
var _options$maximumFract = options.maximumFractionDigits,
maximumFractionDigits = _options$maximumFract === void 0 ? Infinity : _options$maximumFract,
_options$minimumFract = options.minimumFractionDigits,
minimumFractionDigits = _options$minimumFract === void 0 ? 0 : _options$minimumFract;
var dp = Math.min(Math.max(value.dp(), minimumFractionDigits), maximumFractionDigits);
return value.toFormat(dp, fmt);
}
function formatCurrency(value, lang, options) {
var bn = new _bignumber["default"](value);
if (_math["default"].isValidBigNumber(bn)) {
var v = _math["default"].fix(bn);
var currencyOptions = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, (0, _utils.getNumberFormatOptions)(_enum.FieldType.currency, options)), options);
if (_math["default"].isBigNumber(v)) {
return $formatBigNumber(v, lang, currencyOptions);
}
return $formatNumber(v, lang, currencyOptions);
}
return value.toString();
}
function formatNumber(value, lang, options) {
var bn = new _bignumber["default"](value);
if (_math["default"].isValidBigNumber(bn)) {
var v = _math["default"].fix(bn);
var numberOptions = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, (0, _utils.getNumberFormatOptions)(_enum.FieldType.number, options)), options);
if (_math["default"].isBigNumber(v)) {
return $formatBigNumber(v, lang, numberOptions);
}
return $formatNumber(v, lang, numberOptions);
}
return value.toString();
}
var nargs = /\{([0-9a-zA-Z_]+)\}/g;
function formatTemplate(string, args, lazy) {
return string.replace(nargs, function (match, i, index) {
if (string[index - 1] === '{' && string[index + match.length] === '}') {
return i;
}
var has = Object.hasOwnProperty.call(args, i);
if (has) {
var result = has ? args[i] : null;
if (result === null || result === undefined) {
return '';
}
return result;
}
return lazy ? "{".concat(i, "}") : '';
});
}
var units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB'];
function formatFileSize(size) {
var unitIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
if (size < 1024) {
return "".concat(size).concat(units[unitIndex]);
}
return formatFileSize(Math.round(size / 1024), unitIndex + 1);
}
//# sourceMappingURL=index.js.map
;