| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- import { cloneElement } from 'react'
- import {
- OverlayTrigger,
- OverlayTriggerProps,
- Tooltip as BSTooltip,
- } from 'react-bootstrap'
- import { callFnsInSequence } from '../../utils/functions'
- type OverlayProps = Omit<OverlayTriggerProps, 'overlay'> & {
- shouldUpdatePosition?: boolean // Not officially documented https://stackoverflow.com/a/43138470
- }
- export type TooltipProps = {
- description: React.ReactNode
- id: string
- overlayProps?: OverlayProps
- tooltipProps?: BSTooltip.TooltipProps
- children: React.ReactElement
- }
- function Tooltip({
- id,
- description,
- children,
- tooltipProps,
- overlayProps,
- }: TooltipProps) {
- const hideTooltip = (e: React.MouseEvent) => {
- if (e.currentTarget instanceof HTMLElement) {
- e.currentTarget.blur()
- }
- }
- return (
- <OverlayTrigger
- overlay={
- <BSTooltip id={`${id}-tooltip`} {...tooltipProps}>
- {description}
- </BSTooltip>
- }
- {...overlayProps}
- placement={overlayProps?.placement || 'top'}
- >
- {cloneElement(children, {
- onClick: callFnsInSequence(children.props.onClick, hideTooltip),
- })}
- </OverlayTrigger>
- )
- }
- export default Tooltip
|