Files
workavia-mail-front/lib/features/mailbox/presentation/extensions/presentation_mailbox_extension.dart
T
Dat Vu c5eb4a011d Cherry pick commit fix issue #4292 to master (#4454)
* Add folder info when open mail list from Label

(cherry picked from commit de0bb4ee02030ca90126766a8713a6826d791acd)

* Add unit test for `hasMailboxLabel` function in BaseEmailItemTile mixin

(cherry picked from commit 18f8d1847acccd6f95006b93903f0caa6c0408df)

* TF-4292 Add E2E test for test case `Add folder info when open mail list from Label` on mobile

(cherry picked from commit 1c209e333510db161522e4449ad7fb2e5d28399f)
2026-04-16 15:45:45 +07:00

191 lines
7.5 KiB
Dart

import 'package:core/presentation/resources/image_paths.dart';
import 'package:flutter/material.dart';
import 'package:jmap_dart_client/jmap/core/id.dart';
import 'package:jmap_dart_client/jmap/mail/email/keyword_identifier.dart';
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
import 'package:labels/extensions/label_extension.dart';
import 'package:model/extensions/mailbox_id_extension.dart';
import 'package:model/extensions/presentation_mailbox_extension.dart';
import 'package:model/mailbox/presentation_mailbox.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/model/presentation_label_mailbox.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
import 'package:tmail_ui_user/main/routes/app_routes.dart';
import 'package:tmail_ui_user/main/routes/navigation_router.dart';
import 'package:tmail_ui_user/main/routes/route_utils.dart';
extension PresentationMailboxExtension on PresentationMailbox {
String getDisplayName(BuildContext context) {
if (isLabelMailbox) {
return (this as PresentationLabelMailbox).label.safeDisplayName;
}
if (isDefault) {
switch(role!.value.toLowerCase()) {
case PresentationMailbox.inboxRole:
return AppLocalizations.of(context).inboxMailboxDisplayName;
case PresentationMailbox.favoriteRole:
return AppLocalizations.of(context).favoriteMailboxDisplayName;
case PresentationMailbox.actionRequiredRole:
return AppLocalizations.of(context).actionRequiredMailboxDisplayName;
case PresentationMailbox.archiveRole:
return AppLocalizations.of(context).archiveMailboxDisplayName;
case PresentationMailbox.draftsRole:
return AppLocalizations.of(context).draftsMailboxDisplayName;
case PresentationMailbox.sentRole:
return AppLocalizations.of(context).sentMailboxDisplayName;
case PresentationMailbox.outboxRole:
return AppLocalizations.of(context).outboxMailboxDisplayName;
case PresentationMailbox.trashRole:
return AppLocalizations.of(context).trashMailboxDisplayName;
case PresentationMailbox.spamRole:
case PresentationMailbox.junkRole:
return AppLocalizations.of(context).spamMailboxDisplayName;
case PresentationMailbox.templatesRole:
return AppLocalizations.of(context).templatesMailboxDisplayName;
case PresentationMailbox.recoveredRole:
return AppLocalizations.of(context).recoveredMailboxDisplayName;
}
}
return name?.name ?? '';
}
String getDisplayNameWithoutContext(AppLocalizations appLocalizations) {
if (isLabelMailbox) {
return (this as PresentationLabelMailbox).label.safeDisplayName;
}
if (isDefault) {
switch(role!.value.toLowerCase()) {
case PresentationMailbox.inboxRole:
return appLocalizations.inboxMailboxDisplayName;
case PresentationMailbox.favoriteRole:
return appLocalizations.favoriteMailboxDisplayName;
case PresentationMailbox.actionRequiredRole:
return appLocalizations.actionRequiredMailboxDisplayName;
case PresentationMailbox.archiveRole:
return appLocalizations.archiveMailboxDisplayName;
case PresentationMailbox.draftsRole:
return appLocalizations.draftsMailboxDisplayName;
case PresentationMailbox.sentRole:
return appLocalizations.sentMailboxDisplayName;
case PresentationMailbox.outboxRole:
return appLocalizations.outboxMailboxDisplayName;
case PresentationMailbox.trashRole:
return appLocalizations.trashMailboxDisplayName;
case PresentationMailbox.spamRole:
case PresentationMailbox.junkRole:
return appLocalizations.spamMailboxDisplayName;
case PresentationMailbox.templatesRole:
return appLocalizations.templatesMailboxDisplayName;
case PresentationMailbox.recoveredRole:
return appLocalizations.recoveredMailboxDisplayName;
}
}
return name?.name ?? '';
}
String getMailboxIcon(ImagePaths imagePaths) {
if (hasRole()) {
switch(role!.value) {
case PresentationMailbox.inboxRole:
return imagePaths.icMailboxInbox;
case PresentationMailbox.favoriteRole:
return imagePaths.icMailboxFavorite;
case PresentationMailbox.actionRequiredRole:
return imagePaths.icMailboxActionRequired;
case PresentationMailbox.draftsRole:
return imagePaths.icMailboxDrafts;
case PresentationMailbox.outboxRole:
return imagePaths.icMailboxOutbox;
case PresentationMailbox.archiveRole:
return imagePaths.icMailboxArchived;
case PresentationMailbox.sentRole:
return imagePaths.icMailboxSent;
case PresentationMailbox.trashRole:
return imagePaths.icMailboxTrash;
case PresentationMailbox.spamRole:
case PresentationMailbox.junkRole:
return imagePaths.icMailboxSpam;
case PresentationMailbox.templatesRole:
return imagePaths.icMailboxTemplate;
case PresentationMailbox.recoveredRole:
return imagePaths.icRecoverDeletedMessages;
case 'all_mail':
return imagePaths.icMailboxAllMail;
default:
return imagePaths.icFolderMailbox;
}
} else if (isChildOfTeamMailboxes) {
switch(name!.name.toLowerCase()) {
case 'inbox':
return imagePaths.icMailboxInbox;
case 'outbox':
return imagePaths.icMailboxOutbox;
case 'drafts':
return imagePaths.icMailboxDrafts;
case 'archive':
return imagePaths.icMailboxArchived;
case 'sent':
return imagePaths.icMailboxSent;
case 'trash':
return imagePaths.icMailboxTrash;
case 'spam':
return imagePaths.icMailboxSpam;
case 'templates':
return imagePaths.icMailboxTemplate;
case 'restored messages':
return imagePaths.icRecoverDeletedMessages;
default:
return imagePaths.icFolderMailbox;
}
} else {
return imagePaths.icFolderMailbox;
}
}
Uri get mailboxRouteWeb => RouteUtils.createUrlWebLocationBar(
AppRoutes.dashboard,
router: NavigationRouter(mailboxId: id)
);
String? get filterKeyword {
if (isFavorite) {
return KeyWordIdentifier.emailFlagged.value;
} else if (isLabelMailbox) {
return (this as PresentationLabelMailbox).label.keyword?.value;
} else {
return null;
}
}
bool get isCacheable => !isVirtualFolder && this is! PresentationLabelMailbox;
bool get isLabelMailbox => this is PresentationLabelMailbox;
String get browserRouteTitle => isLabelMailbox
? 'Label-${(this as PresentationLabelMailbox).label.id?.value}'
: 'Mailbox-${mailboxId?.asString}';
Id? get labelId =>
isLabelMailbox ? (this as PresentationLabelMailbox).label.id : null;
MailboxId? get browserRouteMailboxId => isLabelMailbox ? null : mailboxId;
bool get isAllEmailTrashAndSpamFolder => id == PresentationMailbox.allEmailTrashAndSpamFolder.id;
bool get isAllEmail => id == PresentationMailbox.unifiedMailbox.id;
bool get isUnifiedMailbox => isAllEmail || isAllEmailTrashAndSpamFolder;
String getFolderNameForQuickSearch(AppLocalizations appLocalizations) {
if (isAllEmailTrashAndSpamFolder) {
return appLocalizations.allEmailTrashAndSpam;
} else if (isAllEmail) {
return appLocalizations.allEmail;
} else {
return getDisplayNameWithoutContext(appLocalizations);
}
}
}