wix-style-react
Version:
86 lines (63 loc) • 2.84 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.calcPrecision = exports.countPercentageFromBase = exports.formatToPercent = exports.formatToCompactNumber = exports.formatNumberToPrecision = void 0;
var _uniq = _interopRequireDefault(require("lodash/uniq"));
var _d3Format = require("d3-format");
var SI_SYMBOL = ['', 'K', 'M', 'B'];
var formatNumber = (0, _d3Format.format)(',');
var formatNumberToPrecision = function formatNumberToPrecision() {
var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
var precision = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
return formatNumber(parseFloat(parseFloat(value).toFixed(precision)));
};
exports.formatNumberToPrecision = formatNumberToPrecision;
var formatToCompactNumber = function formatToCompactNumber() {
var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
var precision = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
var tier = Math.min(Math.log10(Math.abs(value)) / 3 | 0, SI_SYMBOL.length - 1);
if (tier === 0) {
return value.toFixed().toString();
}
var suffix = SI_SYMBOL[tier];
var scale = Math.pow(10, tier * 3);
var scaled = value / scale;
var isRounded = !(scaled % 1);
return isRounded ? scaled.toFixed() + suffix : scaled.toFixed(precision) + suffix;
};
exports.formatToCompactNumber = formatToCompactNumber;
var formatToPercent = function formatToPercent() {
var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
var formatedValue = typeof value === 'number' ? formatNumberToPrecision(value, 0) : value;
return "".concat(formatedValue, "%");
};
exports.formatToPercent = formatToPercent;
var countPercentageFromBase = function countPercentageFromBase(base, chunk, precision) {
if (chunk === 0 || base === 0) {
return 0;
}
if (precision === undefined) {
return chunk * 100 / base;
}
if (precision < 0 || !(precision === parseInt(precision, 10))) {
throw new Error('Precision should be integer');
}
return Number((chunk * 100 / base).toFixed(precision));
};
exports.countPercentageFromBase = countPercentageFromBase;
var calcPrecision = function calcPrecision(values) {
var maxPrecision = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 4;
var precision = 0;
while (precision < maxPrecision) {
var compactValues = (values || []).map(function (v) {
return formatToCompactNumber(v, precision).toLocaleLowerCase();
});
if (compactValues.length === (0, _uniq["default"])(compactValues).length) {
return precision;
}
precision += 1;
}
};
exports.calcPrecision = calcPrecision;