UNPKG

@swimlane/ngx-charts

Version:

Declarative Charting Framework for Angular

56 lines 1.89 kB
import { scaleBand } from 'd3-scale'; export function gridSize(dims, len, minWidth) { var rows = 1; var cols = len; var width = dims.width; if (width > minWidth) { while (width / cols < minWidth) { rows += 1; cols = Math.ceil(len / rows); } } return [cols, rows]; } export function gridLayout(dims, data, minWidth, designatedTotal) { var xScale = scaleBand(); var yScale = scaleBand(); var width = dims.width; var height = dims.height; var _a = gridSize(dims, data.length, minWidth), columns = _a[0], rows = _a[1]; var xDomain = []; var yDomain = []; for (var i = 0; i < rows; i++) { yDomain.push(i); } for (var i = 0; i < columns; i++) { xDomain.push(i); } xScale.domain(xDomain); yScale.domain(yDomain); xScale.rangeRound([0, width], 0.1); yScale.rangeRound([0, height], 0.1); var res = []; var total = designatedTotal ? designatedTotal : getTotal(data); var cardWidth = xScale.bandwidth(); var cardHeight = yScale.bandwidth(); for (var i = 0; i < data.length; i++) { res[i] = {}; res[i].data = { name: data[i] ? data[i].name : '', value: data[i] ? data[i].value : undefined, extra: data[i] ? data[i].extra : undefined, label: data[i] ? data[i].label : '' }; res[i].x = xScale(i % columns); res[i].y = yScale(Math.floor(i / columns)); res[i].width = cardWidth; res[i].height = cardHeight; res[i].data.percent = total > 0 ? res[i].data.value / total : 0; res[i].data.total = total; } return res; } function getTotal(results) { return results.map(function (d) { return (d ? d.value : 0); }).reduce(function (sum, val) { return sum + val; }, 0); } //# sourceMappingURL=grid-layout.helper.js.map