import { createContext, useEffect, useState } from 'react'; import { ConfigProvider, Button, Form, Input, Flex, Checkbox, Switch, Mentions, Popover, Popconfirm, Select, Space, Upload, Divider } from 'antd'; import { DashOutlined, EllipsisOutlined, MenuOutlined, MoreOutlined, UploadOutlined } from '@ant-design/icons'; import Modal from '@dckj/react-better-modal'; import '@dckj/react-better-modal/dist/index.css'; import DnDModal from '@/components/DndModal'; import useStyleStore from '@/stores/StyleStore'; import LexicalEditor from '@/components/LexicalEditor'; import { isEmpty } from '@/utils/commons'; import './EmailEditor.css'; const getAbstract = (longtext) => { const lines = longtext.split('\n'); const firstLine = lines[0]; const abstract = firstLine.substring(0, 20); return abstract; }; const EmailEditorPopup = ({ open, setOpen, fromEmail, reference, quote = {}, initial = {}, action = 'reply', ...props }) => { const [mobile] = useStyleStore((state) => [state.mobile]); const [form] = Form.useForm(); const [isRichText, setIsRichText] = useState(mobile === false); // const [isRichText, setIsRichText] = useState(false); // 默认纯文本 const [htmlContent, setHtmlContent] = useState(''); const [textContent, setTextContent] = useState(''); const [showCc, setShowCc] = useState(false); const [showBcc, setShowBcc] = useState(false); const handleShowCc = () => { setShowCc(true); }; const handleShowBcc = () => { setShowBcc(true); }; const handleEditorChange = ({ editorState, html, textContent }) => { // console.log('textContent', textContent); // console.log('html', html); setHtmlContent(html); setTextContent(textContent); form.setFieldValue('content', html); form.setFieldValue('abstract', getAbstract(textContent)); }; const onHandleSend = () => { console.log('onSend callback', '\nisRichText', isRichText); // console.log(form.getFieldsValue()); const body = structuredClone(form.getFieldsValue()); body.content = isRichText ? htmlContent : textContent; body.fromEmail = newFromEmail || fromEmail; console.log('body', body); form.validateFields().then((values) => { form.resetFields(); }); // .catch((err) => {}) // setOpen(false); }; const [newFromEmail, setNewFromEmail] = useState(''); const [initialForm, setInitialForm] = useState({}); const [initialContent, setInitialContent] = useState(''); useEffect(() => { if (isEmpty(quote)) { return () => {}; } setShowCc(!isEmpty(quote.cc)); const { fromEmail, replyToEmail, subject, content } = quote; // const preQuoteBody = `



//


//

// // From: // // ${quote.fromName} <${quote.fromEmail}> //

//

// // Sent: // // ${quote.sent} //

//

// // To: // // ${quote.toName} <${quote.toEmail}> //

//

// // Subject: // // ${subject} //

//

${content}

// `; const preQuoteBody = `


From: ${quote.fromName} <${quote.fromEmail}>

Sent: ${quote.sent}

To: ${quote.toName} <${quote.toEmail}>

Subject: ${subject}

${content}

`; //
//
setInitialContent(preQuoteBody); const _formValues = { to: replyToEmail || fromEmail, cc: quote.cc, subject: `Re: ${subject}`, }; const forwardValues = { subject: `Fw: ${subject}` }; if (action === 'reply') { form.setFieldsValue(_formValues); setInitialForm(_formValues); } else if (action === 'forward') { form.setFieldsValue(forwardValues); setInitialForm(forwardValues); } return () => {}; }, [quote, open]); const [openPlainTextConfirm, setOpenPlainTextConfirm] = useState(false); const handlePlainTextOpenChange = ({ target }) => { const { checked: newChecked } = target; if (!newChecked) { setIsRichText(true); setOpenPlainTextConfirm(false); return; } setOpenPlainTextConfirm(true); }; const confirmPlainText = () => { setIsRichText(false); setOpenPlainTextConfirm(false); }; // todo: 附件: // 1. 直接上传返回地址 // 2. 发送文件信息 const [fileList, setFileList] = useState([]); const handleChange = (info) => { let newFileList = [...info.fileList]; // 2. Read from response and show file link newFileList = newFileList.map((file) => { if (file.response) { // Component will show file.url as link file.url = file.response.url; } return file; }); setFileList(newFileList); }; const normFile = (e) => { console.log('Upload event:', e); if (Array.isArray(e)) { return e; } return e?.fileList; }; const uploadProps = { action: 'https://660d2bd96ddfa2943b33731c.mockapi.io/api/upload', // onChange: handleChange, // multiple: true, }; return ( <> { form.resetFields(); }} title={initialForm.subject || `${reference ? '回复: ' : '写邮件: '} ${fromEmail || ''}`} footer={
setOpenPlainTextConfirm(false)}> 纯文本 {!showCc && ( )} {!showBcc && ( )} } /> */} {/* todo: 添加图文集、支付链接 */} {/* 更多工具 */} {/*
} trigger='click' > */}
); }; export default EmailEditorPopup;