all files / chart/utils/ get-data.js

100% Statements 86/86
100% Branches 69/69
100% Functions 10/10
100% Lines 86/86
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121   2975× 2975× 2975× 2975×   433× 433× 433× 433× 433× 433× 668× 668×   668×   668× 552×   668× 262×     171×   615×   552× 552× 552× 552× 552× 552× 552× 552× 552× 2968× 2968× 2810× 93×     2875× 158× 158× 158×   158× 158× 158× 158× 158× 158× 158× 158× 158× 158× 158×           2717× 256×     290×   2717× 2717× 2992× 2992×     332× 332× 332× 297× 3006× 3006× 1023×       332×   332× 332× 332× 264×     68×   332× 332× 1321× 1321× 291×     41×        
define(["require", "exports", "../../common/utils/helper"], function (require, exports, helper_1) {
    "use strict";
    Object.defineProperty(exports, "__esModule", { value: true });
    var ChartData = (function () {
        function ChartData(chart) {
            this.currentPoints = [];
            this.previousPoints = [];
            this.chart = chart;
            this.lierIndex = 0;
        }
        ChartData.prototype.getData = function () {
            var chart = this.chart;
            var point = null;
            var series = null;
            var width;
            var height;
            for (var len = chart.visibleSeries.length, i = len - 1; i >= 0; i--) {
                series = chart.visibleSeries[i];
                width = (series.type === 'Scatter' || series.drawType === 'Scatter' || (!series.isRectSeries && series.marker.visible))
                    ? (series.marker.height + 5) / 2 : 0;
                height = (series.type === 'Scatter' || series.drawType === 'Scatter' || (!series.isRectSeries && series.marker.visible))
                    ? (series.marker.width + 5) / 2 : 0;
                if (series.visible && helper_1.withInBounds(chart.mouseX, chart.mouseY, series.clipRect, width, height)) {
                    point = this.getRectPoint(series, series.clipRect, chart.mouseX, chart.mouseY);
                }
                if (point) {
                    return new helper_1.PointData(point, series);
                }
            }
            return new helper_1.PointData(point, series);
        };
        ChartData.prototype.isSelected = function (chart) {
            return (chart.selectionMode.indexOf('Drag') > -1 && chart.selectionModule && chart.selectionModule.rectPoints !== null);
        };
        ChartData.prototype.getRectPoint = function (series, rect, x, y) {
            var currentRect;
            var fromCenterX;
            var fromCenterY;
            var clickAngle;
            var arcAngle = 0;
            var startAngle;
            var endAngle;
            var distanceFromCenter;
            for (var _i = 0, _a = series.points; _i < _a.length; _i++) {
                var point = _a[_i];
                if (!point.regionData) {
                    if (!point.regions || !point.regions.length) {
                        continue;
                    }
                }
                if (point.regionData && this.chart.chartAreaType === 'PolarRadar' && series.drawType.indexOf('Column') > -1) {
                    fromCenterX = x - (series.clipRect.width / 2 + series.clipRect.x);
                    fromCenterY = y - (series.clipRect.height / 2 + series.clipRect.y);
                    arcAngle = 2 * Math.PI * (point.regionData.currentXPosition < 0 ? 1 + point.regionData.currentXPosition
                        : point.regionData.currentXPosition);
                    clickAngle = (Math.atan2(fromCenterY, fromCenterX) + 0.5 * Math.PI - arcAngle) % (2 * Math.PI);
                    clickAngle = clickAngle < 0 ? 2 * Math.PI + clickAngle : clickAngle;
                    clickAngle = clickAngle + 2 * Math.PI * series.chart.primaryXAxis.startAngle;
                    startAngle = point.regionData.startAngle;
                    startAngle -= arcAngle;
                    startAngle = startAngle < 0 ? 2 * Math.PI + startAngle : startAngle;
                    endAngle = point.regionData.endAngle;
                    endAngle -= arcAngle;
                    endAngle = endAngle < 0 ? 2 * Math.PI + endAngle : endAngle;
                    distanceFromCenter = Math.sqrt(Math.pow(Math.abs(fromCenterX), 2) + Math.pow(Math.abs(fromCenterY), 2));
                    if (clickAngle >= startAngle && clickAngle <= endAngle &&
                        (((distanceFromCenter >= point.regionData.innerRadius && distanceFromCenter <= point.regionData.radius) ||
                            (distanceFromCenter <= point.regionData.innerRadius && distanceFromCenter >= point.regionData.radius))
                            && distanceFromCenter <= series.chart.radius)) {
                        return point;
                    }
                }
                else if (this.checkRegionContainsPoint(point.regions, rect, x, y)) {
                    return point;
                }
            }
            return null;
        };
        ChartData.prototype.checkRegionContainsPoint = function (regionRect, rect, x, y) {
            var _this = this;
            return regionRect.some(function (region, index) {
                _this.lierIndex = index;
                return helper_1.withInBounds(x, y, new helper_1.Rect((_this.chart.chartAreaType === 'Cartesian' ? rect.x : 0) + region.x, (_this.chart.chartAreaType === 'Cartesian' ? rect.y : 0) + region.y, region.width, region.height));
            });
        };
        ChartData.prototype.getClosest = function (series, value) {
            var xData = series.xData;
            var closest;
            if (value >= series.xMin - 0.5 && value <= series.xMax + 0.5) {
                for (var _i = 0, xData_1 = xData; _i < xData_1.length; _i++) {
                    var data = xData_1[_i];
                    if (closest == null || Math.abs(data - value) < Math.abs(closest - value)) {
                        closest = data;
                    }
                }
            }
            return closest;
        };
        ChartData.prototype.getClosestX = function (chart, series) {
            var value;
            var rect = series.clipRect;
            if (!chart.requireInvertedAxis) {
                value = helper_1.getValueXByPoint(chart.mouseX - rect.x, rect.width, series.xAxis);
            }
            else {
                value = helper_1.getValueYByPoint(chart.mouseY - rect.y, rect.height, series.xAxis);
            }
            var closest = this.getClosest(series, value);
            for (var _i = 0, _a = series.points; _i < _a.length; _i++) {
                var point = _a[_i];
                if (closest === point.xValue && point.visible) {
                    return new helper_1.PointData(point, series);
                }
            }
            return null;
        };
        return ChartData;
    }());
    exports.ChartData = ChartData;
});