/** * WordPress dependencies */ import { select as doSelect, useDispatch } from '@safe-wordpress/data'; import { useCallback, useEffect } from '@safe-wordpress/element'; import { _x } from '@safe-wordpress/i18n'; /** * External dependencies */ import clsx from 'clsx'; import { BigMessage, LoadingAnimation } from '@nab/components'; import type { AlternativeIndex, HeatmapErrorRationale, HeatmapFrameAction, } from '@nab/types'; /** * Internal dependencies */ import './style.scss'; import { useActiveAlternative, useActiveFilter, useActiveMode, useActiveResolution, useDisabledFilterOptions, useHasProcessedResults, useHeatmapIntensity, useHeatmapOpacity, useInteractivity, useIsProcessingResults, useProcessedResultsStatus, useRawResultsStatus, } from '../hooks'; import { store as NAB_HEATMAP } from '../../store'; export type ViewProps = { readonly className: string; readonly alternative: AlternativeIndex; readonly contentUrl?: string; }; export const View = ( { className, alternative, contentUrl, }: ViewProps ): JSX.Element => { const [ activeAlternative ] = useActiveAlternative(); useProcessResultsEffect( alternative ); useRenderResultsEffect( alternative ); useOpacityChangeEffect( alternative ); useIntensityChangeEffect( alternative ); useInteractivityChangeEffect( alternative ); const [ resolution ] = useActiveResolution(); const awaitRendererScript = useRendererScriptWaiter( alternative ); const isHidden = alternative !== activeAlternative; return (