in packages/showcase/misc/2d-dragable-plot.js [50:100]
render() {
const {filter, hovered, highlighting} = this.state;
const highlightPoint = d => {
if (!filter) {
return false;
}
const leftRight = d.x <= filter.right && d.x >= filter.left;
const upDown = d.y <= filter.top && d.y >= filter.bottom;
return leftRight && upDown;
};
const numSelectedPoints = filter ? data.filter(highlightPoint).length : 0;
return (
<div>
<XYPlot width={300} height={300}>
<VerticalGridLines />
<HorizontalGridLines />
<XAxis />
<YAxis />
<Highlight
drag
onBrushStart={() => this.setState({highlighting: true})}
onBrush={area => this.setState({filter: area})}
onBrushEnd={area =>
this.setState({highlighting: false, filter: area})
}
onDragStart={() => this.setState({highlighting: true})}
onDrag={area => this.setState({filter: area})}
onDragEnd={area =>
this.setState({highlighting: false, filter: area})
}
/>
<MarkSeries
className="mark-series-example"
strokeWidth={2}
opacity="0.8"
sizeRange={[5, 15]}
style={{pointerEvents: highlighting ? 'none' : ''}}
colorType="literal"
getColor={d => (highlightPoint(d) ? '#EF5D28' : '#12939A')}
onValueMouseOver={d => this.setState({hovered: d})}
onValueMouseOut={() => this.setState({hovered: false})}
data={data}
/>
{hovered && <Hint value={hovered} />}
</XYPlot>
<p>{`There are ${numSelectedPoints} selected points`}</p>
</div>
);
}