/** * WordPress dependencies */ import { useSelect, useDispatch } from '@wordpress/data'; /** * Internal dependencies */ import { store as NAB_CHECKER } from '../store'; import { getTestName } from '../utils'; import { ClickEvent } from '../store/types'; export const HeatmapClicks = (): JSX.Element => { const { clicks: allClicks, experiments, heatmaps, isAwaitingGdpr, } = useSelect( ( select ) => ( { clicks: select( NAB_CHECKER ).getHeatmapClicks(), experiments: select( NAB_CHECKER ).getSettings().experiments, heatmaps: select( NAB_CHECKER ).getSettings().heatmaps, isAwaitingGdpr: select( NAB_CHECKER ).isAwaitingGdpr(), } ), [] ); if ( isAwaitingGdpr ) { return
Awaiting GDPR consent…
; } const clicks = allClicks.slice( 0, 50 ); const tests = [ ...experiments.filter( ( e ) => e.active && e.heatmapTracking ), ...heatmaps, ] .map( ( e ) => getTestName( e ) ) .join( ', ' ); return (
Heatmap Events for { tests }
{ ! clicks.length ? (
None
) : ( ) }
); }; // ===== // VIEWS // ===== function Click( { attributes }: { readonly attributes: ClickEvent } ) { const highlightedClick = useSelect( ( select ) => select( NAB_CHECKER ).getHighlightedClick(), [] ); const { setHighlightedClick } = useDispatch( NAB_CHECKER ); const isActive = highlightedClick === attributes; const onClick = () => setHighlightedClick( ! isActive ? attributes : undefined ); return (
  • Click on{ ' ' }
  • ); } function shorten( s: string ): string { if ( s.length < 35 ) { return s; } return s.slice( 0, 10 ) + '…' + s.slice( s.length - 24, s.length ); }