UNPKG

decentraland-ui

Version:

Decentraland's UI components and styles

134 lines (133 loc) 5.83 kB
"use strict"; var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getDatasetBounds = exports.getFlooredFixed = exports.formatValueToLocale = exports.isValuesInCurrentRange = exports.getBarChartRanges = exports.createExponentialRange = exports.fixedNumber = exports.roundNumber = exports.inverseScale = exports.roundRange = exports.formatAndRoundNumberString = exports.numberFormatter = exports.CHART_LOG_SCALE = exports.NON_ACTIVE_BAR_COLOR = exports.ACTIVE_BAR_COLOR = exports.LOADING_BAR_COLOR = exports.HOVERED_BAR_COLOR = void 0; exports.HOVERED_BAR_COLOR = 'pink'; exports.LOADING_BAR_COLOR = 'grey'; exports.ACTIVE_BAR_COLOR = '#ff2d55'; exports.NON_ACTIVE_BAR_COLOR = '#4f1414'; exports.CHART_LOG_SCALE = 5; var CHART_BAR_QTY = 24; exports.numberFormatter = Intl.NumberFormat('en', { notation: 'compact' }); var formatAndRoundNumberString = function (number) { return exports.numberFormatter.format(Number(number)); }; exports.formatAndRoundNumberString = formatAndRoundNumberString; var roundRange = function (range) { return [(0, exports.roundNumber)(range[0]).toString(), (0, exports.roundNumber)(range[1]).toString()]; }; exports.roundRange = roundRange; var formatNumber = function (number) { return (0, exports.roundNumber)(Number(number)); }; var inverseScale = function (number) { // avoid doing Math.log(0) which would return Inifity return number !== 0 ? Math.log(number) / Math.log(exports.CHART_LOG_SCALE) : 0; }; exports.inverseScale = inverseScale; var roundNumber = function (number, decimals) { if (decimals === void 0) { decimals = 2; } var exp = 1; if (number < 10) { return Number(number.toFixed(decimals)); } if (number > 100) exp = 100; if (number > 1000) exp = 1000; return Math.round(number / exp) * exp; }; exports.roundNumber = roundNumber; var fixedNumber = function (value, decimals) { var regex = new RegExp("^([0-9]+((.|,)?([0-9]?){".concat(decimals, "})?)"), 'g'); var match = value.match(regex); return match ? match[0] : ''; }; exports.fixedNumber = fixedNumber; var createExponentialRange = function (min, max, upperBound, decimals) { var rangeMin = (0, exports.inverseScale)(min); var rangeMax = (0, exports.inverseScale)(max); var step = (rangeMax - rangeMin) / CHART_BAR_QTY; var arr = []; for (var i = 0; i < CHART_BAR_QTY; i++) { var prev = arr[i - 1]; arr.push(prev !== undefined ? prev + step : rangeMin); } return __spreadArray(__spreadArray([], arr.map(function (interval) { return interval !== 0 ? (0, exports.roundNumber)(Math.pow(exports.CHART_LOG_SCALE, interval), decimals) : interval; }), true), (upperBound && max > upperBound ? [upperBound] : []), true); }; exports.createExponentialRange = createExponentialRange; var getBarChartRanges = function (data, min, max, upperBound, rangeDecimals) { var ranges = (0, exports.createExponentialRange)(min, max, upperBound, rangeDecimals); var bars = ranges.reduce(function (acc, range) { acc.set(range, 0); return acc; }, new Map()); try { // iterates each data entry of <number, ocurrences> Object.entries(data).forEach(function (_a) { var key = _a[0], value = _a[1]; var formattedNumber = formatNumber(key); var upperBoundIdx = ranges.findIndex(function (range) { return formattedNumber <= range; }); var upperBound = ranges[upperBoundIdx > 0 ? upperBoundIdx - 1 : upperBoundIdx]; if (upperBound === undefined) { upperBound = ranges[ranges.length - 1]; } var currentValueForRange = bars.get(upperBound) || 0; bars.set(upperBound, currentValueForRange + value); }); var final = []; var mapIterator = bars.entries(); var interval = mapIterator.next().value; while (interval) { var maxOfInterval = interval[0], amount = interval[1]; var nextInterval = mapIterator.next().value; final.push({ values: [ Number(maxOfInterval), nextInterval ? Number(nextInterval[0]) : Number(maxOfInterval) ], amount: amount }); interval = nextInterval; } return final; } catch (error) { throw Error('Error generating bar chart'); } }; exports.getBarChartRanges = getBarChartRanges; var isValuesInCurrentRange = function (range, min, max) { return ((range[0] >= min || range[1] > min) && (range[0] < max || range[1] <= max)); }; exports.isValuesInCurrentRange = isValuesInCurrentRange; var formatValueToLocale = function (value) { var formattedMin = Number(value[0]).toLocaleString(); var formattedMax = Number(value[1]).toLocaleString(); return [formattedMin, formattedMax]; }; exports.formatValueToLocale = formatValueToLocale; var getFlooredFixed = function (v, d) { return (Math.floor(v * Math.pow(10, d)) / Math.pow(10, d)).toFixed(d); }; exports.getFlooredFixed = getFlooredFixed; var getDatasetBounds = function (data) { var formattedData = Object.keys(data).map(function (key) { return Number(key); }); return { min: Math.min.apply(Math, formattedData), max: Math.max.apply(Math, formattedData) }; }; exports.getDatasetBounds = getDatasetBounds;