import ButtonGroup from '../../../../admin-x-ds/global/ButtonGroup'; import ColorPickerField from '../../../../admin-x-ds/global/form/ColorPickerField'; import ConfirmationModal from '../../../../admin-x-ds/global/modal/ConfirmationModal'; import Form from '../../../../admin-x-ds/global/form/Form'; import Heading from '../../../../admin-x-ds/global/Heading'; import Hint from '../../../../admin-x-ds/global/Hint'; import HtmlField from '../../../../admin-x-ds/global/form/HtmlField'; import Icon from '../../../../admin-x-ds/global/Icon'; import ImageUpload from '../../../../admin-x-ds/global/form/ImageUpload'; import NewsletterPreview from './NewsletterPreview'; import NiceModal, {useModal} from '@ebay/nice-modal-react'; import React, {useState} from 'react'; import Select, {SelectOption} from '../../../../admin-x-ds/global/form/Select'; import StickyFooter from '../../../../admin-x-ds/global/StickyFooter'; import TabView, {Tab} from '../../../../admin-x-ds/global/TabView'; import TextArea from '../../../../admin-x-ds/global/form/TextArea'; import TextField from '../../../../admin-x-ds/global/form/TextField'; import Toggle from '../../../../admin-x-ds/global/form/Toggle'; import ToggleGroup from '../../../../admin-x-ds/global/form/ToggleGroup'; import useFeatureFlag from '../../../../hooks/useFeatureFlag'; import useForm, {ErrorMessages} from '../../../../hooks/useForm'; import useRouting from '../../../../hooks/useRouting'; import validator from 'validator'; import {Newsletter, useBrowseNewsletters, useEditNewsletter} from '../../../../api/newsletters'; import {PreviewModalContent} from '../../../../admin-x-ds/global/modal/PreviewModal'; import {RoutingModalProps} from '../../../providers/RoutingProvider'; import {fullEmailAddress} from '../../../../api/site'; import {getImageUrl, useUploadImage} from '../../../../api/images'; import {getSettingValues} from '../../../../api/settings'; import {showToast} from '../../../../admin-x-ds/global/Toast'; import {textColorForBackgroundColor} from '@tryghost/color-utils'; import {toast} from 'react-hot-toast'; import {useGlobalData} from '../../../providers/GlobalDataProvider'; const Sidebar: React.FC<{ newsletter: Newsletter; updateNewsletter: (fields: Partial) => void; validate: () => void; errors: ErrorMessages; clearError: (field: string) => void; }> = ({newsletter, updateNewsletter, validate, errors, clearError}) => { const {settings, siteData, config} = useGlobalData(); const [membersSupportAddress] = getSettingValues(settings, ['members_support_address']); const {mutateAsync: uploadImage} = useUploadImage(); const [selectedTab, setSelectedTab] = useState('generalSettings'); const hasEmailCustomization = useFeatureFlag('emailCustomization'); const replyToEmails = [ {label: `Newsletter address (${fullEmailAddress(newsletter.sender_email || 'noreply', siteData)})`, value: 'newsletter'}, {label: `Support address (${fullEmailAddress(membersSupportAddress || 'noreply', siteData)})`, value: 'support'} ]; const fontOptions: SelectOption[] = [ {value: 'serif', label: 'Elegant serif', className: 'font-serif'}, {value: 'sans_serif', label: 'Clean sans-serif'} ]; const backgroundColorIsDark = () => { if (newsletter.background_color === 'dark') { return true; } if (newsletter.background_color === 'light') { return false; } return textColorForBackgroundColor(newsletter.background_color).hex().toLowerCase() === '#ffffff'; }; const tabs: Tab[] = [ { id: 'generalSettings', title: 'General', contents: <>
updateNewsletter({name: e.target.value})} onKeyDown={() => clearError('name')} />