diff --git a/components/memes/drops/MemesLeaderboardDrop.tsx b/components/memes/drops/MemesLeaderboardDrop.tsx index 9f3b584f14..7a4dda49f2 100644 --- a/components/memes/drops/MemesLeaderboardDrop.tsx +++ b/components/memes/drops/MemesLeaderboardDrop.tsx @@ -18,6 +18,7 @@ import useIsMobileScreen from "@/hooks/isMobileScreen"; import useDeviceInfo from "@/hooks/useDeviceInfo"; import useLongPressInteraction from "@/hooks/useLongPressInteraction"; import { useMediaQuery } from "@/hooks/useMediaQuery"; +import { startDropOpen } from "@/utils/monitoring/dropOpenTiming"; import Link from "next/link"; import React, { useState } from "react"; import { createPortal } from "react-dom"; @@ -75,7 +76,16 @@ export const MemesLeaderboardDrop: React.FC = ({ return (
!hasTouchScreen && onDropClick(drop)} + onClick={() => { + if (hasTouchScreen) return; + startDropOpen({ + dropId: drop.id, + waveId: drop.wave.id, + source: "leaderboard_memes", + isMobile: isMobileScreen, + }); + onDropClick(drop); + }} >
diff --git a/components/waves/drop/SingleWaveDropWrapper.tsx b/components/waves/drop/SingleWaveDropWrapper.tsx index 408b16fff1..b25c8e4671 100644 --- a/components/waves/drop/SingleWaveDropWrapper.tsx +++ b/components/waves/drop/SingleWaveDropWrapper.tsx @@ -5,11 +5,18 @@ import type { ApiDrop } from "@/generated/models/ApiDrop"; import type { ApiWave } from "@/generated/models/ApiWave"; import { useMediaQuery } from "@/hooks/useMediaQuery"; import { Transition } from "@headlessui/react"; +import { markDropOpenReady } from "@/utils/monitoring/dropOpenTiming"; import { ArrowLeftIcon, ChatBubbleLeftRightIcon, } from "@heroicons/react/24/outline"; -import React, { Fragment, useCallback, useEffect, useState } from "react"; +import React, { + Fragment, + useCallback, + useEffect, + useRef, + useState, +} from "react"; import { SingleWaveDropChat } from "./SingleWaveDropChat"; interface SingleWaveDropWrapperProps { @@ -27,6 +34,7 @@ export const SingleWaveDropWrapper: React.FC = ({ }) => { const [isChatOpen, setIsChatOpen] = useState(false); const isSmallScreen = useMediaQuery("(max-width: 1023px)"); + const readyKeyRef = useRef(null); const toggleChat = useCallback(() => { setIsChatOpen((prev) => !prev); @@ -50,34 +58,42 @@ export const SingleWaveDropWrapper: React.FC = ({ }; }, [isChatOpen, isSmallScreen]); + useEffect(() => { + const readyKey = `${drop.id}:${wave.id}`; + if (readyKeyRef.current === readyKey) return; + readyKeyRef.current = readyKey; + markDropOpenReady({ dropId: drop.id, waveId: wave.id }); + }, [drop.id, wave.id]); return ( -
-
-
-
+
+
+
+
-
+