feat: mail UI improvements - folder mapping, display name, resize perf, list header

- Add configurable folder mapping (sent/drafts/spam/trash) per account
- Migration 0005_folder_mapping.sql with 4 new columns on mail_accounts
- Backend: send_mail uses account.sent_folder_imap_name if set
- Backend: _build_folder_hierarchy respects folder_mapping for is_standard
- Frontend: MailSettings shows folder mapping editor per account
- Frontend: MailSettings allows editing display_name for existing accounts
- Frontend: MailFolderTree shows display_name || email, removes MailIcon
- Frontend: ResizablePanel isDragging state with contain:strict + pointer-events:none
- Frontend: MailList merges select-all and sort controls into one line
This commit is contained in:
Agent Zero
2026-07-17 23:17:52 +02:00
parent 04c419402b
commit db433e81f1
9 changed files with 295 additions and 71 deletions
+12
View File
@@ -22,6 +22,10 @@ class MailAccountCreate(BaseModel):
username: str = Field(default="", min_length=0, max_length=255)
password: str = Field(..., min_length=1, max_length=512)
is_shared: bool = False
sent_folder_imap_name: str | None = Field(None, max_length=255)
drafts_folder_imap_name: str | None = Field(None, max_length=255)
spam_folder_imap_name: str | None = Field(None, max_length=255)
trash_folder_imap_name: str | None = Field(None, max_length=255)
class MailAccountUpdate(BaseModel):
@@ -38,6 +42,10 @@ class MailAccountUpdate(BaseModel):
password: str | None = Field(None, min_length=1, max_length=512)
is_shared: bool | None = None
is_active: bool | None = None
sent_folder_imap_name: str | None = Field(None, max_length=255)
drafts_folder_imap_name: str | None = Field(None, max_length=255)
spam_folder_imap_name: str | None = Field(None, max_length=255)
trash_folder_imap_name: str | None = Field(None, max_length=255)
class MailAccountResponse(BaseModel):
@@ -54,6 +62,10 @@ class MailAccountResponse(BaseModel):
username: str
is_shared: bool
is_active: bool
sent_folder_imap_name: str | None = None
drafts_folder_imap_name: str | None = None
spam_folder_imap_name: str | None = None
trash_folder_imap_name: str | None = None
created_at: datetime | None = None
updated_at: datetime | None = None