Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | 74x 74x 115x 74x 115x 124x 124x 124x 124x 238x 242x 115x 4x 115x 2x 74x | import { Placement } from 'popper.js';
import React, { Component, ReactEventHandler, ReactNode } from 'react';
import { Manager, Popper, Reference } from 'react-popper';
export interface TooltipTriggerProps {
placement?: Placement;
tooltip: ReactNode;
}
export interface TooltipTriggerState {
shouldShow: boolean;
}
export default class TooltipTrigger extends Component<TooltipTriggerProps, TooltipTriggerState> {
static defaultProps = {
placement: 'bottom',
};
state: Readonly<TooltipTriggerState> = {
shouldShow: false,
};
render() {
const { children, placement, tooltip } = this.props;
const { shouldShow } = this.state;
return (
<Manager>
<Reference>
{ ({ ref }) => (
<span
onBlur={ this.handleHide }
onFocus={ this.handleShow }
onMouseEnter={ this.handleShow }
onMouseLeave={ this.handleHide }
ref={ ref }
>
{ children }
</span>
) }
</Reference>
<Popper
modifiers={ {
hide: { enabled: false },
flip: { enabled: false },
preventOverflow: { enabled: false },
} }
placement={ placement }
>
{ ({ ref, style }) => (
shouldShow && <div
ref={ ref }
style={ style }
>
{ tooltip }
</div>
) }
</Popper>
</Manager>
);
}
private handleShow: ReactEventHandler<HTMLElement> = () => {
this.setState({ shouldShow: true });
};
private handleHide: ReactEventHandler<HTMLElement> = () => {
this.setState({ shouldShow: false });
};
}
|