reductio
Version:
Reductio: Crossfilter groupings
35 lines (33 loc) • 943 B
JavaScript
import crossfilter from 'crossfilter2';
var value_list = {
add: function (a, prior, path) {
var i;
var bisect = crossfilter.bisect.by(function(d) { return d; }).left;
return function (p, v, nf) {
if(prior) prior(p, v, nf);
// Not sure if this is more efficient than sorting.
i = bisect(path(p).valueList, a(v), 0, path(p).valueList.length);
path(p).valueList.splice(i, 0, a(v));
return p;
};
},
remove: function (a, prior, path) {
var i;
var bisect = crossfilter.bisect.by(function(d) { return d; }).left;
return function (p, v, nf) {
if(prior) prior(p, v, nf);
i = bisect(path(p).valueList, a(v), 0, path(p).valueList.length);
// Value already exists or something has gone terribly wrong.
path(p).valueList.splice(i, 1);
return p;
};
},
initial: function (prior, path) {
return function (p) {
p = prior(p);
path(p).valueList = [];
return p;
};
}
};
export default value_list;