private renderDynamicComponentByPosition()

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