compose mime
This commit is contained in:
parent
dbe403f277
commit
da1390fb51
@ -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
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user