diff --git a/apps/admin-x-settings/src/components/settings/email/newsletters/NewsletterDetailModal.tsx b/apps/admin-x-settings/src/components/settings/email/newsletters/NewsletterDetailModal.tsx index 3f3dc94e2a..8fd9e8ea06 100644 --- a/apps/admin-x-settings/src/components/settings/email/newsletters/NewsletterDetailModal.tsx +++ b/apps/admin-x-settings/src/components/settings/email/newsletters/NewsletterDetailModal.tsx @@ -4,7 +4,7 @@ import React, {useEffect, useState} from 'react'; import useFeatureFlag from '../../../../hooks/useFeatureFlag'; import useSettingGroup from '../../../../hooks/useSettingGroup'; import validator from 'validator'; -import {Button, ButtonGroup, ColorPickerField, ConfirmationModal, Form, Heading, Hint, HtmlField, Icon, ImageUpload, LimitModal, PreviewModalContent, Select, SelectOption, Separator, SettingGroupContent, Tab, TabView, TextArea, TextField, Toggle, ToggleGroup, showToast} from '@tryghost/admin-x-design-system'; +import {Button, ButtonGroup, ColorPickerField, ConfirmationModal, Form, Heading, Hint, HtmlField, Icon, ImageUpload, LimitModal, Link, PreviewModalContent, Select, SelectOption, Separator, Tab, TabView, TextArea, TextField, Toggle, ToggleGroup, showToast} from '@tryghost/admin-x-design-system'; import {Config, hasSendingDomain, isManagedEmail, sendingDomain} from '@tryghost/admin-x-framework/api/config'; import {ErrorMessages, useForm, useHandleError} from '@tryghost/admin-x-framework/hooks'; import {HostLimitError, useLimiter} from '../../../../hooks/useLimiter'; @@ -15,7 +15,7 @@ import {getSettingValues} from '@tryghost/admin-x-framework/api/settings'; import {textColorForBackgroundColor} from '@tryghost/color-utils'; import {useGlobalData} from '../../../providers/GlobalDataProvider'; -const renderSenderEmail = (newsletter: Newsletter, config: Config, defaultEmailAddress: string|undefined) => { +export const renderSenderEmail = (newsletter: Newsletter, config: Config, defaultEmailAddress: string|undefined) => { if (isManagedEmail(config) && !hasSendingDomain(config) && defaultEmailAddress) { // Not changeable: sender_email is ignored return defaultEmailAddress; @@ -33,7 +33,7 @@ const renderSenderEmail = (newsletter: Newsletter, config: Config, defaultEmailA return newsletter.sender_email || defaultEmailAddress || ''; }; -const renderReplyToEmail = (newsletter: Newsletter, config: Config, supportEmailAddress: string|undefined, defaultEmailAddress: string|undefined) => { +export const renderReplyToEmail = (newsletter: Newsletter, config: Config, supportEmailAddress: string|undefined, defaultEmailAddress: string|undefined) => { if (newsletter.sender_reply_to === 'newsletter') { return renderSenderEmail(newsletter, config, defaultEmailAddress); } @@ -175,7 +175,7 @@ const Sidebar: React.FC<{ return ( + To customise, set up a custom sending domain + + ); + // Pro users without custom sending domains return ( - To customise, set up a custom sending domain - } - ]} + ); }; diff --git a/apps/admin-x-settings/src/components/settings/email/newsletters/NewsletterPreview.tsx b/apps/admin-x-settings/src/components/settings/email/newsletters/NewsletterPreview.tsx index 9b3585ded9..f75d3c0e5e 100644 --- a/apps/admin-x-settings/src/components/settings/email/newsletters/NewsletterPreview.tsx +++ b/apps/admin-x-settings/src/components/settings/email/newsletters/NewsletterPreview.tsx @@ -3,14 +3,14 @@ import React from 'react'; import useFeatureFlag from '../../../../hooks/useFeatureFlag'; import {Newsletter} from '@tryghost/admin-x-framework/api/newsletters'; import {getSettingValues} from '@tryghost/admin-x-framework/api/settings'; -import {hasSendingDomain, isManagedEmail} from '@tryghost/admin-x-framework/api/config'; +import {renderReplyToEmail, renderSenderEmail} from './NewsletterDetailModal'; import {textColorForBackgroundColor} from '@tryghost/color-utils'; import {useGlobalData} from '../../../providers/GlobalDataProvider'; const NewsletterPreview: React.FC<{newsletter: Newsletter}> = ({newsletter}) => { const hasEmailCustomization = useFeatureFlag('emailCustomization'); const {currentUser, settings, siteData, config} = useGlobalData(); - const [title, icon, commentsEnabled, defaultEmailAddress] = getSettingValues(settings, ['title', 'icon', 'comments_enabled', 'default_email_address']); + const [title, icon, commentsEnabled, supportEmailAddress, defaultEmailAddress] = getSettingValues(settings, ['title', 'icon', 'comments_enabled', 'support_email_address', 'default_email_address']); let headerTitle: string | null = null; if (newsletter.show_header_title) { @@ -91,17 +91,6 @@ const NewsletterPreview: React.FC<{newsletter: Newsletter}> = ({newsletter}) => secondaryTextColor } : {}; - const renderSenderEmail = () => { - if (isManagedEmail(config)) { - if (!hasSendingDomain(config)) { - // Sender email is ignored - return defaultEmailAddress || ''; - } - } - - return newsletter.sender_email || defaultEmailAddress || ''; - }; - return = ({newsletter}) => headerImage={newsletter.header_image} headerSubtitle={headerSubtitle} headerTitle={headerTitle} - senderEmail={renderSenderEmail()} + senderEmail={renderSenderEmail(newsletter, config, defaultEmailAddress)} senderName={newsletter.sender_name || title} + senderReplyTo={renderReplyToEmail(newsletter, config, supportEmailAddress, defaultEmailAddress)} showBadge={newsletter.show_badge} showCommentCta={showCommentCta} showFeatureImage={newsletter.show_feature_image} diff --git a/apps/admin-x-settings/src/components/settings/email/newsletters/NewsletterPreviewContent.tsx b/apps/admin-x-settings/src/components/settings/email/newsletters/NewsletterPreviewContent.tsx index 3bea96cc37..05d23ba2ca 100644 --- a/apps/admin-x-settings/src/components/settings/email/newsletters/NewsletterPreviewContent.tsx +++ b/apps/admin-x-settings/src/components/settings/email/newsletters/NewsletterPreviewContent.tsx @@ -4,11 +4,14 @@ import LatestPosts2 from '../../../../assets/images/latest-posts-2.png'; import LatestPosts3 from '../../../../assets/images/latest-posts-3.png'; import clsx from 'clsx'; import {GhostOrb, Icon} from '@tryghost/admin-x-design-system'; +import {isManagedEmail} from '@tryghost/admin-x-framework/api/config'; import {textColorForBackgroundColor} from '@tryghost/color-utils'; +import {useGlobalData} from '../../../providers/GlobalDataProvider'; const NewsletterPreviewContent: React.FC<{ senderName?: string; - senderEmail: string; + senderEmail: string | null; + senderReplyTo: string | null; headerImage?: string | null; headerIcon?: string; headerTitle?: string | null; @@ -38,6 +41,7 @@ const NewsletterPreviewContent: React.FC<{ }> = ({ senderName, senderEmail, + senderReplyTo, headerImage, headerIcon, headerTitle, @@ -66,6 +70,7 @@ const NewsletterPreviewContent: React.FC<{ titleColor }) => { const showHeader = headerIcon || headerTitle; + const {config} = useGlobalData(); const currentDate = new Date().toLocaleDateString('default', { year: 'numeric', @@ -76,14 +81,26 @@ const NewsletterPreviewContent: React.FC<{ const backgroundColorIsDark = backgroundColor && textColorForBackgroundColor(backgroundColor).hex().toLowerCase() === '#ffffff'; + let emailHeader; + + if (!isManagedEmail(config)) { + emailHeader = <>

{senderName} {senderEmail}

+

To: Jamie Larson jamie@example.com

; + } else { + emailHeader = <>

From: {senderName} ({senderEmail})

+

+ Reply-to: {senderReplyTo ? senderReplyTo : 'Not set' } +

+ ; + } + return (
{/* Email header */}
-

{senderName} {senderEmail}

-

To: Jamie Larson jamie@example.com

+ {emailHeader}
{/* Email content */}