/** * WordPress dependencies */ import { useDispatch, useSelect } from '@safe-wordpress/data'; /** * External dependencies */ import { store as NAB_DATA } from '@nab/data'; import type { Experiment, Maybe } from '@nab/types'; export function useExperimentAttribute< K extends keyof Experiment >( attr: K ): Maybe< Experiment[ K ] > { const exp = useSelect( ( select ) => select( NAB_DATA ).getPageAttribute( 'editor/activeExperiment' ), [] ); const value = useSelect( ( select ) => !! exp ? select( NAB_DATA ).getExperimentAttribute( exp, attr ) : undefined, [ exp, attr ] ); return value; } export function useAreUniqueResultsVisible(): [ boolean, ( visible: boolean ) => void, ] { const value = useSelect( ( select ) => { const exp = select( NAB_DATA ).getPageAttribute( 'editor/activeExperiment' ); return exp ? select( NAB_DATA ).areUniqueResultsVisible( exp ) : false; }, [] ); const { setPageAttribute } = useDispatch( NAB_DATA ); const setValue = ( visible: boolean ) => setPageAttribute( 'results/shouldShowUniqueResults', visible ); return [ value, setValue ]; } export function useHasUniqueResults(): boolean { return useSelect( ( select ) => { const exp = select( NAB_DATA ).getPageAttribute( 'editor/activeExperiment' ); return exp ? select( NAB_DATA ).areUniqueResultsAvailable( exp ) : false; }, [] ); } // DEPRECATED. Eventually, all tests will have unique results, so you can get rid of this. export function useMayHaveUniqueResults(): boolean { return useSelect( ( select ) => { const expId = select( NAB_DATA ).getPageAttribute( 'editor/activeExperiment' ); const exp = select( NAB_DATA ).getExperiment( expId ); return ! exp?.endDate || '2025-06-16' <= exp.endDate; }, [] ); }