({
trigger = ['hover', 'focus'],
overlay,
children,
popperConfig = {},
show: propsShow,
defaultShow = false,
onToggle,
delay: propsDelay,
placement,
flip = placement && placement.indexOf('auto') !== -1,
...props
}: OverlayTriggerProps)
| 175 | }; |
| 176 | |
| 177 | const OverlayTrigger: React.FC<OverlayTriggerProps> = ({ |
| 178 | trigger = ['hover', 'focus'], |
| 179 | overlay, |
| 180 | children, |
| 181 | popperConfig = {}, |
| 182 | |
| 183 | show: propsShow, |
| 184 | defaultShow = false, |
| 185 | onToggle, |
| 186 | |
| 187 | delay: propsDelay, |
| 188 | placement, |
| 189 | flip = placement && placement.indexOf('auto') !== -1, |
| 190 | ...props |
| 191 | }: OverlayTriggerProps) => { |
| 192 | const triggerNodeRef = useRef(null); |
| 193 | const mergedRef = useMergedRefs<unknown>( |
| 194 | triggerNodeRef, |
| 195 | getChildRef(children), |
| 196 | ); |
| 197 | const timeout = useTimeout(); |
| 198 | const hoverStateRef = useRef<string>(''); |
| 199 | |
| 200 | const [show, setShow] = useUncontrolledProp(propsShow, defaultShow, onToggle); |
| 201 | |
| 202 | const delay = normalizeDelay(propsDelay); |
| 203 | |
| 204 | const { onFocus, onBlur, onClick } = |
| 205 | typeof children !== 'function' |
| 206 | ? React.Children.only(children).props |
| 207 | : ({} as any); |
| 208 | |
| 209 | const attachRef = (r: React.Component | Element | null | undefined) => { |
| 210 | mergedRef(safeFindDOMNode(r)); |
| 211 | }; |
| 212 | |
| 213 | const handleShow = useCallback(() => { |
| 214 | timeout.clear(); |
| 215 | hoverStateRef.current = 'show'; |
| 216 | |
| 217 | if (!delay.show) { |
| 218 | setShow(true); |
| 219 | return; |
| 220 | } |
| 221 | |
| 222 | timeout.set(() => { |
| 223 | if (hoverStateRef.current === 'show') setShow(true); |
| 224 | }, delay.show); |
| 225 | }, [delay.show, setShow, timeout]); |
| 226 | |
| 227 | const handleHide = useCallback(() => { |
| 228 | timeout.clear(); |
| 229 | hoverStateRef.current = 'hide'; |
| 230 | |
| 231 | if (!delay.hide) { |
| 232 | setShow(false); |
| 233 | return; |
| 234 | } |
nothing calls this directly
no test coverage detected
searching dependent graphs…