@formant/ava
Version:
A framework for automated visual analytics.
58 lines (57 loc) • 2.26 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.nominalEnumCombinatorial = void 0;
var utils_1 = require("../../utils");
var utils_2 = require("../utils");
var constants_1 = require("./constants");
var applyChartTypes = [
'bar_chart',
'column_chart',
'grouped_bar_chart',
'grouped_column_chart',
'stacked_bar_chart',
'stacked_column_chart',
];
function getNominalFields(dataProps) {
return dataProps.filter(function (field) { return (0, utils_1.hasSubset)(field.levelOfMeasurements, ['Nominal']); });
}
exports.nominalEnumCombinatorial = {
id: 'nominal-enum-combinatorial',
type: 'SOFT',
docs: {
lintText: 'Single (Basic) and Multi (Stacked, Grouped,...) charts should be optimized recommended by nominal enums combinatorial numbers.',
},
trigger: function (_a) {
var chartType = _a.chartType, dataProps = _a.dataProps;
return (applyChartTypes.includes(chartType) && getNominalFields(dataProps).length >= 2);
},
validator: function (args) {
var result = 1;
var dataProps = args.dataProps, chartType = args.chartType;
if (dataProps) {
var nominalFields = getNominalFields(dataProps);
if (nominalFields.length >= 2) {
var sortedNominals = nominalFields.sort(utils_2.compare);
var f1 = sortedNominals[0];
var f2 = sortedNominals[1];
if (f1.distinct === f1.count) {
if (['bar_chart', 'column_chart'].includes(chartType)) {
result = constants_1.MAX_SOFT_RULE_COEFFICIENT * 0.5;
}
}
if (f1.count && f1.distinct && f2.distinct && f1.count > f1.distinct) {
var typeOptions = [
'grouped_bar_chart',
'grouped_column_chart',
'stacked_bar_chart',
'stacked_column_chart',
];
if (typeOptions.includes(chartType)) {
result = constants_1.MAX_SOFT_RULE_COEFFICIENT * 0.5;
}
}
}
}
return result;
},
};