/** * WordPress dependencies */ import '@safe-wordpress/notices'; import { dispatch, select } from '@safe-wordpress/data'; import domReady from '@safe-wordpress/dom-ready'; import { render } from '@safe-wordpress/element'; /** * External dependencies */ import { sortBy } from 'lodash'; import { store as NAB_DATA } from '@nab/data'; import { registerCoreExperiments } from '@nab/experiment-library'; import { registerCommands } from '@nab/commands'; import { PreviewUrlButton, TestCreationButtons, TitleAction, } from '@nab/components'; import { createStagingNotice } from '@nab/utils'; import type { RunningExperimentSummary, SubscriptionPlan } from '@nab/types'; /** * Internal dependencies */ import './style.scss'; import { renderHelp } from './help'; import { Layout } from './components/layout'; type Settings = { readonly staging: 'environment-type' | 'url' | false; readonly experiments: ReadonlyArray< RunningExperimentSummary >; readonly heatmaps: ReadonlyArray< RunningExperimentSummary >; readonly subscription: SubscriptionPlan | false; }; export function initPage( id: string, settings: Settings ): void { registerCoreExperiments(); domReady( () => registerCommands() ); const { staging, subscription, experiments, heatmaps } = settings; setRunningExperimentsInRecommendationEngine( [ ...experiments, ...heatmaps, ] ); const titleAction = document.getElementById( `${ id }-title-action` ); const content = document.getElementById( id ); createStagingNotice( staging ); render( <> , titleAction ); render( , content ); renderHelp(); } function setRunningExperimentsInRecommendationEngine( experiments: ReadonlyArray< RunningExperimentSummary > ) { const running = sortBy( experiments, 'startedAt' ).reverse(); const state = select( NAB_DATA ).getRecommendationEngineState(); void dispatch( NAB_DATA ).initRecommendationEngineData( { ...state, experiments: { ...state.experiments, runningCount: running.length, runningSummaries: running, }, } ); }