import { useEffect } from 'react'; import { useMailStore } from '../stores/mailStore'; import { useSessionStore } from '../stores/sessionStore'; import { useUIStore } from '../stores/uiStore'; import type { Mail } from '../types'; import { ShieldIcon, PaperclipIcon } from './icons'; export default function MailList() { const viewMode = useUIStore(s => s.viewMode); const cancelCompose = useUIStore(s => s.cancelCompose); const inbox = useMailStore(s => s.inbox); const sent = useMailStore(s => s.sent); const currentMail = useMailStore(s => s.currentMail); const selectMail = useMailStore(s => s.selectMail); const fetchInbox = useMailStore(s => s.fetchInbox); const fetchSent = useMailStore(s => s.fetchSent); const clearSession = useSessionStore(s => s.clearSession); useEffect(() => { if (viewMode === 'sent') fetchSent(); else if (viewMode === 'inbox') fetchInbox('all'); }, [viewMode]); const isSent = viewMode === 'sent'; const list = isSent ? sent : inbox; const pick = (m: Mail) => { clearSession(); cancelCompose(); selectMail(m); }; return (

{isSent ? '发件箱' : '收件箱'}

{list.length}
{list.map(m => ( pick(m)} /> ))} {list.length === 0 && (

暂无邮件

)}
); } function MailItem({ mail, active, showTo, onClick }: { mail: Mail; active: boolean; showTo: boolean; onClick: () => void; }) { const isPermission = mail.mail_type === 'permission_request'; const isUnread = mail.status === 'unread'; const ccCount = mail.cc_list?.length ?? 0; const attachCount = mail.attachments?.length ?? 0; const time = new Date(mail.created_at).toLocaleString('zh-CN', { month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit' }); const peer = showTo ? `${mail.to_name}${mail.to_workspace ? '@' + mail.to_workspace : ''}` : `${mail.from_name}${mail.from_workspace ? '@' + mail.from_workspace : ''}`; return ( ); }