decentraland-ui
Version:
Decentraland's UI components and styles
134 lines (133 loc) • 5.83 kB
JavaScript
;
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;