import React, { FC } from 'react'; import { cx, css } from 'emotion'; import { Manager, Popper as ReactPopper, Reference } from 'react-popper'; import Transition from 'react-transition-group/Transition'; import { stylesFactory } from '@grafana/ui'; import BodyPortal from './Portal'; const getStyles = stylesFactory(() => ({ defaultTransitionStyles: css` transition: opacity 200ms linear; opacity: 0; `, })); const transitionStyles = { exited: { opacity: 0 }, entering: { opacity: 0 }, entered: { opacity: 1 }, exiting: { opacity: 0 }, }; interface Props { renderContent: (content: any) => any; show: boolean; placement?: any; content: string | ((props: any) => JSX.Element); refClassName?: string; popperClassName?: string; } const Popper: FC = ({ show, placement, popperClassName, refClassName, content, children, renderContent }) => { const refClass = cx('popper_ref', refClassName); const styles = getStyles(); const popperClass = cx('popper', popperClassName, styles.defaultTransitionStyles); return ( {({ ref }) => (
{children}
)}
{transitionState => ( {({ ref, style, placement, arrowProps }) => { return (
{renderContent(content)}
); }} )} ); }; export default Popper;