diff --git a/package.json b/package.json index ab6568c..d1a46a9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@chartwerk/line-pod", - "version": "0.6.5", + "version": "0.6.6", "description": "Chartwerk line chart", "main": "dist/index.js", "scripts": { diff --git a/src/index.ts b/src/index.ts index 70ec9c5..8380f35 100644 --- a/src/index.ts +++ b/src/index.ts @@ -221,7 +221,7 @@ export class LinePod extends ChartwerkPod { default: throw new Error(`Unknown type of crosshair orientaion: ${this.options.crosshair.orientation}`); } - + // TODO: d3.bisect is not the best way. Use binary search const bisectIndex = d3.bisector((d: [number, number]) => d[columnIdx]).left; let closestIdx = bisectIndex(datapoints, value); @@ -290,15 +290,14 @@ export class LinePod extends ChartwerkPod { let points = []; // datapoints in each metric that is closest to xValue/yValue position this.series.visibleSeries.forEach((serie: LineTimeSerie) => { const closestDatapoint = this.getClosestDatapoint(serie, xValue, yValue); - if(closestDatapoint === undefined) { + if(_.isNil(closestDatapoint) || _.isNil(closestDatapoint[0])) { this.hideCrosshairCircle(serie.idx); - return; + } else { + const xPosition = this.state.xScale(closestDatapoint[0]); + const yPosition = this.state.yScale(closestDatapoint[1]); + this.moveCrosshairCircle(xPosition, yPosition, serie.idx); } - const xPosition = this.state.xScale(closestDatapoint[0]); - const yPosition = this.state.yScale(closestDatapoint[1]); - this.moveCrosshairCircle(xPosition, yPosition, serie.idx); - points.push({ value: closestDatapoint, color: serie.color, @@ -357,7 +356,7 @@ export class LinePod extends ChartwerkPod { this.renderYAxis(); this.renderGrid(); this.onMouseOver(); - + let xAxisMiddleValue: number = this.state.xScale.invert(this.width / 2); let yAxisMiddleValue: number = this.state.yScale.invert(this.height / 2); const centers = {