import { Button, Modal, TextControl } from '@wordpress/components'; import { useDispatch, useSelect } from '@wordpress/data'; import { check, Icon } from '@wordpress/icons'; import { __ } from '@wordpress/i18n'; import { useEffect, useRef, createInterpolateElement, memo, } from '@wordpress/element'; import { ENTER } from '@wordpress/keycodes'; import { isEmail } from '@wordpress/url'; import { useEntityProp } from '@wordpress/core-data'; import { MailPoetEmailData, SendingPreviewStatus, storeName, } from '../../store'; import { recordEvent, recordEventOnce } from '../../events'; function RawSendPreviewEmail() { const sendToRef = useRef( null ); const { requestSendingNewsletterPreview, togglePreviewModal, updateSendPreviewEmail, } = useDispatch( storeName ); const { toEmail: previewToEmail, isSendingPreviewEmail, sendingPreviewStatus, isModalOpened, } = useSelect( ( select ) => select( storeName ).getPreviewState(), [] ); const [ mailpoetEmailData ] = useEntityProp( 'postType', 'mailpoet_email', 'mailpoet_data' ) as [ MailPoetEmailData, unknown, unknown ]; const handleSendPreviewEmail = () => { void requestSendingNewsletterPreview( mailpoetEmailData.id, previewToEmail ); }; const closeCallback = () => { recordEvent( 'send_preview_email_modal_closed' ); void togglePreviewModal( false ); }; // We use this effect to focus on the input field when the modal is opened useEffect( () => { if ( isModalOpened ) { sendToRef.current?.focus(); recordEvent( 'send_preview_email_modal_opened' ); } }, [ isModalOpened ] ); if ( ! isModalOpened ) { return null; } return ( { sendingPreviewStatus === SendingPreviewStatus.ERROR ? (
{ __( 'Sorry, we were unable to send this email.', 'mailpoet' ) }
) : null }

{ createInterpolateElement( __( 'Send yourself a test email to test how your email would look like in different email apps. You can also test your spam score by sending a test email to {$serviceName}. Learn more.', 'mailpoet' ).replace( '{$serviceName}', 'Mail Tester' ), { link1: ( // eslint-disable-next-line jsx-a11y/anchor-has-content, jsx-a11y/control-has-associated-label recordEvent( 'send_preview_email_modal_send_test_email_to_mail_tester_link_clicked' ) } /> ), link2: ( // eslint-disable-next-line jsx-a11y/anchor-has-content, jsx-a11y/control-has-associated-label recordEvent( 'send_preview_email_modal_learn_more_about_mail_tester_link_clicked' ) } /> ), } ) }

{ void updateSendPreviewEmail( email ); recordEventOnce( 'send_preview_email_modal_send_to_field_updated' ); } } onKeyDown={ ( event ) => { const { keyCode } = event; if ( keyCode === ENTER ) { event.preventDefault(); handleSendPreviewEmail(); recordEvent( 'send_preview_email_modal_send_to_field_key_code_enter' ); } } } value={ previewToEmail } type="email" ref={ sendToRef } required /> { sendingPreviewStatus === SendingPreviewStatus.SUCCESS ? (

{ __( 'Test email sent successfully!', 'mailpoet' ) }

) : null }
); } export const SendPreviewEmail = memo( RawSendPreviewEmail );