TF-4284 Fix refreshing causes "virtual mailboxes" to be hidden (#4290)

This commit is contained in:
Dat Vu
2026-04-10 15:29:04 +07:00
committed by GitHub
parent c9e2e5db80
commit cb5d43630a
11 changed files with 493 additions and 225 deletions
+58 -29
View File
@@ -37,6 +37,7 @@ import 'package:tmail_ui_user/features/mailbox/presentation/extensions/presentat
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_actions.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_categories.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_categories_expand_mode.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_collection.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/features/mailbox/presentation/model/mailbox_tree_builder.dart';
@@ -62,6 +63,7 @@ typedef OnMoveFolderContentActionCallback = void Function(
);
typedef DeleteMailboxActionCallback = void Function(PresentationMailbox mailbox);
typedef AllowSubaddressingActionCallback = void Function(MailboxId, Map<String, List<String>?>?, MailboxActions);
typedef OnUpdateMailboxCollectionCallback = MailboxCollection Function(MailboxCollection);
abstract class BaseMailboxController extends BaseController
with ExpandFolderTriggerScrollableMixin {
@@ -87,40 +89,62 @@ abstract class BaseMailboxController extends BaseController
List<PresentationMailbox> allMailboxes = <PresentationMailbox>[];
MailboxCollection get currentMailboxCollection => MailboxCollection(
allMailboxes: allMailboxes,
defaultTree: defaultMailboxTree.value,
personalTree: personalMailboxTree.value,
teamMailboxTree: teamMailboxesTree.value,
);
Future<void> buildTree(
List<PresentationMailbox> allMailbox,
{MailboxId? mailboxIdSelected}
) async {
final recordTree = await _treeBuilder.generateMailboxTreeInUI(
List<PresentationMailbox> allMailbox, {
MailboxId? mailboxIdSelected,
OnUpdateMailboxCollectionCallback? onUpdateMailboxCollectionCallback,
}) async {
MailboxCollection mailboxCollection =
await _treeBuilder.generateMailboxTreeInUI(
allMailboxes: allMailbox,
currentDefaultTree: defaultMailboxTree.value,
currentPersonalTree: personalMailboxTree.value,
currentTeamMailboxTree: teamMailboxesTree.value,
currentCollection: currentMailboxCollection,
mailboxIdSelected: mailboxIdSelected,
);
defaultMailboxTree.firstRebuild = true;
personalMailboxTree.firstRebuild = true;
teamMailboxesTree.firstRebuild = true;
defaultMailboxTree.value = recordTree.defaultTree;
personalMailboxTree.value = recordTree.personalTree;
teamMailboxesTree.value = recordTree.teamMailboxTree;
allMailboxes = recordTree.allMailboxes;
if (onUpdateMailboxCollectionCallback != null) {
mailboxCollection = onUpdateMailboxCollectionCallback(mailboxCollection);
}
updateMailboxTree(mailboxCollection: mailboxCollection);
}
Future<void> refreshTree(List<PresentationMailbox> allMailbox) async {
final recordTree = await _treeBuilder.generateMailboxTreeInUIAfterRefreshChanges(
Future<void> refreshTree(
List<PresentationMailbox> allMailbox, {
OnUpdateMailboxCollectionCallback? onUpdateMailboxCollectionCallback,
}) async {
MailboxCollection mailboxCollection =
await _treeBuilder.generateMailboxTreeInUIAfterRefreshChanges(
allMailboxes: allMailbox,
currentDefaultTree: defaultMailboxTree.value,
currentPersonalTree: personalMailboxTree.value,
currentTeamMailboxTree: teamMailboxesTree.value,
currentCollection: currentMailboxCollection,
);
defaultMailboxTree.firstRebuild = true;
personalMailboxTree.firstRebuild = true;
teamMailboxesTree.firstRebuild = true;
defaultMailboxTree.value = recordTree.defaultTree;
personalMailboxTree.value = recordTree.personalTree;
teamMailboxesTree.value = recordTree.teamMailboxTree;
allMailboxes = allMailbox;
if (onUpdateMailboxCollectionCallback != null) {
mailboxCollection = onUpdateMailboxCollectionCallback(mailboxCollection);
}
updateMailboxTree(mailboxCollection: mailboxCollection);
}
void updateMailboxTree({
required MailboxCollection mailboxCollection,
bool isRefreshTrigger = true,
}) {
if (isRefreshTrigger) {
defaultMailboxTree.firstRebuild = true;
personalMailboxTree.firstRebuild = true;
teamMailboxesTree.firstRebuild = true;
}
defaultMailboxTree.value = mailboxCollection.defaultTree;
personalMailboxTree.value = mailboxCollection.personalTree;
teamMailboxesTree.value = mailboxCollection.teamMailboxTree;
allMailboxes = mailboxCollection.allMailboxes;
}
void syncAllMailboxWithDisplayName(BuildContext context) {
@@ -675,10 +699,15 @@ abstract class BaseMailboxController extends BaseController
}
}
void autoCreateVirtualFolder(bool isAINeedsActionEnabled) {
addFavoriteFolderToMailboxList();
bool get isAINeedsActionEnabled => false;
MailboxCollection updateMailboxCollection(MailboxCollection mailboxCollection) {
MailboxCollection updated = addFavoriteFolderToMailboxList(
mailboxCollection: mailboxCollection,
);
if (isAINeedsActionEnabled) {
addActionRequiredFolder();
updated = addActionRequiredFolder(mailboxCollection: updated);
}
return updated;
}
}