/
grid-utils.js
66 lines (58 loc) · 1.86 KB
/
grid-utils.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
var React = require("react");
var ordinal = require("d3").scale.ordinal;
var map = require("lodash/map");
var assign = require("lodash/assign");
var defaults = require("lodash/defaults");
var range = require("lodash/range");
var gridScaleDefaults = {
xInnerPadding: 0.1,
xOuterPadding: 0,
yInnerPadding: 0.1,
yOuterPadding: 0
};
/**
* make_mults
*
* @param components { array? of base components that data will be passed to }
* @param data { data for each chart }
* @param gridOpts {grid option }
* @param howToRender { func that tells how to evaluate the components?? }
* @returns {[chart components]}
*/
function make_mults(Outer, outerProps, data, gridScales, renderDataFunc) {
var colDomain = gridScales.cols.domain();
var numCols = colDomain[colDomain.length - 1] + 1;
// only render number of grid blocks that are selected
var numCharts = gridScales.cols.domain().length * gridScales.rows.domain().length;
var grid_dimensions = {
width: gridScales.cols.rangeBand(),
height: gridScales.rows.rangeBand()
};
return map(data.slice(0, numCharts), function(d, i) {
var pos = {
col: i % numCols,
row: (i === 0) ? 0 : Math.floor( i / numCols )
};
var gridProps = assign({}, outerProps, {
key: i,
translate: [ gridScales.cols(pos.col), gridScales.rows(pos.row) ],
dimensions: grid_dimensions
});
return Outer(gridProps, renderDataFunc(d, i));
});
}
function create_grid_scales(gridOpts, outerRange, _opts) {
var colDomain = range(gridOpts.cols);
var rowDomain = range(gridOpts.rows);
var opts = defaults(_opts, gridScaleDefaults);
return {
cols: ordinal().domain(colDomain)
.rangeBands(outerRange.x, opts.xInnerPadding, opts.xOuterPadding),
rows: ordinal().domain(rowDomain)
.rangeBands(outerRange.y, opts.yInnerPadding, opts.yOuterPadding)
}
}
module.exports = {
makeMults: make_mults,
createGridScales: create_grid_scales
};