Files
Lesstime/frontend/composables/useSystemFolderLabel.ts

76 lines
2.7 KiB
TypeScript

/**
* Mapping des chemins de dossiers système IMAP vers les clés i18n.
* Les clés sont normalisées en minuscules pour la comparaison.
* Couvre les variantes OVH courantes (INBOX, INBOX.Sent, Sent, etc.)
*/
const SYSTEM_FOLDER_MAP: Record<string, string> = {
'inbox': 'mail.systemFolder.inbox',
'sent': 'mail.systemFolder.sent',
'inbox.sent': 'mail.systemFolder.sent',
'sent messages': 'mail.systemFolder.sent',
'drafts': 'mail.systemFolder.drafts',
'inbox.drafts': 'mail.systemFolder.drafts',
'archive': 'mail.systemFolder.archive',
'archives': 'mail.systemFolder.archive',
'inbox.archive': 'mail.systemFolder.archive',
'trash': 'mail.systemFolder.trash',
'deleted': 'mail.systemFolder.trash',
'deleted items': 'mail.systemFolder.trash',
'inbox.trash': 'mail.systemFolder.trash',
'junk': 'mail.systemFolder.junk',
'junk e-mail': 'mail.systemFolder.junk',
'spam': 'mail.systemFolder.junk',
'inbox.junk': 'mail.systemFolder.junk',
}
/**
* Icônes Material Symbols associées aux dossiers système.
* Pour les dossiers non reconnus : utiliser une icône générique.
*/
const SYSTEM_FOLDER_ICONS: Record<string, string> = {
'mail.systemFolder.inbox': 'material-symbols:inbox-outline',
'mail.systemFolder.sent': 'material-symbols:send-outline',
'mail.systemFolder.drafts': 'material-symbols:draft-outline',
'mail.systemFolder.archive': 'material-symbols:archive-outline',
'mail.systemFolder.trash': 'material-symbols:delete-outline',
'mail.systemFolder.junk': 'material-symbols:report-outline',
}
const DEFAULT_FOLDER_ICON = 'material-symbols:folder-outline'
export function useSystemFolderLabel() {
const { t } = useI18n()
/**
* Retourne le label traduit d'un dossier système, ou son displayName si inconnu.
* @param path - Chemin IMAP du dossier (ex: "INBOX", "INBOX.Sent")
* @param displayName - Nom affiché par défaut si non reconnu
*/
function getFolderLabel(path: string, displayName: string): string {
const key = SYSTEM_FOLDER_MAP[path.toLowerCase()]
return key ? t(key) : displayName
}
/**
* Retourne le nom de l'icône Material Symbols pour un dossier.
* @param path - Chemin IMAP du dossier
*/
function getFolderIcon(path: string): string {
const key = SYSTEM_FOLDER_MAP[path.toLowerCase()]
return key ? (SYSTEM_FOLDER_ICONS[key] ?? DEFAULT_FOLDER_ICON) : DEFAULT_FOLDER_ICON
}
/**
* Indique si un dossier est un dossier système reconnu.
*/
function isSystemFolder(path: string): boolean {
return path.toLowerCase() in SYSTEM_FOLDER_MAP
}
return {
getFolderLabel,
getFolderIcon,
isSystemFolder,
}
}