virool-pivot
Version:
A web-based exploratory visualization UI for Druid.io
99 lines (98 loc) • 4.02 kB
JavaScript
;
var index_1 = require('../../models/index');
var CircumstancesHandler = (function () {
function CircumstancesHandler() {
this.configurations = [];
this.actions = [];
}
CircumstancesHandler.noSplits = function () {
return function (splits) { return splits.length() === 0; };
};
CircumstancesHandler.testKind = function (kind, selector) {
if (selector === '*') {
return true;
}
var bareSelector = selector.replace(/^!/, '');
// This can be enriched later, right now it's just a 1-1 match
var result = kind === bareSelector;
if (selector.charAt(0) === '!') {
return !result;
}
return result;
};
CircumstancesHandler.strictCompare = function (selectors, kinds) {
if (selectors.length !== kinds.length)
return false;
return selectors.every(function (selector, i) { return CircumstancesHandler.testKind(kinds[i], selector); });
};
CircumstancesHandler.EMPTY = function () {
return new CircumstancesHandler();
};
CircumstancesHandler.prototype.when = function (configuration) {
var _this = this;
var temp = [configuration];
var ret = {
or: function (conf) {
temp.push(conf);
return ret;
},
then: function (action) {
_this.configurations.push(temp);
_this.actions.push(action);
return _this;
}
};
return ret;
};
CircumstancesHandler.prototype.otherwise = function (action) {
this.otherwiseAction = action;
return this;
};
CircumstancesHandler.prototype.needsAtLeastOneSplit = function (message) {
return this
.when(CircumstancesHandler.noSplits())
.then(function (splits, dataSource) {
var someDimensions = dataSource.dimensions.toArray().filter(function (d) { return d.kind === 'string'; }).slice(0, 2);
return index_1.Resolve.manual(4, message, someDimensions.map(function (someDimension) {
return {
description: "Add a split on " + someDimension.title,
adjustment: {
splits: index_1.Splits.fromSplitCombine(index_1.SplitCombine.fromExpression(someDimension.expression))
}
};
}));
});
};
CircumstancesHandler.prototype.evaluate = function (dataSource, splits, colors, current) {
for (var i = 0; i < this.configurations.length; i++) {
var confs = this.configurations[i];
if (confs.some(function (c) { return c(splits, dataSource); })) {
return this.actions[i](splits, dataSource, colors, current);
}
}
return this.otherwiseAction(splits, dataSource, colors, current);
};
CircumstancesHandler.areExactSplitKinds = function () {
var selectors = [];
for (var _i = 0; _i < arguments.length; _i++) {
selectors[_i - 0] = arguments[_i];
}
return function (splits, dataSource) {
var kinds = splits.toArray().map(function (split) { return split.getDimension(dataSource.dimensions).kind; });
return CircumstancesHandler.strictCompare(selectors, kinds);
};
};
CircumstancesHandler.haveAtLeastSplitKinds = function () {
var kinds = [];
for (var _i = 0; _i < arguments.length; _i++) {
kinds[_i - 0] = arguments[_i];
}
return function (splits, dataSource) {
var getKind = function (split) { return split.getDimension(dataSource.dimensions).kind; };
var actualKinds = splits.toArray().map(getKind);
return kinds.every(function (kind) { return actualKinds.indexOf(kind) > -1; });
};
};
return CircumstancesHandler;
}());
exports.CircumstancesHandler = CircumstancesHandler;