TF-1868 Fix a mailbox is visible then it's parents needs to be visible too

(cherry picked from commit 02a505fc6241ffb4df7559004e8dae718f13d39e)
This commit is contained in:
dab246
2023-07-11 22:54:39 +07:00
committed by Dat Vu
parent e35b1d47aa
commit 89d32cb88c
3 changed files with 87 additions and 8 deletions
+71 -8
View File
@@ -440,22 +440,85 @@ abstract class BaseMailboxController extends BaseController {
}
}
List<MailboxNode> getAncestorOfMailboxNode(MailboxNode mailboxNode) {
final listAncestor = defaultMailboxTree.value.getAncestorList(mailboxNode)
?? personalMailboxTree.value.getAncestorList(mailboxNode)
?? teamMailboxesTree.value.getAncestorList(mailboxNode);
return listAncestor ?? [];
}
SubscribeRequest? generateSubscribeRequest(
MailboxId mailboxId,
MailboxSubscribeState subscribeState,
MailboxSubscribeAction subscribeAction
) {
switch(subscribeState) {
case MailboxSubscribeState.enabled:
return _generateSubscribeRequestWhenSubscribeEnabled(mailboxId, subscribeAction);
case MailboxSubscribeState.disabled:
return _generateSubscribeRequestWhenSubscribeDisabled(mailboxId, subscribeAction);
}
}
SubscribeRequest? _generateSubscribeRequestWhenSubscribeDisabled(
MailboxId mailboxId,
MailboxSubscribeAction subscribeAction
) {
final mailboxNode = findMailboxNodeById(mailboxId);
if (mailboxNode != null) {
if (mailboxNode.hasChildren()) {
final listDescendantMailboxIds = mailboxNode.descendantsAsList().mailboxIds;
return SubscribeMultipleMailboxRequest(mailboxId, listDescendantMailboxIds, subscribeState, subscribeAction);
} else {
return SubscribeMailboxRequest(mailboxId, subscribeState, subscribeAction);
}
if (mailboxNode == null) return null;
if (mailboxNode.hasChildren()) {
final listDescendantMailboxIds = mailboxNode.descendantsAsList().mailboxIds;
log("BaseMailboxController::_generateSubscribeRequestWhenSubscribeDisabled:listDescendantMailboxIds $listDescendantMailboxIds");
return SubscribeMultipleMailboxRequest(
mailboxId,
listDescendantMailboxIds,
MailboxSubscribeState.disabled,
subscribeAction
);
} else {
return SubscribeMailboxRequest(
mailboxId,
MailboxSubscribeState.disabled,
subscribeAction
);
}
}
SubscribeRequest? _generateSubscribeRequestWhenSubscribeEnabled(
MailboxId mailboxId,
MailboxSubscribeAction subscribeAction
) {
final mailboxNode = findMailboxNodeById(mailboxId);
if (mailboxNode == null) return null;
if (mailboxNode.hasParents()) {
final listAncestorMailboxIds = getAncestorOfMailboxNode(mailboxNode).mailboxIds;
listAncestorMailboxIds.add(mailboxId);
log("BaseMailboxController::_generateSubscribeRequestWhenSubscribeEnabled:listAncestorMailboxIds $listAncestorMailboxIds");
if (listAncestorMailboxIds.isNotEmpty) {
return SubscribeMultipleMailboxRequest(
mailboxId,
listAncestorMailboxIds,
MailboxSubscribeState.enabled,
subscribeAction
);
} else {
return SubscribeMailboxRequest(
mailboxId,
MailboxSubscribeState.enabled,
subscribeAction
);
}
} else {
return SubscribeMailboxRequest(
mailboxId,
MailboxSubscribeState.enabled,
subscribeAction
);
}
return null;
}
void getAllMailbox(Session session, AccountId accountId) async {