diff --git a/components/email.tsx b/components/email.tsx index 505e831..4deab4f 100644 --- a/components/email.tsx +++ b/components/email.tsx @@ -28,29 +28,65 @@ export function Email() { const [loading, setLoading] = useState(false); const [error, setError] = useState(null); const [mailUrl, setMailUrl] = useState(null); + const [accounts, setAccounts] = useState>([]); useEffect(() => { - fetchEmails(); + loadAccounts(); }, []); + useEffect(() => { + if (accounts.length > 0) { + fetchEmails(); + } + }, [accounts]); + + const loadAccounts = async () => { + try { + const response = await fetch('/api/courrier/accounts'); + if (response.ok) { + const data = await response.json(); + if (data.accounts) { + setAccounts(data.accounts.map((acc: any) => ({ + id: acc.id || acc.email, + email: acc.email + }))); + } + } + } catch (err) { + console.error('Error loading accounts:', err); + } + }; + const fetchEmails = async (isRefresh = false) => { setLoading(true); setError(null); try { - const response = await fetch('/api/courrier?folder=INBOX&page=1&perPage=5' + (isRefresh ? '&refresh=true' : '')); - if (!response.ok) { - throw new Error('Failed to fetch emails'); - } + // Fetch emails from all accounts in parallel + const emailPromises = accounts.map(async (account) => { + const url = `/api/courrier?folder=INBOX&page=1&perPage=5&accountId=${encodeURIComponent(account.id)}${isRefresh ? '&refresh=true' : ''}`; + const response = await fetch(url); + if (!response.ok) { + console.warn(`Failed to fetch emails for account ${account.id}`); + return []; + } + const data = await response.json(); + if (data.error || !data.emails) { + return []; + } + // Add accountId to each email for proper identification + return data.emails.map((email: any) => ({ + ...email, + accountId: account.id + })); + }); - const data = await response.json(); + const allEmailsArrays = await Promise.all(emailPromises); + const allEmails = allEmailsArrays.flat(); - if (data.error) { - setError(data.error); - setEmails([]); - } else { - // Transform data format if needed - const transformedEmails = data.emails.map((email: any) => ({ + // Transform and sort all emails + const transformedEmails = allEmails + .map((email: any) => ({ id: email.id, subject: email.subject, from: email.from[0]?.address || '', @@ -58,15 +94,15 @@ export function Email() { date: email.date, read: email.flags.seen, starred: email.flags.flagged, - folder: email.folder + folder: email.folder, + accountId: email.accountId })) // Sort emails by date (most recent first) .sort((a: Email, b: Email) => new Date(b.date).getTime() - new Date(a.date).getTime()) .slice(0, 5); // Only show the first 5 emails - - setEmails(transformedEmails); - setMailUrl('/courrier'); - } + + setEmails(transformedEmails); + setMailUrl('/courrier'); } catch (error) { console.error('Error fetching emails:', error); setError('Failed to load emails');