Skip to content

Commit 0c8186d

Browse files
authored
feat: add shift-to-interact hint and refresh clickmap on shift release (#42304)
1 parent 9607974 commit 0c8186d

File tree

4 files changed

+20
-3
lines changed

4 files changed

+20
-3
lines changed

frontend/src/lib/components/heatmaps/useShiftKeyPressed.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1-
import { useState } from 'react'
1+
import { useRef, useState } from 'react'
22

33
import { useOnMountEffect } from 'lib/hooks/useOnMountEffect'
44

5-
export function useShiftKeyPressed(): boolean {
5+
export function useShiftKeyPressed(onShiftReleased?: () => void): boolean {
66
const [isShiftPressed, setIsShiftPressed] = useState(false)
7+
const onShiftReleasedRef = useRef(onShiftReleased)
8+
onShiftReleasedRef.current = onShiftReleased
79

810
useOnMountEffect(() => {
911
const handleKeyDown = (event: KeyboardEvent): void => {
@@ -15,6 +17,7 @@ export function useShiftKeyPressed(): boolean {
1517
const handleKeyUp = (event: KeyboardEvent): void => {
1618
if (event.key === 'Shift') {
1719
setIsShiftPressed(false)
20+
onShiftReleasedRef.current?.()
1821
}
1922
}
2023

frontend/src/toolbar/elements/Elements.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,9 @@ export function Elements(): JSX.Element {
3030
} = useValues(elementsLogic)
3131
const { setHoverElement, selectElement } = useActions(elementsLogic)
3232
const { highestClickCount } = useValues(heatmapToolbarMenuLogic)
33+
const { refreshClickmap } = useActions(heatmapToolbarMenuLogic)
3334

34-
const shiftPressed = useShiftKeyPressed()
35+
const shiftPressed = useShiftKeyPressed(refreshClickmap)
3536
const heatmapPointerEvents = shiftPressed ? 'none' : 'all'
3637

3738
const { theme } = useValues(toolbarLogic)

frontend/src/toolbar/elements/heatmapToolbarMenuLogic.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,7 @@ export const heatmapToolbarMenuLogic = kea<heatmapToolbarMenuLogicType>([
131131
startElementObservation: true,
132132
stopElementObservation: true,
133133
processElements: true,
134+
refreshClickmap: true,
134135
setProcessedElements: (elements: CountedHTMLElement[]) => ({ elements }),
135136
setElementsLoading: (loading: boolean) => ({ loading }),
136137
setProcessingProgress: (processed: number, total: number) => ({ processed, total }),
@@ -521,6 +522,14 @@ export const heatmapToolbarMenuLogic = kea<heatmapToolbarMenuLogicType>([
521522
actions.processElements()
522523
},
523524

525+
refreshClickmap: () => {
526+
if (!values.clickmapsEnabled) {
527+
return
528+
}
529+
invalidatePageElementsCache(cache as ElementProcessingCache)
530+
actions.processElements()
531+
},
532+
524533
patchHeatmapFilters: ({ filters }) => {
525534
if (filters.type) {
526535
actions.resetHeatmapData()

frontend/src/toolbar/stats/HeatmapToolbarMenu.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,10 @@ export const HeatmapToolbarMenu = (): JSX.Element => {
191191
the event can be mapped to a specific element found on the page you are viewing but less
192192
data is usually captured.
193193
</p>
194+
<p className="text-xs italic">
195+
Tip: Hold <kbd className="border rounded px-1 py-0.5 bg-surface-tertiary">shift</kbd> to
196+
interact with the page beneath the clickmap.
197+
</p>
194198
<div className="flex items-center justify-between pb-2">
195199
<div className="flex items-center gap-1">
196200
<LemonLabel

0 commit comments

Comments
 (0)