From 5bb1293e0b6e70626a85ac7ffeb32e2b0d587622 Mon Sep 17 00:00:00 2001 From: tdgao Date: Tue, 14 Jul 2026 10:15:31 -0700 Subject: [PATCH] fix: analytics tooltip not pinned after mobile chart drag --- .../analytics-chart/AnalyticsChart.client.vue | 17 ++++++++++------- .../use-analytics-chart-interactions.ts | 2 ++ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/apps/frontend/src/components/analytics-dashboard/analytics-chart/AnalyticsChart.client.vue b/apps/frontend/src/components/analytics-dashboard/analytics-chart/AnalyticsChart.client.vue index 930d56c040..712a8fe9b1 100644 --- a/apps/frontend/src/components/analytics-dashboard/analytics-chart/AnalyticsChart.client.vue +++ b/apps/frontend/src/components/analytics-dashboard/analytics-chart/AnalyticsChart.client.vue @@ -775,19 +775,22 @@ function suppressUpcomingChartClick() { }, 350) } -function clearUnpinnedTouchInteraction(ignoreClick: boolean) { +function clearUnpinnedTouchInteraction(ignoreClick: boolean, pinHover = false) { if (props.pinnedSliceIndex !== null) return - clearChartActiveState() - updateChartWithoutGeometry() - if (ignoreClick) { suppressUpcomingChartClick() + } + if (pinHover) { emit('touch-drag') - return } - emit('hover', { visible: false, x: 0, y: 0, sliceIndex: null }) + clearChartActiveState() + updateChartWithoutGeometry() + + if (!pinHover) { + emit('hover', { visible: false, x: 0, y: 0, sliceIndex: null }) + } } function handleCanvasClickCapture(event: MouseEvent) { @@ -918,7 +921,7 @@ function handleRangePointerEnd(event: PointerEvent) { if (isRangeSelecting && rangeSelectPointerType === 'touch') { event.preventDefault() - clearUnpinnedTouchInteraction(true) + clearUnpinnedTouchInteraction(true, true) } else if (isRangeSelecting && startSliceIndex !== null && endSliceIndex !== null) { event.preventDefault() emit('range-select', { startSliceIndex, endSliceIndex }) diff --git a/apps/frontend/src/components/analytics-dashboard/analytics-chart/analytics-chart-plot/use-analytics-chart-interactions.ts b/apps/frontend/src/components/analytics-dashboard/analytics-chart/analytics-chart-plot/use-analytics-chart-interactions.ts index 25c7099a43..4b19880945 100644 --- a/apps/frontend/src/components/analytics-dashboard/analytics-chart/analytics-chart-plot/use-analytics-chart-interactions.ts +++ b/apps/frontend/src/components/analytics-dashboard/analytics-chart/analytics-chart-plot/use-analytics-chart-interactions.ts @@ -110,6 +110,8 @@ export function useAnalyticsChartInteractions({ function onTouchDragEnd() { ignoreUpcomingChartClick() + if (!hoverState.visible || hoverState.sliceIndex === null) return + isHoverPinned.value = true } function onChartGeometry(payload: AnalyticsChartGeometryPayload) {