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/presentation_mailbox.dart';
import 'package:model/mailbox/select_mode.dart'; import 'package:model/mailbox/select_mode.dart';
import 'package:pointer_interceptor/pointer_interceptor.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/base/base_controller.dart';
import 'package:tmail_ui_user/features/destination_picker/presentation/model/destination_picker_arguments.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'; 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) { void updateMailboxNameById(MailboxId mailboxId, MailboxName mailboxName) {
final mailboxTrees = [ UpdateMailboxNameAction(
defaultMailboxTree, mailboxTrees: [defaultMailboxTree, personalMailboxTree, teamMailboxesTree],
personalMailboxTree, mailboxId: mailboxId,
teamMailboxesTree, mailboxName: mailboxName,
]; ).execute();
for (var mailboxTree in mailboxTrees) {
if (mailboxTree.value.updateMailboxNameById(mailboxId, mailboxName)) {
mailboxTree.refresh();
break;
}
}
} }
void updateUnreadCountOfMailboxById( void updateUnreadCountOfMailboxById(
MailboxId mailboxId, { MailboxId mailboxId, {
required int unreadChanges, required int unreadChanges,
}) { }) {
final mailboxTrees = [ UpdateMailboxUnreadCountAction(
defaultMailboxTree, mailboxTrees: [defaultMailboxTree, personalMailboxTree, teamMailboxesTree],
personalMailboxTree, mailboxId: mailboxId,
teamMailboxesTree, unreadChanges: unreadChanges,
]; ).execute();
for (var mailboxTree in mailboxTrees) {
if (mailboxTree.value.updateMailboxUnreadCountById(mailboxId, unreadChanges)) {
mailboxTree.refresh();
break;
}
}
} }
void clearUnreadCount(MailboxId mailboxId) { void clearUnreadCount(MailboxId mailboxId) {
@@ -598,26 +587,19 @@ abstract class BaseMailboxController extends BaseController {
final selectedNode = mailboxTree.value.findNode((node) => node.item.id == mailboxId); final selectedNode = mailboxTree.value.findNode((node) => node.item.id == mailboxId);
if (selectedNode == null) continue; if (selectedNode == null) continue;
final currentUnreadCount = selectedNode.item.unreadEmails?.value.value.toInt(); final currentUnreadCount = selectedNode.item.unreadEmails?.value.value.toInt();
teamMailboxesTree.value.updateMailboxUnreadCountById( mailboxTree.value.updateMailboxUnreadCountById(
mailboxId, mailboxId,
-(currentUnreadCount ?? 0)); -(currentUnreadCount ?? 0));
teamMailboxesTree.refresh(); mailboxTree.refresh();
break; break;
} }
} }
void updateMailboxTotalEmailsCountById(MailboxId mailboxId, int totalEmails) { void updateMailboxTotalEmailsCountById(MailboxId mailboxId, int totalEmails) {
final mailboxTrees = [ UpdateMailboxTotalEmailsCountAction(
defaultMailboxTree, mailboxTrees: [defaultMailboxTree, personalMailboxTree, teamMailboxesTree],
personalMailboxTree, mailboxId: mailboxId,
teamMailboxesTree, totalEmailsCountChanged: totalEmails,
]; ).execute();
for (var mailboxTree in mailboxTrees) {
if (mailboxTree.value.updateMailboxTotalEmailsCountById(mailboxId, totalEmails)) {
mailboxTree.refresh();
break;
}
}
} }
} }