/**
* WordPress dependencies
*/
import { useSelect } from '@safe-wordpress/data';
/**
* External dependencies
*/
import clsx from 'clsx';
import type {
AlternativeId,
AlternativeIndex,
Dict,
Heatmap,
} from '@nab/types';
/**
* Internal dependencies
*/
import './style.scss';
import { useActiveExperiment, useSidebarVisibility } from '../hooks';
import { store as NAB_HEATMAP } from '../../store';
import { Sidebar } from '../sidebar';
import { View } from '../view';
export type LayoutProps = {
readonly alternativeId: AlternativeId;
};
export const Layout = (): JSX.Element => {
const [ isVisible ] = useSidebarVisibility();
const contentUrls = useContentUrls();
return (
{ contentUrls.map( ( { alternative, url } ) => (
) ) }
);
};
// =====
// HOOKS
// =====
type Result = { readonly alternative: AlternativeIndex; url: string };
const useContentUrls = (): ReadonlyArray< Result > => {
const experiment = useActiveExperiment();
const iframes = useSelect(
( select ) => select( NAB_HEATMAP ).getIFrames(),
[]
);
if ( ! experiment ) {
return [];
}
if ( isHeatmap( experiment ) ) {
return [ { alternative: 0, url: experiment.links.heatmap } ];
}
return experiment.alternatives
.map( ( alt, index ) => ( {
alternative: index,
url: alt.links.heatmap,
} ) )
.filter( ( _, i ) => iframes.includes( i ) );
};
const isHeatmap = ( e: Dict ): e is Heatmap => 'nab/heatmap' === e.type;