TF-3385 Create abstract group for update mailbox actions

This commit is contained in:
DatDang
2025-01-03 15:06:37 +07:00
committed by Dat H. Pham
parent 4bf4113c88
commit 1ce0600c43
5 changed files with 99 additions and 38 deletions
@@ -0,0 +1,18 @@
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
import 'package:tmail_ui_user/features/base/action/update_mailbox_properties_action/update_mailbox_properties_action.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_tree.dart';
class UpdateMailboxNameAction extends UpdateMailboxPropertiesAction {
const UpdateMailboxNameAction({
required super.mailboxTrees,
required super.mailboxId,
required this.mailboxName,
});
final MailboxName mailboxName;
@override
bool updateProperty(MailboxTree mailboxTree) {
return mailboxTree.updateMailboxNameById(mailboxId, mailboxName);
}
}
@@ -0,0 +1,24 @@
import 'package:get/get_rx/get_rx.dart';
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_tree.dart';
abstract class UpdateMailboxPropertiesAction {
const UpdateMailboxPropertiesAction({
required this.mailboxTrees,
required this.mailboxId,
});
final List<Rx<MailboxTree>> mailboxTrees;
final MailboxId mailboxId;
bool updateProperty(MailboxTree mailboxTree);
void execute() {
for (var mailboxTree in mailboxTrees) {
if (updateProperty(mailboxTree.value)) {
mailboxTree.refresh();
break;
}
}
}
}
@@ -0,0 +1,20 @@
import 'package:tmail_ui_user/features/base/action/update_mailbox_properties_action/update_mailbox_properties_action.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_tree.dart';
class UpdateMailboxTotalEmailsCountAction extends UpdateMailboxPropertiesAction {
const UpdateMailboxTotalEmailsCountAction({
required super.mailboxTrees,
required super.mailboxId,
required this.totalEmailsCountChanged,
});
final int totalEmailsCountChanged;
@override
bool updateProperty(MailboxTree mailboxTree) {
return mailboxTree.updateMailboxTotalEmailsCountById(
mailboxId,
totalEmailsCountChanged,
);
}
}
@@ -0,0 +1,17 @@
import 'package:tmail_ui_user/features/base/action/update_mailbox_properties_action/update_mailbox_properties_action.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_tree.dart';
class UpdateMailboxUnreadCountAction extends UpdateMailboxPropertiesAction {
const UpdateMailboxUnreadCountAction({
required super.mailboxTrees,
required super.mailboxId,
required this.unreadChanges,
});
final int unreadChanges;
@override
bool updateProperty(MailboxTree mailboxTree) {
return mailboxTree.updateMailboxUnreadCountById(mailboxId, unreadChanges);
}
}
+20 -38
View File
@@ -20,6 +20,9 @@ import 'package:model/mailbox/expand_mode.dart';
import 'package:model/mailbox/presentation_mailbox.dart';
import 'package:model/mailbox/select_mode.dart';
import 'package:pointer_interceptor/pointer_interceptor.dart';
import 'package:tmail_ui_user/features/base/action/update_mailbox_properties_action/update_mailbox_name_action.dart';
import 'package:tmail_ui_user/features/base/action/update_mailbox_properties_action/update_mailbox_total_emails_count_action.dart';
import 'package:tmail_ui_user/features/base/action/update_mailbox_properties_action/update_mailbox_unread_count_action.dart';
import 'package:tmail_ui_user/features/base/base_controller.dart';
import 'package:tmail_ui_user/features/destination_picker/presentation/model/destination_picker_arguments.dart';
import 'package:tmail_ui_user/features/mailbox/domain/model/mailbox_subscribe_action_state.dart';
@@ -555,36 +558,22 @@ abstract class BaseMailboxController extends BaseController {
}
void updateMailboxNameById(MailboxId mailboxId, MailboxName mailboxName) {
final mailboxTrees = [
defaultMailboxTree,
personalMailboxTree,
teamMailboxesTree,
];
for (var mailboxTree in mailboxTrees) {
if (mailboxTree.value.updateMailboxNameById(mailboxId, mailboxName)) {
mailboxTree.refresh();
break;
}
}
UpdateMailboxNameAction(
mailboxTrees: [defaultMailboxTree, personalMailboxTree, teamMailboxesTree],
mailboxId: mailboxId,
mailboxName: mailboxName,
).execute();
}
void updateUnreadCountOfMailboxById(
MailboxId mailboxId, {
required int unreadChanges,
}) {
final mailboxTrees = [
defaultMailboxTree,
personalMailboxTree,
teamMailboxesTree,
];
for (var mailboxTree in mailboxTrees) {
if (mailboxTree.value.updateMailboxUnreadCountById(mailboxId, unreadChanges)) {
mailboxTree.refresh();
break;
}
}
UpdateMailboxUnreadCountAction(
mailboxTrees: [defaultMailboxTree, personalMailboxTree, teamMailboxesTree],
mailboxId: mailboxId,
unreadChanges: unreadChanges,
).execute();
}
void clearUnreadCount(MailboxId mailboxId) {
@@ -598,26 +587,19 @@ abstract class BaseMailboxController extends BaseController {
final selectedNode = mailboxTree.value.findNode((node) => node.item.id == mailboxId);
if (selectedNode == null) continue;
final currentUnreadCount = selectedNode.item.unreadEmails?.value.value.toInt();
teamMailboxesTree.value.updateMailboxUnreadCountById(
mailboxTree.value.updateMailboxUnreadCountById(
mailboxId,
-(currentUnreadCount ?? 0));
teamMailboxesTree.refresh();
mailboxTree.refresh();
break;
}
}
void updateMailboxTotalEmailsCountById(MailboxId mailboxId, int totalEmails) {
final mailboxTrees = [
defaultMailboxTree,
personalMailboxTree,
teamMailboxesTree,
];
for (var mailboxTree in mailboxTrees) {
if (mailboxTree.value.updateMailboxTotalEmailsCountById(mailboxId, totalEmails)) {
mailboxTree.refresh();
break;
}
}
UpdateMailboxTotalEmailsCountAction(
mailboxTrees: [defaultMailboxTree, personalMailboxTree, teamMailboxesTree],
mailboxId: mailboxId,
totalEmailsCountChanged: totalEmails,
).execute();
}
}