scichart
Version:
Fast WebGL JavaScript Charting Library and Framework
248 lines (247 loc) • 10.9 kB
JavaScript
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 __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.switchData = exports.XyFilterBase = exports.EDataSeriesField = void 0;
var Deleter_1 = require("../../../Core/Deleter");
var IDataSeries_1 = require("../IDataSeries");
var XyDataSeries_1 = require("../XyDataSeries");
var EDataSeriesField;
(function (EDataSeriesField) {
EDataSeriesField["X"] = "x";
EDataSeriesField["Open"] = "open";
EDataSeriesField["High"] = "high";
EDataSeriesField["Low"] = "low";
EDataSeriesField["Close"] = "close";
EDataSeriesField["Y"] = "y";
EDataSeriesField["Y1"] = "y1";
EDataSeriesField["Z"] = "z";
})(EDataSeriesField = exports.EDataSeriesField || (exports.EDataSeriesField = {}));
/**
* Base class for a filter that produces an {@link XyDataSeries}.
* @remarks
* The originalSeries can be any series type (other than heatmap).
* Pass field in the options to determine which field will be returned by getOriginalYValues.
*
* To create a filter it is only necessary to implement filterAll, and onClear,
* but if possible you should override filterOnAppend, filterOnUpdate, filterOnInsert and filterOnRemove
*/
var XyFilterBase = /** @class */ (function (_super) {
__extends(XyFilterBase, _super);
/**
* Creates an instance of {@link XyFilterBase}
* @param originalSeries the {@link BaseDataSeries} to be filtered
* @param options the {@link IXyFilterOptions} which can be passed to configure the Filter at construct time
*/
function XyFilterBase(originalSeries, options) {
var _this = this;
var _a, _b;
_this = _super.call(this, originalSeries.webAssemblyContext, options) || this;
/**
* The field that will be returned by getOriginalYValues.
*/
_this.field = EDataSeriesField.Y;
/**
* The field that will be returned by getOriginalYValues.
*/
_this.xField = EDataSeriesField.X;
_this.originalSeriesProperty = originalSeries;
_this.field = (_a = options === null || options === void 0 ? void 0 : options.field) !== null && _a !== void 0 ? _a : _this.field;
_this.xField = (_b = options === null || options === void 0 ? void 0 : options.xField) !== null && _b !== void 0 ? _b : _this.xField;
_this.onBaseDataChanged = _this.onBaseDataChanged.bind(_this);
originalSeries.dataChanged.subscribe(_this.onBaseDataChanged);
switch (_this.originalSeries.type) {
case IDataSeries_1.EDataSeriesType.Xy:
if (_this.xField === EDataSeriesField.Y) {
_this.getOriginalXValues = function () { return _this.originalSeries.getNativeYValues(); };
}
if (_this.field === EDataSeriesField.X) {
_this.getOriginalYValues = function () { return _this.originalSeries.getNativeXValues(); };
}
break;
case IDataSeries_1.EDataSeriesType.Ohlc:
_this.getOriginalXValues = function () {
return _this.getValuesFromOHLC(_this.xField, _this.originalSeries);
};
_this.getOriginalYValues = function () {
return _this.getValuesFromOHLC(_this.field, _this.originalSeries);
};
break;
case IDataSeries_1.EDataSeriesType.Xyy:
_this.getOriginalXValues = function () {
return _this.getValuesFromXyy(_this.xField, _this.originalSeries);
};
_this.getOriginalYValues = function () { return _this.getValuesFromXyy(_this.field, _this.originalSeries); };
break;
case IDataSeries_1.EDataSeriesType.Xyz:
_this.getOriginalXValues = function () {
return _this.getValuesFromXyz(_this.xField, _this.originalSeries);
};
_this.getOriginalYValues = function () { return _this.getValuesFromXyz(_this.field, _this.originalSeries); };
break;
case IDataSeries_1.EDataSeriesType.Hlc:
_this.getOriginalXValues = function () {
return _this.getValuesFromHlc(_this.xField, _this.originalSeries);
};
_this.getOriginalYValues = function () { return _this.getValuesFromHlc(_this.field, _this.originalSeries); };
break;
default:
break;
}
return _this;
}
Object.defineProperty(XyFilterBase.prototype, "originalSeries", {
get: function () {
return this.originalSeriesProperty;
},
enumerable: false,
configurable: true
});
XyFilterBase.prototype.detachFromOriginalSeries = function () {
this.originalSeries.dataChanged.unsubscribe(this.onBaseDataChanged);
this.originalSeriesProperty = undefined;
};
XyFilterBase.prototype.delete = function () {
this.originalSeriesProperty = (0, Deleter_1.deleteSafe)(this.originalSeries);
_super.prototype.delete.call(this);
};
/**
* Get the X values of the original series
*/
XyFilterBase.prototype.getOriginalXValues = function () {
return this.originalSeries.getNativeXValues();
};
/**
* Get the Y values of the original series, according to the field set.
*/
XyFilterBase.prototype.getOriginalYValues = function () {
return this.originalSeries.getNativeYValues();
};
/**
* Get the length of the original series.
*/
XyFilterBase.prototype.getOriginalCount = function () {
return this.originalSeries.count();
};
/**
* Callback when a property on the original series is changed.
* @param name The name of the property that changed
*/
XyFilterBase.prototype.onOriginalPropertyChanged = function (name) { };
/**
* Called when data is appended to the original series
* @param count The number of points appended
*/
XyFilterBase.prototype.filterOnAppend = function (count) {
this.filterAll();
};
/**
* Called when a point on the original series is updated
* @param index The index of the updated point.
*/
XyFilterBase.prototype.filterOnUpdate = function (index) {
this.filterAll();
};
/**
* Called when data is inserted to the original series
* @param startIndex The first index where data is inserted
* @param count The number of points inserted
*/
XyFilterBase.prototype.filterOnInsert = function (startIndex, count) {
this.filterAll();
};
/**
* Called when data is removed form the original series
* @param startIndex The first index where data is removed
* @param count The number of points removed
*/
XyFilterBase.prototype.filterOnRemove = function (startIndex, count) {
this.filterAll();
};
/**
* Called when the original series is cleared.
*/
XyFilterBase.prototype.onClear = function () {
this.clear();
};
XyFilterBase.prototype.onBaseDataChanged = function (args) {
var changeType = args.changeType, name = args.name, index = args.index, count = args.count;
switch (changeType) {
case IDataSeries_1.EDataChangeType.Property:
this.onOriginalPropertyChanged(name);
return;
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;
}
};
XyFilterBase.prototype.getValuesFromOHLC = function (field, ohlcSeries) {
return (0, exports.switchData)(field, ohlcSeries.getNativeXValues(), ohlcSeries.getNativeYValues(), ohlcSeries.getNativeOpenValues(), ohlcSeries.getNativeHighValues(), ohlcSeries.getNativeLowValues());
};
XyFilterBase.prototype.getValuesFromXyy = function (field, xyySeries) {
return (0, exports.switchData)(field, xyySeries.getNativeXValues(), xyySeries.getNativeYValues(), xyySeries.getNativeY1Values());
};
XyFilterBase.prototype.getValuesFromXyz = function (field, xyzSeries) {
return (0, exports.switchData)(field, xyzSeries.getNativeXValues(), xyzSeries.getNativeYValues(), xyzSeries.getNativeZValues());
};
XyFilterBase.prototype.getValuesFromHlc = function (field, hlcSeries) {
return (0, exports.switchData)(field, hlcSeries.getNativeXValues(), hlcSeries.getNativeYValues(), undefined, hlcSeries.getNativeHighValues(), hlcSeries.getNativeLowValues());
};
return XyFilterBase;
}(XyDataSeries_1.XyDataSeries));
exports.XyFilterBase = XyFilterBase;
var switchData = function (field, x, closey, openy1z, high, low) {
var data;
switch (field) {
case EDataSeriesField.X:
data = x;
break;
case EDataSeriesField.Close:
case EDataSeriesField.Y:
data = closey;
break;
case EDataSeriesField.Open:
case EDataSeriesField.Y1:
case EDataSeriesField.Z:
data = openy1z;
break;
case EDataSeriesField.High:
data = high;
break;
case EDataSeriesField.Low:
data = low;
break;
}
if (!data) {
throw new Error("".concat(field, " does not exist"));
}
return data;
};
exports.switchData = switchData;
;