TF-1715 Add favorite folder to mailbox left menu
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
import 'package:model/mailbox/presentation_mailbox.dart';
|
||||
import 'package:tmail_ui_user/features/base/base_mailbox_controller.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/presentation/extensions/list_mailbox_node_extension.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/presentation/extensions/presentation_mailbox_extension.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_node.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_tree.dart';
|
||||
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
||||
|
||||
extension HandleFavoriteTabExtension on BaseMailboxController {
|
||||
void addFavoriteFolderToMailboxList() {
|
||||
PresentationMailbox favoriteFolder = PresentationMailbox.favoriteFolder;
|
||||
if (currentContext != null) {
|
||||
favoriteFolder = favoriteFolder.copyWith(
|
||||
displayName: favoriteFolder.getDisplayName(currentContext!),
|
||||
);
|
||||
}
|
||||
|
||||
_addFavoriteFolderToDefaultMailboxTree(favoriteFolder);
|
||||
_addFavoriteFolderToAllMailboxes(favoriteFolder);
|
||||
}
|
||||
|
||||
void _addFavoriteFolderToDefaultMailboxTree(
|
||||
PresentationMailbox favoriteFolder,
|
||||
) {
|
||||
final defaultMailboxNode = defaultMailboxTree.value.root;
|
||||
List<MailboxNode> currentDefaultFolders =
|
||||
defaultMailboxNode.childrenItems ?? [];
|
||||
|
||||
if (currentDefaultFolders.isEmpty) {
|
||||
currentDefaultFolders.add(MailboxNode(favoriteFolder));
|
||||
} else {
|
||||
currentDefaultFolders.insertAfterInbox(MailboxNode(favoriteFolder));
|
||||
}
|
||||
|
||||
defaultMailboxTree.value = MailboxTree(
|
||||
defaultMailboxNode.copyWith(children: currentDefaultFolders),
|
||||
);
|
||||
}
|
||||
|
||||
void _addFavoriteFolderToAllMailboxes(PresentationMailbox favoriteFolder) {
|
||||
final alreadyExists = allMailboxes.any(
|
||||
(mailbox) => mailbox.id == favoriteFolder.id,
|
||||
);
|
||||
if (alreadyExists) return;
|
||||
|
||||
allMailboxes.add(favoriteFolder);
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,24 @@
|
||||
|
||||
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
||||
import 'package:model/mailbox/presentation_mailbox.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_node.dart';
|
||||
|
||||
extension ListMailboxNodeExtension on List<MailboxNode> {
|
||||
List<MailboxId> get mailboxIds => map((node) => node.item.id).toList();
|
||||
}
|
||||
|
||||
void insertAfterInbox(MailboxNode newNode) {
|
||||
final alreadyExists = any((node) => node.item.id == newNode.item.id);
|
||||
if (alreadyExists) return;
|
||||
|
||||
final index = indexWhere(
|
||||
(node) =>
|
||||
node.item.role?.value == PresentationMailbox.inboxRole ||
|
||||
node.item.name?.name.toLowerCase() == 'inbox',
|
||||
);
|
||||
|
||||
if (index != -1) {
|
||||
insert(index + 1, newNode);
|
||||
} else {
|
||||
insert(0, newNode);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,6 +15,8 @@ extension PresentationMailboxExtension on PresentationMailbox {
|
||||
switch(role!.value.toLowerCase()) {
|
||||
case PresentationMailbox.inboxRole:
|
||||
return AppLocalizations.of(context).inboxMailboxDisplayName;
|
||||
case PresentationMailbox.favoriteRole:
|
||||
return AppLocalizations.of(context).favoriteMailboxDisplayName;
|
||||
case PresentationMailbox.archiveRole:
|
||||
return AppLocalizations.of(context).archiveMailboxDisplayName;
|
||||
case PresentationMailbox.draftsRole:
|
||||
@@ -69,6 +71,8 @@ extension PresentationMailboxExtension on PresentationMailbox {
|
||||
switch(role!.value) {
|
||||
case PresentationMailbox.inboxRole:
|
||||
return imagePaths.icMailboxInbox;
|
||||
case PresentationMailbox.favoriteRole:
|
||||
return imagePaths.icMailboxFavorite;
|
||||
case PresentationMailbox.draftsRole:
|
||||
return imagePaths.icMailboxDrafts;
|
||||
case PresentationMailbox.outboxRole:
|
||||
|
||||
Reference in New Issue
Block a user