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:
@@ -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(
|
SubscribeRequest? generateSubscribeRequest(
|
||||||
MailboxId mailboxId,
|
MailboxId mailboxId,
|
||||||
MailboxSubscribeState subscribeState,
|
MailboxSubscribeState subscribeState,
|
||||||
MailboxSubscribeAction subscribeAction
|
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);
|
final mailboxNode = findMailboxNodeById(mailboxId);
|
||||||
|
|
||||||
if (mailboxNode != null) {
|
if (mailboxNode == null) return null;
|
||||||
if (mailboxNode.hasChildren()) {
|
|
||||||
final listDescendantMailboxIds = mailboxNode.descendantsAsList().mailboxIds;
|
if (mailboxNode.hasChildren()) {
|
||||||
return SubscribeMultipleMailboxRequest(mailboxId, listDescendantMailboxIds, subscribeState, subscribeAction);
|
final listDescendantMailboxIds = mailboxNode.descendantsAsList().mailboxIds;
|
||||||
} else {
|
log("BaseMailboxController::_generateSubscribeRequestWhenSubscribeDisabled:listDescendantMailboxIds $listDescendantMailboxIds");
|
||||||
return SubscribeMailboxRequest(mailboxId, subscribeState, subscribeAction);
|
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 {
|
void getAllMailbox(Session session, AccountId accountId) async {
|
||||||
|
|||||||
@@ -21,6 +21,8 @@ class MailboxNode with EquatableMixin{
|
|||||||
|
|
||||||
bool hasChildren() => childrenItems?.isNotEmpty ?? false;
|
bool hasChildren() => childrenItems?.isNotEmpty ?? false;
|
||||||
|
|
||||||
|
bool hasParents() => item.hasParentId();
|
||||||
|
|
||||||
bool get isActivated => nodeState == MailboxState.activated;
|
bool get isActivated => nodeState == MailboxState.activated;
|
||||||
|
|
||||||
bool get isSelected => selectMode == SelectMode.ACTIVE;
|
bool get isSelected => selectMode == SelectMode.ACTIVE;
|
||||||
|
|||||||
@@ -111,6 +111,20 @@ class MailboxTree with EquatableMixin {
|
|||||||
return path;
|
return path;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
List<MailboxNode>? getAncestorList(MailboxNode mailboxNode) {
|
||||||
|
var parentId = mailboxNode.item.parentId;
|
||||||
|
List<MailboxNode> ancestor = <MailboxNode>[];
|
||||||
|
while(parentId != null) {
|
||||||
|
final parentNode = findNode((node) => node.item.id == parentId);
|
||||||
|
if (parentNode == null) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
ancestor.add(parentNode);
|
||||||
|
parentId = parentNode.item.parentId;
|
||||||
|
}
|
||||||
|
return ancestor.isNotEmpty ? ancestor : null;
|
||||||
|
}
|
||||||
|
|
||||||
Map<Role, PresentationMailbox> get mapPresentationMailboxByRole {
|
Map<Role, PresentationMailbox> get mapPresentationMailboxByRole {
|
||||||
if (root.childrenItems?.isEmpty == true) {
|
if (root.childrenItems?.isEmpty == true) {
|
||||||
return {};
|
return {};
|
||||||
|
|||||||
Reference in New Issue
Block a user