From 71fc8a595e00013429a1592287b14cd0ed05caf3 Mon Sep 17 00:00:00 2001 From: Dat PHAM HOANG Date: Fri, 18 Mar 2022 17:06:13 +0700 Subject: [PATCH] TF-322 Sort default mailbox in TreeBuilder --- .../mailbox_cache_datasource_impl.dart | 2 - .../data/extensions/mailbox_extension.dart | 6 +-- .../presentation/model/mailbox_node.dart | 12 +++++ .../model/mailbox_tree_builder.dart | 1 + .../credential/credential_bindings.dart | 3 -- .../model/mailbox_tree_builder_test.dart | 47 +++++++++++++++++++ 6 files changed, 61 insertions(+), 10 deletions(-) diff --git a/lib/features/mailbox/data/datasource_impl/mailbox_cache_datasource_impl.dart b/lib/features/mailbox/data/datasource_impl/mailbox_cache_datasource_impl.dart index 9f31744e5..958c165c2 100644 --- a/lib/features/mailbox/data/datasource_impl/mailbox_cache_datasource_impl.dart +++ b/lib/features/mailbox/data/datasource_impl/mailbox_cache_datasource_impl.dart @@ -4,7 +4,6 @@ import 'package:jmap_dart_client/jmap/core/session/session.dart'; import 'package:jmap_dart_client/jmap/core/state.dart'; import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; import 'package:tmail_ui_user/features/mailbox/data/datasource/mailbox_datasource.dart'; -import 'package:tmail_ui_user/features/mailbox/data/extensions/mailbox_extension.dart'; import 'package:tmail_ui_user/features/mailbox/data/local/mailbox_cache_manager.dart'; import 'package:tmail_ui_user/features/mailbox/data/model/mailbox_change_response.dart'; import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_request.dart'; @@ -40,7 +39,6 @@ class MailboxCacheDataSourceImpl extends MailboxDataSource { Future> getAllMailboxCache() { return Future.sync(() async { final listMailboxes = await _mailboxCacheManager.getAllMailbox(); - listMailboxes.sort((mailboxA, mailboxB) => mailboxA.compareTo(mailboxB)); return listMailboxes; }).catchError((error) { throw error; diff --git a/lib/features/mailbox/data/extensions/mailbox_extension.dart b/lib/features/mailbox/data/extensions/mailbox_extension.dart index fe657d35d..16f65a642 100644 --- a/lib/features/mailbox/data/extensions/mailbox_extension.dart +++ b/lib/features/mailbox/data/extensions/mailbox_extension.dart @@ -1,6 +1,6 @@ import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; -import 'package:tmail_ui_user/features/mailbox/data/model/mailbox_cache.dart'; import 'package:tmail_ui_user/features/mailbox/data/extensions/mailbox_rights_extension.dart'; +import 'package:tmail_ui_user/features/mailbox/data/model/mailbox_cache.dart'; extension MailboxExtension on Mailbox { @@ -19,8 +19,4 @@ extension MailboxExtension on Mailbox { isSubscribed: isSubscribed?.value ); } - - int compareTo(Mailbox other) { - return this.sortOrder!.value.value.compareTo(other.sortOrder!.value.value); - } } \ No newline at end of file diff --git a/lib/features/mailbox/presentation/model/mailbox_node.dart b/lib/features/mailbox/presentation/model/mailbox_node.dart index 8bbb8c882..a7a29f0cd 100644 --- a/lib/features/mailbox/presentation/model/mailbox_node.dart +++ b/lib/features/mailbox/presentation/model/mailbox_node.dart @@ -135,4 +135,16 @@ extension MailboxNodeExtension on MailboxNode { selectMode: selectMode, ); } + + int compareTo(MailboxNode other) { + if (item.sortOrder == null) { + return -1; + } + + if (other.item.sortOrder == null) { + return 1; + } + + return item.sortOrder!.value.value.compareTo(other.item.sortOrder!.value.value); + } } diff --git a/lib/features/mailbox/presentation/model/mailbox_tree_builder.dart b/lib/features/mailbox/presentation/model/mailbox_tree_builder.dart index 09e2601f0..8fe5bcc90 100644 --- a/lib/features/mailbox/presentation/model/mailbox_tree_builder.dart +++ b/lib/features/mailbox/presentation/model/mailbox_tree_builder.dart @@ -72,6 +72,7 @@ class TreeBuilder { } }); + defaultTree.root.childrenItems?.sort((thisMailbox, thatMailbox) => thisMailbox.compareTo(thatMailbox)); return Tuple2(defaultTree, folderTree); } } \ No newline at end of file diff --git a/lib/main/bindings/credential/credential_bindings.dart b/lib/main/bindings/credential/credential_bindings.dart index d5be4c8f9..178b0757e 100644 --- a/lib/main/bindings/credential/credential_bindings.dart +++ b/lib/main/bindings/credential/credential_bindings.dart @@ -1,4 +1,3 @@ -import 'package:core/core.dart'; import 'package:get/get.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:tmail_ui_user/features/login/data/repository/credential_repository_impl.dart'; @@ -8,7 +7,6 @@ import 'package:tmail_ui_user/features/login/domain/usecases/get_credential_inte class CredentialBindings extends Bindings { void dependencies() { - log('CredentialBindings::dependencies(): dmm credential goi vao day di'); bindingsRepositoryImpl(); bindingsRepository(); bindingsInteractor(); @@ -19,7 +17,6 @@ class CredentialBindings extends Bindings { } void bindingsRepository() { - log('CredentialBindings::bindingsRepository(): dmm Put CredentialRepo '); Get.put(Get.find()); } diff --git a/test/features/mailbox/presentation/model/mailbox_tree_builder_test.dart b/test/features/mailbox/presentation/model/mailbox_tree_builder_test.dart index 395e508f3..ec8df74a2 100644 --- a/test/features/mailbox/presentation/model/mailbox_tree_builder_test.dart +++ b/test/features/mailbox/presentation/model/mailbox_tree_builder_test.dart @@ -209,4 +209,51 @@ void main() { contains(MailboxNode(PresentationMailbox(MailboxId(Id("e3_2_1")), parentId: MailboxId(Id('id42')))))); }); }); + + group('generate default mailbox tree base on sortOrder: ', () { + final expectedTree = MailboxTree( + MailboxNode( + PresentationMailbox(MailboxId(Id('root'))), + childrenItems: [ + MailboxNode( + PresentationMailbox(MailboxId(Id("1")), parentId: null, name: MailboxName('Inbox'), sortOrder: SortOrder(sortValue: 10), role: Role('inbox')), + ), + MailboxNode( + PresentationMailbox(MailboxId(Id("2")), parentId: null, name: MailboxName('Draft'), sortOrder: SortOrder(sortValue: 30), role: Role('draft')), + ), + MailboxNode( + PresentationMailbox(MailboxId(Id("3")), parentId: null, name: MailboxName('Outbox'), sortOrder: SortOrder(sortValue: 40), role: Role('outbox')), + ), + MailboxNode( + PresentationMailbox(MailboxId(Id("4")), parentId: null, name: MailboxName('Sent'), sortOrder: SortOrder(sortValue: 50), role: Role('sent')), + ), + MailboxNode( + PresentationMailbox(MailboxId(Id("5")), parentId: null, name: MailboxName('Trash'), sortOrder: SortOrder(sortValue: 60), role: Role('trash')), + ), + MailboxNode( + PresentationMailbox(MailboxId(Id("6")), parentId: null, name: MailboxName('Spam'), sortOrder: SortOrder(sortValue: 70), role: Role('spam')), + ), + ] + ) + ); + + + test('defaultMailboxTree should be in order after buildTree', () async { + final testCase = [ + PresentationMailbox(MailboxId(Id("4")), parentId: null, name: MailboxName('Sent'), sortOrder: SortOrder(sortValue: 50), role: Role('sent')), + PresentationMailbox(MailboxId(Id("6")), parentId: null, name: MailboxName('Spam'), sortOrder: SortOrder(sortValue: 70), role: Role('spam')), + PresentationMailbox(MailboxId(Id("5")), parentId: null, name: MailboxName('Trash'), sortOrder: SortOrder(sortValue: 60), role: Role('trash')), + PresentationMailbox(MailboxId(Id("2")), parentId: null, name: MailboxName('Draft'), sortOrder: SortOrder(sortValue: 30), role: Role('draft')), + PresentationMailbox(MailboxId(Id("3")), parentId: null, name: MailboxName('Outbox'), sortOrder: SortOrder(sortValue: 40), role: Role('outbox')), + PresentationMailbox(MailboxId(Id("1")), parentId: null, name: MailboxName('Inbox'), sortOrder: SortOrder(sortValue: 10), role: Role('inbox')), + ]; + + final generatedTree = await TreeBuilder().generateMailboxTreeInUI(testCase); + + expect( + generatedTree.head.root.childrenItems, + equals(expectedTree.root.childrenItems) + ); + }); + }); } \ No newline at end of file