From 1758f73ecd45f046c26694bf22eb2cdf49832c57 Mon Sep 17 00:00:00 2001 From: unix Date: Wed, 8 Apr 2020 07:52:10 +0800 Subject: [PATCH] feat(tooltip): append visible prop to control visible state manually --- components/tooltip/tooltip-content.tsx | 1 - components/tooltip/tooltip.tsx | 11 +++++++++-- pages/en-us/components/tooltip.mdx | 1 + pages/zh-cn/components/tooltip.mdx | 1 + 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/components/tooltip/tooltip-content.tsx b/components/tooltip/tooltip-content.tsx index a674959..a9aadbd 100644 --- a/components/tooltip/tooltip-content.tsx +++ b/components/tooltip/tooltip-content.tsx @@ -73,7 +73,6 @@ const TooltipContent: React.FC> = React.memo(({ const preventHandler = (event: React.MouseEvent) => { event.stopPropagation() - event.preventDefault() event.nativeEvent.stopImmediatePropagation() } diff --git a/components/tooltip/tooltip.tsx b/components/tooltip/tooltip.tsx index 97c9e9f..a7baa09 100644 --- a/components/tooltip/tooltip.tsx +++ b/components/tooltip/tooltip.tsx @@ -1,4 +1,4 @@ -import React, { useRef, useState } from 'react' +import React, { useEffect, useRef, useState } from 'react' import withDefaults from '../utils/with-defaults' import TooltipContent from './tooltip-content' import useClickAway from '../utils/use-click-away' @@ -8,6 +8,7 @@ interface Props { text: string | React.ReactNode type?: SnippetTypes placement?: Placement + visible?: boolean initialVisible?: boolean hideArrow?: boolean trigger?: TriggerTypes @@ -39,7 +40,7 @@ export type TooltipProps = Props & typeof defaultProps & NativeAttrs const Tooltip: React.FC> = ({ children, initialVisible, text, offset, placement, portalClassName, enterDelay, leaveDelay, trigger, type, className, onVisibleChange, - hideArrow, ...props + hideArrow, visible: customVisible, ...props }) => { const timer = useRef() const ref = useRef(null) @@ -74,8 +75,14 @@ const Tooltip: React.FC> = ({ const mouseEventHandler = (next: boolean) => trigger === 'hover' && changeVisible(next) const clickEventHandler = () => trigger === 'click' && changeVisible(!visible) + useClickAway(ref, () => trigger === 'click' && changeVisible(false)) + useEffect(() => { + if (customVisible === undefined) return + changeVisible(customVisible) + }, [customVisible]) + return (