'use client' import React, { useState, useEffect, useRef } from 'react' import Image from 'next/image' import Link from 'next/link' import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, } from "@/components/ui/tooltip" import { useContextMenuTriggers } from "@/hooks/useContextMenuTriggers" export interface HoverCardsProps { triggerText: string videourl: string description: string linkText?: string link?: string, isImage?: boolean, } export default function HoverCards({ triggerText, videourl, description, link = '#', linkText = 'Purchase & Read More', isImage }: HoverCardsProps) { const [isTooltipOpen, setIsTooltipOpen] = useState(false); const [isMobile, setIsMobile] = useState(false); const tooltipRef = useRef(null); // Check if device is mobile useEffect(() => { const checkMobile = () => { setIsMobile(window.innerWidth < 768); }; // Set initial value checkMobile(); // Add event listener for window resize window.addEventListener('resize', checkMobile); // Cleanup return () => window.removeEventListener('resize', checkMobile); }, []); // Add click outside listener when tooltip is open useEffect(() => { if (isTooltipOpen && isMobile) { const handleOutsideClick = (e: MouseEvent) => { if (tooltipRef.current && !tooltipRef.current.contains(e.target as Node)) { setIsTooltipOpen(false); } }; // Add a slight delay before adding the event listener to prevent immediate closing const timeoutId = setTimeout(() => { document.addEventListener('click', handleOutsideClick); }, 100); return () => { clearTimeout(timeoutId); document.removeEventListener('click', handleOutsideClick); }; } }, [isTooltipOpen, isMobile]); // Custom handlers for mobile interactions const { handlers } = useContextMenuTriggers({ longPressDelay: 500, doubleClickDelay: 300, onLongPress: () => { if (isMobile) { console.log("Long press triggered tooltip"); setIsTooltipOpen(true); } }, onDoubleTap: () => { if (isMobile) { console.log("Double tap toggling tooltip"); setIsTooltipOpen(!isTooltipOpen); } } }); // Close tooltip function const handleCloseTooltip = (e: React.MouseEvent) => { e.stopPropagation(); setIsTooltipOpen(false); }; return ( {triggerText}
{isMobile && ( )}
{isImage ? ( Content preview ) : (

{description}

{linkText}
); }