scichart
Version:
Fast WebGL JavaScript Charting Library and Framework
153 lines (152 loc) • 7.11 kB
JavaScript
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
if (typeof b !== "function" && b !== null)
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.XyRatioFilter = void 0;
var Guard_1 = require("../../../Core/Guard");
var DataFilterType_1 = require("../../../types/DataFilterType");
var IDataSeries_1 = require("../IDataSeries");
var XyFilterBase_1 = require("./XyFilterBase");
/**
* An XyDataSeries where each point is the ratio of the original series and the given divisorSeries
*/
var XyRatioFilter = /** @class */ (function (_super) {
__extends(XyRatioFilter, _super);
function XyRatioFilter(originalSeries, options) {
var _this = this;
var _a;
_this = _super.call(this, originalSeries, options) || this;
_this.divisorField = XyFilterBase_1.EDataSeriesField.Y;
Guard_1.Guard.notNull(options.divisorSeries, "divisorSeries");
_this.divisorSeries = options.divisorSeries;
_this.divisorField = (_a = options.divisorField) !== null && _a !== void 0 ? _a : _this.divisorField;
_this.onDivisorDataChanged = _this.onDivisorDataChanged.bind(_this);
_this.divisorSeries.dataChanged.subscribe(_this.onDivisorDataChanged);
if (_this.getOriginalCount() > 0) {
_this.filterAll();
}
return _this;
}
// @ts-ignore
XyRatioFilter.prototype.toJSON = function (excludeData) {
if (excludeData === void 0) { excludeData = false; }
var original = this.originalSeries.toJSON(excludeData);
var divisorValues = [];
var divisorRaw = this.getDivisorYValues();
for (var i = 0; i < this.divisorSeries.count(); i++) {
divisorValues.push(divisorRaw.get(i));
}
return __assign(__assign({}, original), { filter: {
type: DataFilterType_1.EDataFilterType.XyRatio,
options: { field: this.field, divisorSeries: divisorValues }
} });
};
XyRatioFilter.prototype.filterOnAppend = function (count) {
// Don't filter unless both series are the same length.
if (this.getOriginalCount() !== this.divisorSeries.count()) {
return;
}
var _a = this.filter(this.count(), count), xValues = _a.xValues, yValues = _a.yValues;
this.appendRange(xValues, yValues);
};
XyRatioFilter.prototype.filterOnUpdate = function (index) {
this.update(index, this.getOriginalYValues().get(index) / this.getDivisorYValues().get(index));
};
XyRatioFilter.prototype.filterOnInsert = function (startIndex, count) {
if (this.getOriginalCount() !== this.divisorSeries.count()) {
return;
}
var _a = this.filter(startIndex, count), xValues = _a.xValues, yValues = _a.yValues;
this.insertRange(startIndex, xValues, yValues);
};
XyRatioFilter.prototype.filterOnRemove = function (startIndex, count) {
if (this.getOriginalCount() !== this.divisorSeries.count()) {
return;
}
this.removeRange(startIndex, count);
};
XyRatioFilter.prototype.filterAll = function () {
if (this.getOriginalCount() !== this.divisorSeries.count()) {
return;
}
this.clear();
var _a = this.filter(0, this.getOriginalCount()), xValues = _a.xValues, yValues = _a.yValues;
this.appendRange(xValues, yValues);
};
XyRatioFilter.prototype.filter = function (startIndex, count) {
var rawX = this.getOriginalXValues();
var rawY = this.getOriginalYValues();
var xValues = [];
var yValues = [];
// TODO check if metadata is needed here
for (var i = startIndex; i < startIndex + count; i++) {
xValues.push(rawX.get(i));
yValues.push(rawY.get(i) / this.getDivisorYValues().get(i));
}
return { xValues: xValues, yValues: yValues };
};
XyRatioFilter.prototype.getDivisorYValues = function () {
var divY = this.divisorSeries.getNativeYValues();
if (this.divisorSeries.type === IDataSeries_1.EDataSeriesType.Xyy) {
var xyySeries = this.divisorSeries;
divY = (0, XyFilterBase_1.switchData)(this.divisorField, xyySeries.getNativeYValues(), xyySeries.getNativeY1Values());
}
else if (this.divisorSeries.type === IDataSeries_1.EDataSeriesType.Xyz) {
var xyzSeries = this.divisorSeries;
divY = (0, XyFilterBase_1.switchData)(this.field, xyzSeries.getNativeYValues(), xyzSeries.getNativeZValues());
}
else if (this.divisorSeries.type === IDataSeries_1.EDataSeriesType.Ohlc) {
var ohlcSeries = this.divisorSeries;
divY = (0, XyFilterBase_1.switchData)(this.field, ohlcSeries.getNativeYValues(), ohlcSeries.getNativeOpenValues(), ohlcSeries.getNativeHighValues(), ohlcSeries.getNativeLowValues());
}
return divY;
};
XyRatioFilter.prototype.onDivisorDataChanged = function (args) {
var changeType = args.changeType, name = args.name, index = args.index, count = args.count;
switch (changeType) {
case IDataSeries_1.EDataChangeType.Append:
this.filterOnAppend(count);
break;
case IDataSeries_1.EDataChangeType.Clear:
this.onClear();
break;
case IDataSeries_1.EDataChangeType.Insert:
this.filterOnInsert(index, count);
break;
case IDataSeries_1.EDataChangeType.Remove:
this.filterOnRemove(index, count);
break;
case IDataSeries_1.EDataChangeType.Update:
this.filterOnUpdate(index);
break;
default:
break;
}
};
return XyRatioFilter;
}(XyFilterBase_1.XyFilterBase));
exports.XyRatioFilter = XyRatioFilter;