/** * WordPress dependencies */ import { PanelRow } from '@safe-wordpress/components'; import { useSelect } from '@safe-wordpress/data'; import { _x, sprintf } from '@safe-wordpress/i18n'; /** * External dependencies */ import { store as NAB_DATA } from '@nab/data'; import { formatNumber } from '@nab/i18n'; /** * Internal dependencies */ import './style.scss'; import { getMoneyLabel, getNumberLabel } from '../../utils'; import { useAreUniqueResultsVisible } from '../../hooks'; export function Metrics(): JSX.Element { const { areResultsUnique, conversionRate, conversions, ecommerce, uniquePageViews, totalPageViews, revenue, } = useAttributes(); return ( <> { areResultsUnique ? _x( 'Total Page Views', 'text', 'nelio-ab-testing' ) : _x( 'Page Views', 'text', 'nelio-ab-testing' ) } { getNumberLabel( totalPageViews ) } { areResultsUnique && ( { _x( 'Unique Page Views', 'text', 'nelio-ab-testing' ) } { getNumberLabel( uniquePageViews ) } ) } { !! ecommerce && ( { _x( 'Revenue', 'text', 'nelio-ab-testing' ) } { getMoneyLabel( revenue, ecommerce ) } ) } { areResultsUnique ? _x( 'Unique Conversions', 'text', 'nelio-ab-testing' ) : _x( 'Conversions', 'text', 'nelio-ab-testing' ) } { getNumberLabel( conversions ) } { _x( 'Conversion Rate', 'text', 'nelio-ab-testing' ) } { getConversionRateLabel( conversionRate ) } ); } // ===== // HOOKS // ===== const useAttributes = () => { const [ areResultsUnique ] = useAreUniqueResultsVisible(); return useSelect( ( select ) => { const { getConversions, getExperimentAttribute, getPageAttribute, getPageViews, getTotalPageViews, getUniquePageViews, getTotalRevenue, getECommercePlugin, } = select( NAB_DATA ); const activeExperiment = getPageAttribute( 'editor/activeExperiment' ) ?? 0; const goals = getExperimentAttribute( activeExperiment, 'goals' ) ?? []; const activeGoalId = getPageAttribute( 'editor/activeGoal' ) ?? goals[ 0 ]?.id ?? ''; const pageViews = getPageViews( activeExperiment ); const conversions = getConversions( activeExperiment, activeGoalId ); const revenue = getTotalRevenue( activeExperiment, activeGoalId ); return { totalPageViews: getTotalPageViews( activeExperiment ), uniquePageViews: getUniquePageViews( activeExperiment ), conversions, conversionRate: ( conversions / pageViews ) * 100 || 0, areResultsUnique, revenue, ecommerce: getECommercePlugin( activeExperiment, activeGoalId ), }; }, [ areResultsUnique ] ); }; // ======= // HELPERS // ======= function getConversionRateLabel( conversionRate?: number ): string { if ( ! conversionRate ) { return '—'; } return sprintf( '%s%%', formatNumber( conversionRate ) ); }