TF-975 Gone all sub folder of folder when move it
This commit is contained in:
@@ -2,6 +2,7 @@ import 'package:equatable/equatable.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/id.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
||||
import 'package:model/mailbox/expand_mode.dart';
|
||||
import 'package:model/mailbox/mailbox_state.dart';
|
||||
import 'package:model/mailbox/presentation_mailbox.dart';
|
||||
import 'package:model/mailbox/select_mode.dart';
|
||||
|
||||
@@ -12,6 +13,7 @@ class MailboxNode with EquatableMixin{
|
||||
List<MailboxNode>? childrenItems;
|
||||
ExpandMode expandMode;
|
||||
SelectMode selectMode;
|
||||
MailboxState nodeState;
|
||||
|
||||
factory MailboxNode.root() => MailboxNode(_root);
|
||||
|
||||
@@ -19,12 +21,15 @@ class MailboxNode with EquatableMixin{
|
||||
|
||||
bool hasChildren() => childrenItems?.isNotEmpty ?? false;
|
||||
|
||||
bool get isActivated => nodeState == MailboxState.activated;
|
||||
|
||||
MailboxNode(
|
||||
this.item,
|
||||
{
|
||||
this.childrenItems,
|
||||
this.expandMode = ExpandMode.COLLAPSE,
|
||||
this.selectMode = SelectMode.INACTIVE
|
||||
this.selectMode = SelectMode.INACTIVE,
|
||||
this.nodeState = MailboxState.activated,
|
||||
}
|
||||
);
|
||||
|
||||
@@ -33,6 +38,14 @@ class MailboxNode with EquatableMixin{
|
||||
childrenItems?.add(node);
|
||||
}
|
||||
|
||||
void updateNodeState(MailboxState state) {
|
||||
nodeState = state;
|
||||
}
|
||||
|
||||
void updateItem(PresentationMailbox newItem) {
|
||||
item = newItem;
|
||||
}
|
||||
|
||||
List<MailboxNode>? updateNode(MailboxId mailboxId, MailboxNode newNode, {MailboxNode? parent}) {
|
||||
List<MailboxNode>? _children = parent == null ? childrenItems : parent.childrenItems;
|
||||
return _children?.map((MailboxNode child) {
|
||||
@@ -106,13 +119,16 @@ extension MailboxNodeExtension on MailboxNode {
|
||||
MailboxNode copyWith({
|
||||
SelectMode? newSelectMode,
|
||||
ExpandMode? newExpandMode,
|
||||
MailboxState? newNodeState,
|
||||
PresentationMailbox? newItem,
|
||||
List<MailboxNode>? children
|
||||
}) {
|
||||
return MailboxNode(
|
||||
item,
|
||||
newItem ?? item,
|
||||
childrenItems: children ?? childrenItems,
|
||||
expandMode: newExpandMode ?? expandMode,
|
||||
selectMode: newSelectMode ?? selectMode,
|
||||
nodeState: newNodeState ?? nodeState,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -122,6 +138,7 @@ extension MailboxNodeExtension on MailboxNode {
|
||||
childrenItems: childrenItems,
|
||||
expandMode: expandMode,
|
||||
selectMode: selectMode == SelectMode.INACTIVE ? SelectMode.ACTIVE : SelectMode.INACTIVE,
|
||||
nodeState: nodeState,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -131,6 +148,7 @@ extension MailboxNodeExtension on MailboxNode {
|
||||
childrenItems: childrenItems,
|
||||
expandMode: newExpandMode ?? expandMode,
|
||||
selectMode: selectMode,
|
||||
nodeState: nodeState,
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -39,14 +39,24 @@ class TreeBuilder {
|
||||
return tree;
|
||||
}
|
||||
|
||||
Future<Tuple2<MailboxTree, MailboxTree>> generateMailboxTreeInUI(List<PresentationMailbox> allMailboxes) async {
|
||||
Future<Tuple3<MailboxTree, MailboxTree, List<PresentationMailbox>>> generateMailboxTreeInUI(
|
||||
List<PresentationMailbox> allMailboxes,
|
||||
{MailboxId? mailboxIdSelected}
|
||||
) async {
|
||||
final Map<MailboxId, MailboxNode> mailboxDictionary = HashMap();
|
||||
|
||||
final defaultTree = MailboxTree(MailboxNode.root());
|
||||
final folderTree = MailboxTree(MailboxNode.root());
|
||||
List<PresentationMailbox> listAllMailboxes = <PresentationMailbox>[];
|
||||
|
||||
for (var mailbox in allMailboxes) {
|
||||
mailboxDictionary[mailbox.id] = MailboxNode(mailbox);
|
||||
if (mailbox.id == mailboxIdSelected) {
|
||||
mailboxDictionary[mailbox.id] = MailboxNode(
|
||||
mailbox.withMailboxSate(MailboxState.deactivated),
|
||||
nodeState: MailboxState.deactivated);
|
||||
} else {
|
||||
mailboxDictionary[mailbox.id] = MailboxNode(mailbox);
|
||||
}
|
||||
}
|
||||
|
||||
for (var mailbox in allMailboxes) {
|
||||
@@ -55,12 +65,22 @@ class TreeBuilder {
|
||||
final node = mailboxDictionary[mailbox.id];
|
||||
if (node != null) {
|
||||
if (parentNode != null) {
|
||||
parentNode.addChildNode(node);
|
||||
if (parentNode.nodeState == MailboxState.deactivated) {
|
||||
node.updateItem(mailbox.withMailboxSate(MailboxState.deactivated));
|
||||
node.updateNodeState(MailboxState.deactivated);
|
||||
parentNode.addChildNode(node);
|
||||
listAllMailboxes.add(node.item);
|
||||
} else {
|
||||
parentNode.addChildNode(node);
|
||||
listAllMailboxes.add(node.item);
|
||||
}
|
||||
parentNode.childrenItems?.sortByCompare<MailboxName?>(
|
||||
(node) => node.item.name,
|
||||
(name, other) => name?.compareAlphabetically(other) ?? -1
|
||||
);
|
||||
} else {
|
||||
listAllMailboxes.add(node.item);
|
||||
|
||||
var tree = mailbox.hasRole() ? defaultTree : folderTree;
|
||||
|
||||
tree.root.addChildNode(node);
|
||||
@@ -73,7 +93,7 @@ class TreeBuilder {
|
||||
}
|
||||
|
||||
defaultTree.root.childrenItems?.sort((thisMailbox, thatMailbox) => thisMailbox.compareTo(thatMailbox));
|
||||
return Tuple2(defaultTree, folderTree);
|
||||
return Tuple3(defaultTree, folderTree, listAllMailboxes);
|
||||
}
|
||||
|
||||
Future<Tuple2<MailboxTree, MailboxTree>> generateMailboxTreeInUIAfterRefreshChanges(
|
||||
|
||||
Reference in New Issue
Block a user