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 } from 'App/components/ui'; import { InfoCircleOutlined } from '@ant-design/icons'; import { useTranslation } from 'react-i18next'; function ClickMapCard() { const { t } = useTranslation(); const [customSession, setCustomSession] = React.useState(null); const { metricStore, dashboardStore, sessionStore } = useStore(); const { fetchInsights } = sessionStore; const { insights } = sessionStore; const onMarkerClick = (s: string, innerText: string) => { metricStore.changeClickMapSearch(s, innerText); }; const { sessionId } = metricStore.instance.data; const url = metricStore.instance.data.path; const operator = metricStore.instance.series[0]?.filter.filters[0]?.operator ? metricStore.instance.series[0].filter.filters[0].operator : 'startsWith'; React.useEffect(() => () => 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(() => { if (!url || !sessionId) return; const { rangeValue } = dashboardStore.drillDownPeriod; const startDate = dashboardStore.drillDownPeriod.start; const endDate = dashboardStore.drillDownPeriod.end; void fetchInsights({ url: url || '/', startDate, endDate, rangeValue, clickRage: metricStore.clickMapFilter, operator, }); }, [ sessionId, url, dashboardStore.drillDownPeriod.start, dashboardStore.drillDownPeriod.end, dashboardStore.drillDownPeriod.rangeValue, metricStore.clickMapFilter, ]); if (!metricStore.instance.data.domURL || insights.length === 0) { return ( {t( 'Set a start point to visualize the heatmap. If set, try adjusting filters.', )} } show /> ); } if (!metricStore.instance.data?.sessionId || !customSession) { return
{t('Loading session')}
; } const jumpToEvent = metricStore.instance.data.events.find( (evt: Record) => { if (url) return evt.path.includes(url); 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);