import React from 'react' import { useStore } from 'App/mstore' import { observer } from 'mobx-react-lite' import ClickMapRenderer from 'App/components/Session/Player/ClickMapRenderer' import { NoContent, Icon } from 'App/components/ui' function ClickMapCard() { const [customSession, setCustomSession] = React.useState(null) const { metricStore, dashboardStore, sessionStore } = useStore(); const fetchInsights = sessionStore.fetchInsights const insights = sessionStore.insights const onMarkerClick = (s: string, innerText: string) => { metricStore.changeClickMapSearch(s, innerText) } const mapUrl = metricStore.instance.series[0].filter.filters[0].value[0] const sessionId = metricStore.instance.data.sessionId React.useEffect(() => { return () => setCustomSession(null) }, []) React.useEffect(() => { if (metricStore.instance.data.domURL && sessionId && sessionId !== customSession?.sessionId) { setCustomSession(null) setTimeout(() => { setCustomSession(metricStore.instance.data) }, 100) } }, [metricStore.instance, sessionId]) React.useEffect(() => { const rangeValue = dashboardStore.drillDownPeriod.rangeValue const startDate = dashboardStore.drillDownPeriod.start const endDate = dashboardStore.drillDownPeriod.end void fetchInsights({ url: mapUrl || '/', startDate, endDate, rangeValue, clickRage: metricStore.clickMapFilter }) }, [dashboardStore.drillDownPeriod.start, dashboardStore.drillDownPeriod.end, dashboardStore.drillDownPeriod.rangeValue, metricStore.clickMapFilter]) if (!metricStore.instance.data.domURL || insights.size === 0) { return ( No data available for the selected period. } show={true} /> ) } if (!metricStore.instance.data?.sessionId || !customSession) { return
Loading session
} const jumpToEvent = metricStore.instance.data.events.find((evt: Record) => { if (mapUrl) return evt.path.includes(mapUrl) return evt }) || { timestamp: metricStore.instance.data.startTs } const ts = jumpToEvent.timestamp ?? metricStore.instance.data.startTs const domTime = jumpToEvent.domBuildingTime ?? 0 const jumpTimestamp = (ts - metricStore.instance.data.startTs) + domTime + 99 // 99ms safety margin to give some time for the DOM to load return (
) } export default observer(ClickMapCard)