From d2c92a7b59ac0d9d591cde0c5c68f69372ee76d4 Mon Sep 17 00:00:00 2001 From: Pratik Agrawal Date: Fri, 17 Jan 2025 18:39:14 +0530 Subject: [PATCH] Revert AppCard.jsx --- frontend/src/HomePage/AppCard.jsx | 61 +++++++++++++++++++++++++------ 1 file changed, 50 insertions(+), 11 deletions(-) diff --git a/frontend/src/HomePage/AppCard.jsx b/frontend/src/HomePage/AppCard.jsx index 28c4e3dc83..dff0b7ca1c 100644 --- a/frontend/src/HomePage/AppCard.jsx +++ b/frontend/src/HomePage/AppCard.jsx @@ -1,8 +1,10 @@ -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'; import { ToolTip } from '@/_components/index'; +import OverflowTooltip from '@/_components/OverflowTooltip'; import useHover from '@/_hooks/useHover'; import configs from './Configs/AppIcon.json'; import { Link, useNavigate } from 'react-router-dom'; @@ -29,9 +31,22 @@ export default function AppCard({ const [hoverRef, isHovered] = useHover(); const [focused, setFocused] = useState(false); const [isMenuOpen, setMenuOpen] = useState(false); + const [isOverflowing, setIsOverflowing] = useState(false); + const h3Ref = useRef(null); 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,12 +69,34 @@ 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]); + + useEffect(() => { + const checkOverflow = () => { + if (h3Ref.current) { + setIsOverflowing(h3Ref.current.scrollWidth > h3Ref.current.clientWidth); + } + }; + + checkOverflow(); + window.addEventListener('resize', checkOverflow); + return () => window.removeEventListener('resize', checkOverflow); + }, []); const updated_at = app?.editing_version?.updated_at || app?.updated_at; const updated = moment(updated_at).fromNow(true); const darkMode = localStorage.getItem('darkMode') === 'true'; + const TooltipComponent = isOverflowing ? ToolTip : OverflowTooltip; let AppIcon; try { @@ -69,7 +106,7 @@ export default function AppCard({ } return ( -
+
@@ -90,7 +127,9 @@ export default function AppCard({ canUpdateApp={canUpdateApp(app)} deleteApp={() => deleteApp(app)} exportApp={() => exportApp(app)} - isMenuOpen={isMenuOpen} + isMenuOpen={setMenuOpen} + popoverVisible={popoverVisible} + setMenuOpen={setMenuOpen} darkMode={darkMode} currentFolder={currentFolder} /> @@ -99,14 +138,15 @@ export default function AppCard({
- +

{decodeEntities(app.name)}

-
+
{canUpdate && ( @@ -128,7 +168,7 @@ export default function AppCard({ reloadDocument > @@ -146,8 +186,7 @@ export default function AppCard({