UNPKG

virool-pivot

Version:

A web-based exploratory visualization UI for Druid.io

89 lines (75 loc) 2.94 kB
import { $, SortAction } from 'plywood'; import { List } from 'immutable'; import { Splits, DataSource, Resolve, SplitCombine, Colors, Dimension } from '../../../common/models/index'; import { CircumstancesHandler } from '../../../common/utils/circumstances-handler/circumstances-handler'; export default CircumstancesHandler.EMPTY() .needsAtLeastOneSplit('The Bar Chart requires at least one split') .when(CircumstancesHandler.areExactSplitKinds('*')) .or(CircumstancesHandler.areExactSplitKinds('*', '*')) .then((splits: Splits, dataSource: DataSource, colors: Colors, current: boolean) => { var continuousBoost = 0; // Auto adjustment var autoChanged = false; splits = splits.map((split: SplitCombine) => { var splitDimension = dataSource.getDimensionByExpression(split.expression); if (!split.sortAction) { // Must sort boolean in deciding order! if (splitDimension.kind === 'boolean') { split = split.changeSortAction(new SortAction({ expression: $(splitDimension.name), direction: SortAction.DESCENDING })); } else { if (splitDimension.isContinuous()) { split = split.changeSortAction(new SortAction({ expression: $(splitDimension.name), direction: SortAction.ASCENDING })); } else { split = split.changeSortAction(dataSource.getDefaultSortAction()); } } autoChanged = true; } else if (splitDimension.isContinuous() && split.sortAction.refName() !== splitDimension.name) { split = split.changeSortAction(new SortAction({ expression: $(splitDimension.name), direction: split.sortAction.direction })); autoChanged = true; } if (splitDimension.isContinuous()) { continuousBoost = 2; } // ToDo: review this if (!split.limitAction && (autoChanged || splitDimension.kind !== 'time')) { split = split.changeLimit(25); autoChanged = true; } if (colors) { colors = null; autoChanged = true; } return split; }); if (autoChanged) { return Resolve.automatic(5 + continuousBoost, { splits }); } return Resolve.ready(current ? 10 : (7 + continuousBoost)); }) .otherwise( (splits: Splits, dataSource: DataSource) => { let categoricalDimensions = dataSource.dimensions.filter((d) => d.kind !== 'time'); return Resolve.manual( 3, 'The Bar Chart needs one or two splits', categoricalDimensions.toArray().slice(0, 2).map((dimension: Dimension) => { return { description: `Split on ${dimension.title} instead`, adjustment: { splits: Splits.fromSplitCombine(SplitCombine.fromExpression(dimension.expression)) } }; }) ); } );