compose mime

This commit is contained in:
alma 2025-04-24 19:51:26 +02:00
parent dbe403f277
commit da1390fb51

View File

@ -525,8 +525,7 @@ export default function CourrierPage() {
bcc: email.bcc, bcc: email.bcc,
flags: email.flags || [], flags: email.flags || [],
raw: email.body || '' raw: email.body || ''
})) }));
.sort((a: Email, b: Email) => new Date(b.date).getTime() - new Date(a.date).getTime());
// Only update unread count if we're in the Inbox folder // Only update unread count if we're in the Inbox folder
if (currentView === 'INBOX') { if (currentView === 'INBOX') {
@ -536,13 +535,27 @@ export default function CourrierPage() {
setUnreadCount(unreadInboxEmails); setUnreadCount(unreadInboxEmails);
} }
// Sort emails by date, ensuring most recent first
const sortedEmails = processedEmails.sort((a: Email, b: Email) => {
const dateA = new Date(a.date).getTime();
const dateB = new Date(b.date).getTime();
return dateB - dateA; // Most recent first
});
if (isLoadMore) { if (isLoadMore) {
setEmails(prev => [...prev, ...processedEmails].sort((a: Email, b: Email) => // When loading more, merge with existing emails and re-sort
new Date(b.date).getTime() - new Date(a.date).getTime() setEmails(prev => {
)); const combined = [...prev, ...sortedEmails];
return combined.sort((a: Email, b: Email) => {
const dateA = new Date(a.date).getTime();
const dateB = new Date(b.date).getTime();
return dateB - dateA; // Most recent first
});
});
setPage(prev => prev + 1); setPage(prev => prev + 1);
} else { } else {
setEmails(processedEmails); // For initial load or refresh, just use the sorted emails
setEmails(sortedEmails);
setPage(1); setPage(1);
} }
@ -1157,7 +1170,7 @@ export default function CourrierPage() {
); );
// Add back the handleReply function // Add back the handleReply function
const handleReply = (type: 'reply' | 'reply-all' | 'forward') => { const handleReply = async (type: 'reply' | 'reply-all' | 'forward') => {
if (!selectedEmail) return; if (!selectedEmail) return;
const getReplyTo = () => { const getReplyTo = () => {
@ -1178,45 +1191,51 @@ export default function CourrierPage() {
return subject.startsWith('Re:') ? subject : `Re: ${subject}`; return subject.startsWith('Re:') ? subject : `Re: ${subject}`;
}; };
// Get the formatted original email content try {
const originalContent = getReplyBody(selectedEmail, type); // Get the decoded content first
const decoded = await decodeEmail(selectedEmail.body);
// Create a clean structure with clear separation
const formattedContent = ` // Create a clean structure with clear separation
<div class="compose-area" contenteditable="true" style="min-height: 100px; padding: 10px; border: 1px solid #e5e7eb; border-radius: 4px; margin-bottom: 20px;"></div> const formattedContent = `
<div class="quoted-content" contenteditable="false" style="color: #6b7280; font-size: 0.875rem;"> <div class="compose-area" contenteditable="true" style="min-height: 100px; padding: 10px; color: #000000;">
${type === 'forward' ? ` <br/>
<div style="margin-bottom: 10px;"> ${type === 'forward' ? `
---------- Forwarded message ---------<br/> <div style="border-top: 1px solid #e5e7eb; padding-top: 20px; margin-top: 20px; color: #6b7280; font-size: 0.875rem;">
From: ${selectedEmail.from}<br/> ---------- Forwarded message ---------<br/>
Date: ${new Date(selectedEmail.date).toLocaleString()}<br/> From: ${selectedEmail.from}<br/>
Subject: ${selectedEmail.subject}<br/> Date: ${new Date(selectedEmail.date).toLocaleString()}<br/>
To: ${selectedEmail.to}<br/> Subject: ${selectedEmail.subject}<br/>
${selectedEmail.cc ? `Cc: ${selectedEmail.cc}<br/>` : ''} To: ${selectedEmail.to}<br/>
</div> ${selectedEmail.cc ? `Cc: ${selectedEmail.cc}<br/>` : ''}
` : ` <br/>
<div style="margin-bottom: 10px;"> ${decoded.html || decoded.text || ''}
On ${new Date(selectedEmail.date).toLocaleString()}, ${selectedEmail.from} wrote: </div>
</div> ` : `
`} <div style="border-top: 1px solid #e5e7eb; padding-top: 20px; margin-top: 20px; color: #6b7280; font-size: 0.875rem;">
<blockquote style="margin: 0; padding-left: 1em; border-left: 2px solid #e5e7eb;"> On ${new Date(selectedEmail.date).toLocaleString()}, ${selectedEmail.from} wrote:
${originalContent} </div>
</blockquote> <blockquote style="margin: 0; padding-left: 1em; border-left: 2px solid #e5e7eb; color: #6b7280;">
</div> ${decoded.html || decoded.text || ''}
`; </blockquote>
`}
</div>
`;
// Update the compose form // Update the compose form
setComposeTo(getReplyTo()); setComposeTo(getReplyTo());
setComposeCc(getReplyCc()); setComposeCc(getReplyCc());
setComposeSubject(getReplySubject()); setComposeSubject(getReplySubject());
setComposeBody(formattedContent); setComposeBody(formattedContent);
setComposeBcc(''); setComposeBcc('');
// Show the compose form and CC field for Reply All // Show the compose form and CC field for Reply All
setShowCompose(true); setShowCompose(true);
setShowCc(type === 'reply-all'); setShowCc(type === 'reply-all');
setShowBcc(false); setShowBcc(false);
setAttachments([]); setAttachments([]);
} catch (error) {
console.error('Error preparing reply:', error);
}
}; };
// Add back the toggleStarred function // Add back the toggleStarred function