mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
45 lines
1.3 KiB
TypeScript
45 lines
1.3 KiB
TypeScript
import React, { PureComponent } from 'react';
|
|
import { Manager, Popper as ReactPopper, Reference } from 'react-popper';
|
|
|
|
interface Props {
|
|
renderContent: (content: any) => any;
|
|
show: boolean;
|
|
placement?: any;
|
|
content: string | ((props: any) => JSX.Element);
|
|
refClassName?: string;
|
|
}
|
|
|
|
class Popper extends PureComponent<Props> {
|
|
render() {
|
|
const { children, renderContent, show, placement, refClassName } = this.props;
|
|
const { content } = this.props;
|
|
return (
|
|
<Manager>
|
|
<Reference>
|
|
{({ ref }) => (
|
|
<div className={`popper_ref ${refClassName || ''}`} ref={ref}>
|
|
{children}
|
|
</div>
|
|
)}
|
|
</Reference>
|
|
{show && (
|
|
<ReactPopper placement={placement}>
|
|
{({ ref, style, placement, arrowProps }) => {
|
|
return (
|
|
<div ref={ref} style={style} data-placement={placement} className="popper">
|
|
<div className="popper__background">
|
|
{renderContent(content)}
|
|
<div ref={arrowProps.ref} data-placement={placement} className="popper__arrow" />
|
|
</div>
|
|
</div>
|
|
);
|
|
}}
|
|
</ReactPopper>
|
|
)}
|
|
</Manager>
|
|
);
|
|
}
|
|
}
|
|
|
|
export default Popper;
|