import { observer } from 'mobx-react'; import * as React from 'react'; import { makeObservable, observable } from 'mobx'; import { Popover } from 'react-bootstrap'; import bind from 'bind-decorator'; import classnames from 'classnames'; import Portal from 'react-overlays/lib/Portal'; import $ from 'jquery'; export interface IWaterfallPlotTooltipProps { container: HTMLDivElement; overlay: JSX.Element; targetCoords: { x: number; y: number }; targetHovered?: boolean; className?: string; placement?: string; } @observer export default class WaterfallPlotTooltip extends React.Component< IWaterfallPlotTooltipProps, {} > { constructor(props: IWaterfallPlotTooltipProps) { super(props); makeObservable(this); } @observable isHovered = false; // allows persistence when mouse rolls over tooltip @bind private onMouseEnter() { this.isHovered = true; } @bind private onMouseLeave() { this.isHovered = false; } render() { const arrowOffsetTop = 30; // experimentally determined const arrowOffsetLeft = 24; // experimentally determined const leftPadding = 5; const horizontal = !this.props.placement || this.props.placement === 'left' || this.props.placement === 'right'; const containerOffset = $(this.props.container).offset(); if (containerOffset && (this.props.targetHovered || this.isHovered)) { return ( {this.props.overlay} ); } else { return null; } } }