private renderWithScrolling()

in src/TornadoChart.ts [705:743]


    private renderWithScrolling(tornadoChartDataView: TornadoChartDataView, scrollStart: number, scrollEnd: number): void {
        if (!this.dataView || !this.dataView.settings) {
            return;
        }
        let categoriesLength: number = tornadoChartDataView.categories.length;
        let startIndex: number = scrollStart * categoriesLength;
        let endIndex: number = scrollEnd * categoriesLength;

        let startIndexRound: number = Math.floor(startIndex);
        let endIndexRound: number = Math.floor(endIndex);

        let maxValues: number = Math.floor(this.scrolling.scrollViewport.height / TornadoChart.CategoryMinHeight);

        if (scrollEnd - scrollStart < 1 && maxValues < endIndexRound - startIndexRound) {
            if (startIndex - startIndexRound > endIndex - endIndexRound) {
                startIndexRound++;
            }
            else {
                endIndex--;
            }
        }

        if (!this.dataView.hasHighlights) {
            this.interactivityService.applySelectionStateToData(tornadoChartDataView.dataPoints);
            this.interactivityService.applySelectionStateToData(tornadoChartDataView.highlightedDataPoints);
        }

        // Filter data according to the visible visual area
        tornadoChartDataView.categories = tornadoChartDataView.categories.slice(startIndexRound, endIndexRound);
        tornadoChartDataView.dataPoints = tornadoChartDataView.dataPoints.filter((d: TornadoChartPoint) => d.categoryIndex >= startIndexRound && d.categoryIndex < endIndexRound);
        tornadoChartDataView.highlightedDataPoints = tornadoChartDataView.highlightedDataPoints.filter((d: TornadoChartPoint) => d.categoryIndex >= startIndexRound && d.categoryIndex < endIndexRound);

        this.dataView = tornadoChartDataView;

        this.computeHeightColumn();
        this.renderMiddleSection();
        this.renderAxes();
        this.renderCategories();
    }