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();
}