wix-style-react
Version:
67 lines (53 loc) • 2.31 kB
JavaScript
import uniq from 'lodash/uniq';
import { format } from 'd3-format';
var SI_SYMBOL = ['', 'K', 'M', 'B'];
var formatNumber = 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)));
};
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;
};
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, "%");
};
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));
};
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 === uniq(compactValues).length) {
return precision;
}
precision += 1;
}
};
export { formatNumberToPrecision, formatToCompactNumber, formatToPercent, countPercentageFromBase, calcPrecision };