/** * External dependencies */ import { Button, Modal, TextControl } from '@wordpress/components'; import { useDispatch, useSelect } from '@wordpress/data'; import { check, Icon } from '@wordpress/icons'; import { __, sprintf } from '@wordpress/i18n'; import { useEffect, useRef, createInterpolateElement, memo, } from '@wordpress/element'; import { ENTER } from '@wordpress/keycodes'; import { isEmail } from '@wordpress/url'; import { applyFilters } from '@wordpress/hooks'; /** * Internal dependencies */ import { SendingPreviewStatus, storeName, editorCurrentPostType, } from '../../store'; import { recordEvent, recordEventOnce } from '../../events'; const sendingMethodConfigurationLink = applyFilters( 'mailpoet_email_editor_check_sending_method_configuration_link', 'admin.php?page=mailpoet-settings#mta' ) as string; function RawSendPreviewEmail() { const sendToRef = useRef( null ); const { requestSendingNewsletterPreview, togglePreviewModal, updateSendPreviewEmail, } = useDispatch( storeName ); const { toEmail: previewToEmail, isSendingPreviewEmail, sendingPreviewStatus, isModalOpened, errorMessage, } = useSelect( ( select ) => select( storeName ).getPreviewState(), [] ); const handleSendPreviewEmail = () => { void requestSendingNewsletterPreview( 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' ) }

{ errorMessage && sprintf( // translators: %s is an error message. __( 'Error: %s', 'mailpoet' ), errorMessage ) }
) : 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 );