From ac87322ac8a281419337dfcd5b728fa8ff5fb2d5 Mon Sep 17 00:00:00 2001 From: k00b Date: Tue, 13 Aug 2024 15:30:43 -0500 Subject: [PATCH] fix user/item popover --- components/hoverable-popover.js | 56 +++++++++---------------- components/hoverable-popover.module.css | 8 ---- 2 files changed, 20 insertions(+), 44 deletions(-) delete mode 100644 components/hoverable-popover.module.css diff --git a/components/hoverable-popover.js b/components/hoverable-popover.js index 57fa1a36..d68b6b74 100644 --- a/components/hoverable-popover.js +++ b/components/hoverable-popover.js @@ -1,56 +1,40 @@ -import { useRef, useState } from 'react' import { Popover } from 'react-bootstrap' import OverlayTrigger from 'react-bootstrap/OverlayTrigger' -import styles from './hoverable-popover.module.css' - -export default function HoverablePopover ({ id, trigger, body, onShow }) { - const [showOverlay, setShowOverlay] = useState(false) +import { useRef, useState } from 'react' +export default function HoverablePopover ({ trigger, body, onShow }) { + const [show, setShow] = useState(false) + const popRef = useRef(null) const timeoutId = useRef(null) - const handleMouseEnter = () => { + const onToggle = show => { clearTimeout(timeoutId.current) - onShow && onShow() - timeoutId.current = setTimeout(() => { - setShowOverlay(true) - }, 500) - } - - const handleMouseLeave = () => { - clearTimeout(timeoutId.current) - timeoutId.current = setTimeout(() => setShowOverlay(false), 100) + if (show) { + onShow?.() + timeoutId.current = setTimeout(() => setShow(true), 500) + } else { + timeoutId.current = setTimeout(() => setShow(!!popRef.current?.matches(':hover')), 500) + } } return ( - + onToggle(false)}> + {body} } > - + {trigger} diff --git a/components/hoverable-popover.module.css b/components/hoverable-popover.module.css deleted file mode 100644 index a1601726..00000000 --- a/components/hoverable-popover.module.css +++ /dev/null @@ -1,8 +0,0 @@ -.hoverablePopover { - border: 1px solid var(--theme-toolbarActive) -} - -.hoverablePopBody { - font-weight: 500; - font-size: 0.9rem; -}