export function useTooltip()

in packages/rc-components/rc-truncate/src/utils.tsx [13:72]


export function useTooltip({
  showTooltip,
  tooltipMaxWidth,
  align,
  originalContent,
  truncatedContent,
  popupStyle = {},
  popupClassName = '',
  patchPopupProps,
}: {
  showTooltip: boolean
  tooltipMaxWidth?: number
  align?: AlignType
  originalContent: React.ReactNode
  truncatedContent: React.ReactNode
  popupStyle?: React.CSSProperties
  popupClassName?: string
  patchPopupProps?: IPatchPopupProps
}) {
  const actualPopupStyle: React.CSSProperties = {
    ...popupStyle,
  }
  if (
    showTooltip &&
    typeof tooltipMaxWidth === 'number' &&
    tooltipMaxWidth > 0
  ) {
    actualPopupStyle.maxWidth = tooltipMaxWidth
  }

  const ballonProps = (() => {
    const originalProps: BalloonProps = {
      trigger: truncatedContent,
      align,
      popupStyle: actualPopupStyle as {},
      popupClassName: classnames(tooltipPopupClassName, popupClassName),
      alignEdge: true,
      needAdjust: true,
      closable: false, // hidden close icon
    }
    if (!showTooltip) {
      // showTooltip:true时,使用balloon默认的非受控模式;
      // showTooltip:false时,使用balloon的受控模式来阻止弹层
      originalProps.visible = false
    }
    if (!patchPopupProps) return originalProps
    return patchPopupProps(originalProps)
  })()

  return (
    <Balloon {...ballonProps}>
      <span
        style={{ display: 'inline-block' }}
        className={originalContentClassName}
      >
        {originalContent}
      </span>
    </Balloon>
  )
}