TF-4392 [Team Mailbox] Move email to trash on delete in Email List View

This commit is contained in:
dab246
2026-03-26 13:09:17 +07:00
committed by Dat H. Pham
parent 865940450e
commit db8ae35c9d
9 changed files with 656 additions and 18 deletions
@@ -0,0 +1,55 @@
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
import 'package:jmap_dart_client/jmap/mail/mailbox/namespace.dart';
import 'package:model/mailbox/presentation_mailbox.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/mailbox_controller.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';
mixin HandleTeamMailboxMixin {
MailboxTree? get _teamMailboxesTree =>
getBinding<MailboxController>()?.teamMailboxesTree.value;
MailboxNode? _findTeamMailboxNodeByNamespaceOnFirstLevel(
Namespace namespace,
) {
return _teamMailboxesTree?.findNodeOnFirstLevel(
(node) => node.item.namespace == namespace,
);
}
PresentationMailbox? _findDefaultMailboxInTeamMailbox({
required Namespace namespace,
required String mailboxName,
}) {
final teamMailboxNode =
_findTeamMailboxNodeByNamespaceOnFirstLevel(namespace);
if (teamMailboxNode == null) return null;
final mailboxNode = teamMailboxNode.findNodeOnFirstLevel(
(node) =>
node.mailboxNameAsString.toLowerCase() == mailboxName.toLowerCase(),
);
if (mailboxNode == null) return null;
return mailboxNode.item;
}
MailboxId? findDefaultMailboxIdInTeamMailbox({
required Namespace namespace,
required String mailboxName,
}) {
final teamMailbox = _findDefaultMailboxInTeamMailbox(
namespace: namespace,
mailboxName: mailboxName,
);
return teamMailbox?.id;
}
String? getTeamMailboxNodePathWithSeparator({
required MailboxId mailboxId,
String pathSeparator = '/',
}) {
return _teamMailboxesTree?.getNodePath(mailboxId, pathSeparator);
}
}
@@ -1,3 +1,4 @@
import 'package:collection/collection.dart';
import 'package:equatable/equatable.dart';
import 'package:jmap_dart_client/jmap/core/id.dart';
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
@@ -6,6 +7,7 @@ import 'package:model/mailbox/expand_mode.dart';
import 'package:model/mailbox/mailbox_state.dart';
import 'package:model/mailbox/presentation_mailbox.dart';
import 'package:model/mailbox/select_mode.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_tree.dart';
class MailboxNode with EquatableMixin {
static final PresentationMailbox _root = PresentationMailbox(MailboxId(Id('root')));
@@ -172,4 +174,7 @@ extension MailboxNodeExtension on MailboxNode {
return item.sortOrder!.value.value.compareTo(other.item.sortOrder!.value.value);
}
MailboxNode? findNodeOnFirstLevel(NodeQuery nodeQuery) =>
childrenItems?.firstWhereOrNull(nodeQuery);
}