import 'dart:collection'; import 'package:collection/collection.dart'; import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; import 'package:model/model.dart'; import 'mailbox_node.dart'; import 'mailbox_tree.dart'; class TreeBuilder { Future generateMailboxTree(List mailboxesList) async { final Map mailboxDictionary = HashMap(); final tree = MailboxTree(MailboxNode.root()); mailboxesList.forEach((mailbox) { mailboxDictionary[mailbox.id] = MailboxNode(mailbox); }); mailboxesList.forEach((mailbox) { final parentId = mailbox.parentId; final parentNode = mailboxDictionary[parentId]; final node = mailboxDictionary[mailbox.id]; if (node != null) { if (parentNode != null) { parentNode.addChildNode(node); parentNode.childrenItems?.sortByCompare( (node) => node.item.name, (name, other) => name?.compareAlphabetically(other) ?? -1 ); } else { tree.root.addChildNode(node); tree.root.childrenItems?.sortByCompare( (node) => node.item.name, (name, other) => name?.compareAlphabetically(other) ?? -1 ); } } }); return tree; } }