/** * WordPress dependencies */ import { Dashicon } from '@safe-wordpress/components'; import { useSelect } from '@safe-wordpress/data'; import { createInterpolateElement } from '@safe-wordpress/element'; import { _x, sprintf } from '@safe-wordpress/i18n'; /** * External dependencies */ import { AlternativeDistributionSetting } from '@nab/components'; import { store as NAB_DATA } from '@nab/data'; import { EMPTY_ARRAY } from '@nab/utils'; import type { Alternative, GoalId, Results, ECommercePlugin, Experiment, ExperimentId, } from '@nab/types'; /** * Internal dependencies */ import { AlternativeContainer } from './alternative-container'; import { useAreUniqueResultsVisible } from '../hooks'; import './style.scss'; export const AlternativeSection = (): JSX.Element => { const { activeGoal, alternatives = [], areResultsUnique, isPublicView, experimentId, experimentStatus, ecommerce, results, winnerAlternative, pageViews, } = useAlternativesData(); const alternativeId = alternatives[ 0 ]?.id; const data = alternativeId ? results?.[ alternativeId ] : undefined; const controlRevenue = areResultsUnique ? data?.uniqueValues?.[ activeGoal ] || 0 : data?.values?.[ activeGoal ] || 0; const controlConversions = areResultsUnique ? data?.uniqueConversions?.[ activeGoal ] || 0 : data?.conversions?.[ activeGoal ] || 0; const controlArpc = ! controlConversions ? 0 : controlRevenue / controlConversions; return (

{ createInterpolateElement( sprintf( /* translators: %s: Dashicon. */ _x( '%s Control Version and Variants', 'text', 'nelio-ab-testing' ), '' ), { icon: ( ), } ) }

{ alternatives.map( ( alternative, index ) => ( ) ) }
); }; // ===== // HOOKS // ===== const useAlternativesData = () => { const [ areResultsUnique ] = useAreUniqueResultsVisible(); return useSelect( ( select ): AlternativesData => { const { getExperimentAttribute, getResultsOfAlternatives, getWinnerAlternative, getPageAttribute, getPageViews, getECommercePlugin, } = select( NAB_DATA ); const expId = getPageAttribute( 'editor/activeExperiment' ); if ( ! expId ) { return NO_DATA; } const isPublicView = getPageAttribute( 'results/isPublicView' ) ?? false; const goals = getExperimentAttribute( expId, 'goals' ); if ( ! goals?.length ) { return NO_DATA; } const activeGoal = getPageAttribute( 'editor/activeGoal' ) ?? goals[ 0 ]?.id ?? ''; return { experimentId: expId, experimentStatus: getExperimentAttribute( expId, 'status' ) ?? 'draft', alternatives: getExperimentAttribute( expId, 'alternatives' ) ?? EMPTY_ARRAY, areResultsUnique, isPublicView, results: getResultsOfAlternatives( expId ), activeGoal, ecommerce: getECommercePlugin( expId, activeGoal ), winnerAlternative: getWinnerAlternative( expId, activeGoal ), pageViews: getPageViews( expId ), }; }, [ areResultsUnique ] ); }; // ===== // DATA // ===== type AlternativesData = { readonly experimentId: ExperimentId; readonly experimentStatus: Experiment[ 'status' ]; readonly alternatives: ReadonlyArray< Alternative >; readonly areResultsUnique: boolean; readonly isPublicView: boolean; readonly results?: Results[ 'alternatives' ]; readonly activeGoal: GoalId; readonly ecommerce?: ECommercePlugin; readonly winnerAlternative?: number; readonly pageViews: number; }; const NO_DATA: AlternativesData = { experimentId: 0, experimentStatus: 'draft', alternatives: [], activeGoal: '', areResultsUnique: false, isPublicView: false, ecommerce: undefined, pageViews: 0, };