From 22f220c88347b7a4f714d758f07be79e3e7f99af Mon Sep 17 00:00:00 2001 From: kushalsourav <66814079+kushalsourav@users.noreply.github.com> Date: Thu, 12 Dec 2024 10:58:46 +0530 Subject: [PATCH] fix: popup breaking screen (#11381) fixed auto close popover when user scroll pasts the app card Fix: #11256 --- frontend/src/HomePage/AppCard.jsx | 37 ++++++++++++++++++++++++------- frontend/src/HomePage/AppMenu.jsx | 6 ++++- 2 files changed, 34 insertions(+), 9 deletions(-) diff --git a/frontend/src/HomePage/AppCard.jsx b/frontend/src/HomePage/AppCard.jsx index 6d48ed0caa..8530cbf464 100644 --- a/frontend/src/HomePage/AppCard.jsx +++ b/frontend/src/HomePage/AppCard.jsx @@ -1,4 +1,4 @@ -import React, { useState, useCallback, useEffect } from 'react'; +import React, { useState, useCallback, useEffect, useRef } from 'react'; import cx from 'classnames'; import { AppMenu } from './AppMenu'; import moment from 'moment'; @@ -32,6 +32,17 @@ export default function AppCard({ const { t } = useTranslation(); const navigate = useNavigate(); + const cardRef = useRef(); + const [popoverVisible, setPopoverVisible] = useState(true) + const options = { + root: null, + rootMargin: '0px', + threshold: 1.0 + } + const callBackFunction = (entries) => { + const [entry] = entries; + setPopoverVisible(isMenuOpen && entry.isIntersecting) + } const onMenuToggle = useCallback( (status) => { setMenuOpen(!!status); @@ -54,8 +65,17 @@ export default function AppCard({ useEffect(() => { !isMenuOpen && setFocused(!!isHovered); + // eslint-disable-next-line react-hooks/exhaustive-deps - }, [isHovered]); + const observer = new IntersectionObserver(callBackFunction, options) + if (cardRef.current) observer.observe(cardRef.current) + + return () => { + if (cardRef.current) { + observer.unobserve(cardRef.current) + } + } + }, [isHovered, cardRef, options]); const updated_at = app?.editing_version?.updated_at || app?.updated_at; const updated = moment(updated_at).fromNow(true); @@ -69,7 +89,7 @@ export default function AppCard({ } return ( -