UNPKG

yahoo-swiv

Version:

A web-based exploratory visualization UI for Druid.io

221 lines (220 loc) 10.3 kB
"use strict"; var immutable_1 = require('immutable'); var immutable_class_1 = require('immutable-class'); var chronoshift_1 = require('chronoshift'); var swiv_plywood_1 = require('swiv-plywood'); var general_1 = require('../../utils/general/general'); var timekeeper_1 = require('../timekeeper/timekeeper'); var split_combine_1 = require('../split-combine/split-combine'); var swiv_plywood_2 = require("swiv-plywood"); var granularity_1 = require("../granularity/granularity"); function withholdSplit(splits, split, allowIndex) { return splits.filter(function (s, i) { return i === allowIndex || !s.equalsByExpression(split); }); } function swapSplit(splits, split, other, allowIndex) { return splits.map(function (s, i) { return (i === allowIndex || !s.equalsByExpression(split)) ? s : other; }); } var check; var Splits = (function () { function Splits(parameters) { this.splitCombines = parameters; } Splits.isSplits = function (candidate) { return immutable_class_1.isInstanceOf(candidate, Splits); }; Splits.fromSplitCombine = function (splitCombine) { return new Splits(immutable_1.List([splitCombine])); }; Splits.fromJS = function (parameters, context) { if (!Array.isArray(parameters)) parameters = [parameters]; return new Splits(immutable_1.List(parameters.map(function (splitCombine) { return split_combine_1.SplitCombine.fromJS(splitCombine, context); }))); }; Splits.prototype.valueOf = function () { return this.splitCombines; }; Splits.prototype.toJS = function () { return this.splitCombines.toArray().map(function (splitCombine) { return splitCombine.toJS(); }); }; Splits.prototype.toJSON = function () { return this.toJS(); }; Splits.prototype.toString = function () { return this.splitCombines.map(function (splitCombine) { return splitCombine.toString(); }).join(','); }; Splits.prototype.equals = function (other) { return Splits.isSplits(other) && general_1.immutableListsEqual(this.splitCombines, other.splitCombines); }; Splits.prototype.replaceByIndex = function (index, replace) { var splitCombines = this.splitCombines; if (splitCombines.size === index) return this.insertByIndex(index, replace); var replacedSplit = splitCombines.get(index); splitCombines = splitCombines.map(function (s, i) { return i === index ? replace : s; }); splitCombines = swapSplit(splitCombines, replace, replacedSplit, index); return new Splits(splitCombines); }; Splits.prototype.insertByIndex = function (index, insert) { var splitCombines = this.splitCombines; splitCombines = splitCombines.splice(index, 0, insert); splitCombines = withholdSplit(splitCombines, insert, index); return new Splits(splitCombines); }; Splits.prototype.addSplit = function (split) { var splitCombines = this.splitCombines; return this.insertByIndex(splitCombines.size, split); }; Splits.prototype.removeSplit = function (split) { return new Splits(this.splitCombines.filter(function (s) { return s !== split; })); }; Splits.prototype.changeSortAction = function (sort) { return new Splits(this.splitCombines.map(function (s) { return s.changeSortAction(sort); })); }; Splits.prototype.changeSortActionFromNormalized = function (sort, dimensions) { return new Splits(this.splitCombines.map(function (s) { return s.changeSortActionFromNormalized(sort, dimensions); })); }; Splits.prototype.getTitle = function (dimensions) { return this.splitCombines.map(function (s) { return s.getDimension(dimensions).title; }).join(', '); }; Splits.prototype.length = function () { return this.splitCombines.size; }; Splits.prototype.forEach = function (sideEffect, context) { return this.splitCombines.forEach(sideEffect, context); }; Splits.prototype.get = function (index) { return this.splitCombines.get(index); }; Splits.prototype.first = function () { return this.splitCombines.first(); }; Splits.prototype.last = function () { return this.splitCombines.last(); }; Splits.prototype.findSplitForDimension = function (dimension) { var dimensionExpression = dimension.expression; return this.splitCombines.find(function (s) { return s.expression.equals(dimensionExpression); }); }; Splits.prototype.hasSplitOn = function (dimension) { return Boolean(this.findSplitForDimension(dimension)); }; Splits.prototype.replace = function (search, replace) { return new Splits(this.splitCombines.map(function (s) { return s.equals(search) ? replace : s; })); }; Splits.prototype.map = function (mapper, context) { return new Splits(this.splitCombines.map(mapper, context)); }; Splits.prototype.toArray = function () { return this.splitCombines.toArray(); }; Splits.prototype.removeBucketingFrom = function (expressions) { var changed = false; var newSplitCombines = this.splitCombines.map(function (splitCombine) { if (!splitCombine.bucketAction) return splitCombine; var splitCombineExpression = splitCombine.expression; if (expressions.every(function (ex) { return !ex.equals(splitCombineExpression); })) return splitCombine; changed = true; return splitCombine.changeBucketAction(null); }); return changed ? new Splits(newSplitCombines) : this; }; Splits.prototype.updateWithFilter = function (filter, dimensions) { if (filter.isRelative()) { filter = filter.getSpecificFilter(timekeeper_1.Timekeeper.globalNow(), timekeeper_1.Timekeeper.globalNow(), chronoshift_1.Timezone.UTC); } var changed = false; var newSplitCombines = this.splitCombines.map(function (splitCombine) { if (splitCombine.bucketAction) return splitCombine; var splitExpression = splitCombine.expression; var splitDimension = dimensions.find(function (d) { return splitExpression.equals(d.expression); }); var splitKind = splitDimension.kind; if (!splitDimension || !(splitKind === 'time' || splitKind === 'number') || !splitDimension.canBucketByDefault()) return splitCombine; changed = true; var selectionSet = filter.getLiteralSet(splitExpression); var extent = selectionSet ? selectionSet.extent() : null; if (splitKind === 'time') { return splitCombine.changeBucketAction(new swiv_plywood_1.TimeBucketAction({ duration: swiv_plywood_1.TimeRange.isTimeRange(extent) ? granularity_1.getBestBucketUnitForRange(extent, false, splitDimension.bucketedBy, splitDimension.granularities) : granularity_1.getDefaultGranularityForKind('time', splitDimension.bucketedBy, splitDimension.granularities).duration })); } else if (splitKind === 'number') { return splitCombine.changeBucketAction(new swiv_plywood_2.NumberBucketAction({ size: extent ? granularity_1.getBestBucketUnitForRange(extent, false, splitDimension.bucketedBy, splitDimension.granularities) : granularity_1.getDefaultGranularityForKind('number', splitDimension.bucketedBy, splitDimension.granularities).size })); } throw new Error('unknown extent type'); }); return changed ? new Splits(newSplitCombines) : this; }; Splits.prototype.constrainToDimensionsAndMeasures = function (dimensions, measures) { function validSplit(split) { if (!split.getDimension(dimensions)) return false; if (!split.sortAction) return true; var sortRef = split.sortAction.refName(); if (!dimensions.find(function (d) { return d.name === sortRef; }) && !measures.find(function (m) { return m.name === sortRef; })) return false; return true; } var changed = false; var splitCombines = []; this.splitCombines.forEach(function (split) { if (validSplit(split)) { splitCombines.push(split); } else { changed = true; } }); return changed ? new Splits(immutable_1.List(splitCombines)) : this; }; Splits.prototype.timezoneDependant = function () { return this.splitCombines.some(function (splitCombine) { return splitCombine.timezoneDependant(); }); }; Splits.prototype.changeSortIfOnMeasure = function (fromMeasure, toMeasure) { var changed = false; var newSplitCombines = this.splitCombines.map(function (splitCombine) { var sortAction = splitCombine.sortAction; if (!sortAction || sortAction.refName() !== fromMeasure) return splitCombine; changed = true; return splitCombine.changeSortAction(new swiv_plywood_1.SortAction({ expression: swiv_plywood_1.$(toMeasure), direction: sortAction.direction })); }); return changed ? new Splits(newSplitCombines) : this; }; Splits.prototype.getCommonSort = function (dimensions) { var splitCombines = this.splitCombines.toArray(); var commonSort = null; for (var _i = 0, splitCombines_1 = splitCombines; _i < splitCombines_1.length; _i++) { var splitCombine = splitCombines_1[_i]; var sort = splitCombine.getNormalizedSortAction(dimensions); if (commonSort) { if (!commonSort.equals(sort)) return null; } else { commonSort = sort; } } return commonSort; }; return Splits; }()); exports.Splits = Splits; check = Splits; Splits.EMPTY = new Splits(immutable_1.List());