UNPKG

turnilo

Version:

Business intelligence, data exploration and visualization web application for Druid, formerly known as Swiv and Pivot

113 lines 4.58 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const immutable_1 = require("immutable"); const general_1 = require("../../utils/general/general"); const concreteArithmeticOperation_1 = require("../expression/concreteArithmeticOperation"); const measures_1 = require("../measure/measures"); const expression_series_1 = require("../series/expression-series"); const measure_series_1 = require("../series/measure-series"); const series_1 = require("../series/series"); const defaultSeriesList = { series: immutable_1.List([]) }; class SeriesList extends immutable_1.Record(defaultSeriesList) { static fromMeasures(measures) { const series = immutable_1.List(measures.map(series_1.fromMeasure)); return new SeriesList({ series }); } static fromJS(seriesDefs, measures) { const series = immutable_1.List(seriesDefs.map(def => { const measure = measures_1.findMeasureByName(measures, def.reference); return series_1.fromJS(def, measure); })); return new SeriesList({ series }); } static fromSeries(series) { return new SeriesList({ series: immutable_1.List(series) }); } static validSeries(series, measures) { if (series instanceof expression_series_1.ExpressionSeries && series.expression instanceof concreteArithmeticOperation_1.ArithmeticExpression) { return measures_1.hasMeasureWithName(measures, series.reference) && measures_1.hasMeasureWithName(measures, series.expression.reference); } return measures_1.hasMeasureWithName(measures, series.reference); } addSeries(newSeries) { const { series } = this; return this.insertByIndex(series.count(), newSeries); } removeSeries(series) { return this.updateSeries(list => list.filter(s => s.key() !== series.key())); } replaceSeries(original, newSeries) { return this.updateSeries(series => { const idx = series.findIndex(s => s.equals(original)); if (idx === -1) throw new Error(`Couldn't replace series because couldn't find original: ${original}`); return series.set(idx, newSeries); }); } replaceByIndex(index, replace) { const { series } = this; if (series.count() === index) { return this.insertByIndex(index, replace); } return this.updateSeries(series => { const newSeriesIndex = series.findIndex(split => split.equals(replace)); if (newSeriesIndex === -1) return series.set(index, replace); const oldSplit = series.get(index); return series .set(index, replace) .set(newSeriesIndex, oldSplit); }); } insertByIndex(index, insert) { return this.updateSeries(list => list .insert(index, insert) .filterNot((series, idx) => series.equals(insert) && idx !== index)); } hasMeasureSeries(reference) { const series = this.getSeries(reference); return series && series instanceof measure_series_1.MeasureSeries; } hasMeasure({ name }) { return this.hasMeasureSeries(name); } getSeries(reference) { return this.series.find(series => series.reference === reference); } constrainToMeasures(measures) { return this.updateSeries(list => list.filter(series => SeriesList.validSeries(series, measures))); } count() { return this.series.count(); } isEmpty() { return this.series.isEmpty(); } updateSeries(updater) { return this.update("series", updater); } hasSeries(series) { return this.series.find(s => s.equals(series)) !== undefined; } hasSeriesWithKey(key) { return general_1.isTruthy(this.getSeriesWithKey(key)); } getSeriesWithKey(key) { return this.series.find(series => series.key() === key); } takeFirst() { return this.updateSeries(series => series.take(1)); } takeNFirst(number) { return this.updateSeries(series => series.take(number)); } getExpressionSeriesFor(reference) { return this.series.filter(series => series.reference === reference && series instanceof expression_series_1.ExpressionSeries); } getSeriesKeys() { return this.series.map(series => series.key()); } } exports.SeriesList = SeriesList; exports.EMPTY_SERIES = new SeriesList({ series: immutable_1.List([]) }); //# sourceMappingURL=series-list.js.map