UNPKG

wix-style-react

Version:
67 lines (53 loc) 2.31 kB
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 };