in src/visualComponent/svgComponent.ts [296:366]
private renderDynamicComponentByPosition(
offsetX: number,
xPosition: number,
yPosition: number,
baseOptions: ISvgComponentRenderOptions,
) {
const {
data: {
series,
margin,
settings: { yAxis },
},
additionalMargin,
} = baseOptions;
const amountOfPoints: number = series
&& series[0]
&& series[0].points
&& series[0].points.length
|| 0;
let dataPointIndex: number = this.getIndexByPosition(offsetX - margin.left - additionalMargin.left);
dataPointIndex = Math.min(Math.max(0, dataPointIndex), amountOfPoints);
const dataSeries: IDataRepresentationSeries[] = [];
baseOptions.data.series.forEach((seriesItem: IDataRepresentationSeries) => {
const point: IDataRepresentationPoint = seriesItem.points[dataPointIndex];
if (point) {
const seriesToReturn: IDataRepresentationSeries = {
...seriesItem,
points: [point],
};
dataSeries.push(seriesToReturn);
}
});
const options: IEventPositionVisualComponentOptions = {
data: {
...baseOptions.data,
series: dataSeries,
},
position: { x: xPosition, y: yPosition },
};
if (options.data.variances.length) {
options.data.variances = options.data.variances.map((varianceGroup: number[]) => {
const variance: number = varianceGroup[dataPointIndex];
if (!isNaN(variance) && variance !== null) {
return [variance];
}
return [];
});
}
this.forEach(
this.dynamicComponents,
(component: IVisualComponent<IVisualComponentRenderOptions>) => {
component.render(options);
if (component.show) {
component.show();
}
},
);
}