render()

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