Skip to content

Commit

Permalink
TF-1868 Fix a mailbox is visible then it's parents needs to be visibl…
Browse files Browse the repository at this point in the history
…e too
  • Loading branch information
dab246 committed Jul 11, 2023
1 parent e6c3176 commit 90f8b4d
Show file tree
Hide file tree
Showing 3 changed files with 85 additions and 6 deletions.
75 changes: 69 additions & 6 deletions lib/features/base/base_mailbox_controller.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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);
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, subscribeState, subscribeAction);
return SubscribeMailboxRequest(
mailboxId,
MailboxSubscribeState.enabled,
subscribeAction
);
}
} else {
return SubscribeMailboxRequest(
mailboxId,
MailboxSubscribeState.enabled,
subscribeAction
);
}
return null;
}

void getAllMailbox(Session session, AccountId accountId) async {
Expand Down
2 changes: 2 additions & 0 deletions lib/features/mailbox/presentation/model/mailbox_node.dart
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ class MailboxNode with EquatableMixin{

bool hasChildren() => childrenItems?.isNotEmpty ?? false;

bool hasParents() => item.hasParentId();

bool get isActivated => nodeState == MailboxState.activated;

bool get isSelected => selectMode == SelectMode.ACTIVE;
Expand Down
14 changes: 14 additions & 0 deletions lib/features/mailbox/presentation/model/mailbox_tree.dart
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,20 @@ class MailboxTree with EquatableMixin {
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 {
if (root.childrenItems?.isEmpty == true) {
return {};
Expand Down

0 comments on commit 90f8b4d

Please sign in to comment.