import React, { useState } from "react"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { faClosedCaptioning, faMicrophone, } from "@fortawesome/free-solid-svg-icons"; import { useLanguage } from "@/src/context/LanguageContext"; import { Link, useNavigate } from "react-router-dom"; import useToolTipPosition from "@/src/hooks/useToolTipPosition"; import Qtip from "../qtip/Qtip"; function Topten({ data, className }) { const { language } = useLanguage(); const [activePeriod, setActivePeriod] = useState("today"); const [hoveredItem, setHoveredItem] = useState(null); const [hoverTimeout, setHoverTimeout] = useState(null); const navigate = useNavigate(); const handlePeriodChange = (period) => { setActivePeriod(period); }; const handleNavigate = (id) => { navigate(`/${id}`); window.scrollTo({ top: 0, behavior: "smooth" }); }; const currentData = activePeriod === "today" ? data.today : activePeriod === "week" ? data.week : data.month; const { tooltipPosition, tooltipHorizontalPosition, cardRefs } = useToolTipPosition(hoveredItem, currentData); const handleMouseEnter = (item, index) => { if (hoverTimeout) clearTimeout(hoverTimeout); setHoveredItem(item.id + index); }; const handleMouseLeave = () => { setHoverTimeout( setTimeout(() => { setHoveredItem(null); }, 300) // Small delay to prevent flickering ); }; return (

Top 10

{currentData && currentData.map((item, index) => (
(cardRefs.current[index] = el)} >

{`${index + 1 < 10 ? "0" : ""}${index + 1}`}

{/* Image with tooltip behavior */} {item.title} navigate(`/watch/${item.id}`)} onMouseEnter={() => handleMouseEnter(item, index)} onMouseLeave={handleMouseLeave} /> {/* Tooltip positioned near image */} {hoveredItem === item.id + index && window.innerWidth > 1024 && (
{ if (hoverTimeout) clearTimeout(hoverTimeout); }} onMouseLeave={handleMouseLeave} >
)}
handleNavigate(item.id)} > {language === "EN" ? item.title : item.japanese_title}
{item.tvInfo?.sub && (

{item.tvInfo.sub}

)} {item.tvInfo?.dub && (

{item.tvInfo.dub}

)}
))}
); } export default React.memo(Topten);