'use strict';
require('../globals');
var vlfield = require('../field');
module.exports = addSortTransforms;
// adds new transforms that produce sorted fields
function addSortTransforms(data, encoding, stats, opt) {
// jshint unused:false
var datasetMapping = {};
var counter = 0;
encoding.forEach(function(field, encType) {
var sortBy = encoding.sort(encType, stats);
if (sortBy.length > 0) {
var fields = sortBy.map(function(d) {
return {
op: d.aggregate,
field: vlfield.fieldRef(d, {nofn: true, data: !encoding._vega2})
};
});
var byClause = sortBy.map(function(d) {
var reverse = (d.reverse ? '-' : '');
return reverse + vlfield.fieldRef(d, {data: !encoding._vega2});
});
var dataName = 'sorted' + counter++;
var transforms = [
{
type: 'aggregate',
groupby: [ encoding.fieldRef(encType) ],
fields: fields
},
{
type: 'sort',
by: byClause
}
];
data.push({
name: dataName,
source: RAW,
transform: transforms
});
datasetMapping[encType] = dataName;
}
});
return {
getDataset: function(encType) {
var data = datasetMapping[encType];
if (!data) {
return TABLE;
}
return data;
}
};
}
|