/**
* 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
) : (
{ clicks.map( ( c ) => (
) ) }
) }
);
};
// =====
// 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 );
}