import React, { createRef, FC } from 'react'; import { VirtualElement } from '@popperjs/core'; import { Popover } from './Popover'; import { PopoverController, UsingPopperProps } from './PopoverController'; export interface TooltipProps extends UsingPopperProps { theme?: 'info' | 'error' | 'info-alt'; } export interface PopoverContentProps { updatePopperPosition?: () => void; } export type PopoverContent = string | React.ReactElement | ((props: PopoverContentProps) => JSX.Element); export const Tooltip: FC = React.memo(({ children, theme, ...controllerProps }: TooltipProps) => { const tooltipTriggerRef = createRef(); const popperBackgroundClassName = 'popper__background' + (theme ? ' popper__background--' + theme : ''); return ( {(showPopper, hidePopper, popperProps) => { { /* Override internal 'show' state if passed in as prop */ } const payloadProps = { ...popperProps, show: controllerProps.show !== undefined ? controllerProps.show : popperProps.show, }; return ( <> {tooltipTriggerRef.current && controllerProps.content && ( (
)} /> )} {React.cloneElement(children, { ref: tooltipTriggerRef, onMouseEnter: showPopper, onMouseLeave: hidePopper, })} ); }} ); }); Tooltip.displayName = 'Tooltip';