/** * WordPress dependencies */ import apiFetch from '@safe-wordpress/api-fetch'; import { Button, NoticeList, ProgressBar } from '@safe-wordpress/components'; import { useDispatch, useSelect } from '@safe-wordpress/data'; import domReady from '@safe-wordpress/dom-ready'; import { render, useEffect, useState } from '@safe-wordpress/element'; import { _x } from '@safe-wordpress/i18n'; import { store as NOTICES } from '@safe-wordpress/notices'; /** * Internal dependencies */ import './style.scss'; import Logo from '~/nelio-content-images/full-logo.svg'; import { LicenseConnectionStep } from './components/license-connection-step'; import { MessageCreationStep } from './components/message-creation-step'; import { ProfileConnectionStep } from './components/profile-connection-step'; domReady( () => { const content = document.getElementById( 'nelio-content-page' ); render( , content ); } ); type Step = 'license' | 'connect-profile' | 'create-message' | 'finish'; const Page = () => { const [ step, setStep ] = useState< Step >( 'license' ); const [ isFinishing, markAsFinishing ] = useState( false ); const { notices, removeNotice } = useNotices(); const finish = () => { markAsFinishing( true ); }; useEffect( () => { if ( ! isFinishing ) { return; } apiFetch( { path: '/nelio-content/v1/wizard/end', method: 'POST', } ) .then( () => window.location.reload() ) .catch( () => { markAsFinishing( false ); } ); }, [ isFinishing ] ); return (
); }; // ============ // HELPER VIEWS // ============ type HeaderProps = { readonly step: Step; readonly isDisabled: boolean; readonly onSkip: () => void; }; const Header = ( { step, isDisabled, onSkip }: HeaderProps ) => { return (
{ isSkipButtonVisible( step ) && ( ) }
); }; type ContentProps = { readonly step: Step; readonly setStep: ( step: Step ) => void; readonly isDisabled: boolean; readonly onSkip: () => void; }; const Content = ( { step, setStep, isDisabled, onSkip }: ContentProps ) => { switch ( step ) { case 'license': return ( setStep( 'connect-profile' ) } /> ); case 'connect-profile': return ( setStep( 'license' ) } nextStep={ () => setStep( 'create-message' ) } /> ); default: return ( setStep( 'connect-profile' ) } nextStep={ () => setStep( 'finish' ) } onFinish={ onSkip } /> ); } }; // ===== // HOOKS // ===== const useNotices = () => { const notices = useSelect( ( select ) => select( NOTICES ).getNotices(), [] ); const { removeNotice } = useDispatch( NOTICES ); return { notices, removeNotice }; }; // ======= // HELPERS // ======= function getProgressValue( step: string ): number | undefined { switch ( step ) { case 'license': return 25; case 'connect-profile': return 50; case 'create-message': return 75; default: return 100; } } function getSkipLabel( step: string ): string { switch ( step ) { case 'connect-profile': case 'create-message': return _x( 'Skip guided setup', 'command', 'nelio-content' ); default: return ''; } } function isSkipButtonVisible( step: string ) { switch ( step ) { case 'connect-profile': case 'create-message': return true; default: return false; } }