TF-37 Sort mailbox in alphabet

This commit is contained in:
Dat PHAM HOANG
2021-08-31 18:09:36 +07:00
committed by Dat H. Pham
parent e63298bc29
commit 63702035c8
6 changed files with 70 additions and 55 deletions
@@ -1,5 +1,10 @@
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
extension MailboxNameExtension on MailboxName {
int compareToSort(MailboxName mailboxName) => name.compareTo(mailboxName.name);
int compareAlphabetically(MailboxName? other) {
if (other == null) {
return 1;
}
return name.toLowerCase().compareTo(other.name.toLowerCase());
}
}
@@ -10,8 +10,8 @@ import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
import 'package:model/mailbox/presentation_mailbox.dart';
import 'package:model/mailbox/select_mode.dart';
import 'package:tmail_ui_user/features/base/base_controller.dart';
import 'package:tmail_ui_user/features/mailbox/domain/constants/mailbox_constants.dart';
import 'package:tmail_ui_user/features/login/domain/usecases/delete_credential_interactor.dart';
import 'package:tmail_ui_user/features/mailbox/domain/constants/mailbox_constants.dart';
import 'package:tmail_ui_user/features/mailbox/domain/state/get_all_mailboxes_state.dart';
import 'package:tmail_ui_user/features/mailbox/domain/usecases/get_all_mailbox_interactor.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_node.dart';
@@ -1,4 +1,3 @@
import 'package:built_collection/built_collection.dart';
import 'package:core/core.dart';
import 'package:core/presentation/extensions/color_extension.dart';
import 'package:core/presentation/resources/image_paths.dart';
@@ -10,7 +9,6 @@ import 'package:model/model.dart';
import 'package:tmail_ui_user/features/mailbox/domain/state/get_all_mailboxes_state.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/mailbox_controller.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_node.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_tree.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/mailbox_button_new_folder_builder.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/mailbox_folder_tile_builder.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/mailbox_tile_builder.dart';
@@ -154,10 +152,7 @@ class MailboxView extends GetWidget<MailboxController> {
.addName(AppLocalizations.of(context).new_folder)
.build()
),
Obx(() => controller.folderMailboxTree.value.root.childrenItems.isNotEmpty
? _buildFolderMailbox(context, controller.folderMailboxTree.value)
: SizedBox.shrink()
),
_buildFolderMailbox(context),
]
);
}
@@ -180,19 +175,22 @@ class MailboxView extends GetWidget<MailboxController> {
.build()));
}
Widget _buildFolderMailbox(BuildContext context, MailboxTree mailboxTree) {
return Transform(
transform: Matrix4.translationValues(responsiveUtils.isMobile(context) ? 0.0 : -15.0, 0.0, 0.0),
child: Padding(
padding: EdgeInsets.only(left: 4, right: 16),
child: TreeView(
startExpanded: false,
key: Key('folder_mailbox_list'),
children: _buildListChildTileWidget(context, mailboxTree.root.childrenItems)))
Widget _buildFolderMailbox(BuildContext context) {
return Obx(() => controller.folderMailboxTree.value.root.hasChildren()
? Transform(
transform: Matrix4.translationValues(responsiveUtils.isMobile(context) ? 0.0 : -15.0, 0.0, 0.0),
child: Padding(
padding: EdgeInsets.only(left: 4, right: 16),
child: TreeView(
startExpanded: false,
key: Key('folder_mailbox_list'),
children: _buildListChildTileWidget(context, controller.folderMailboxTree.value.root.childrenItems!)))
)
: SizedBox.shrink()
);
}
List<Widget> _buildListChildTileWidget(BuildContext context, BuiltList<MailboxNode> listMailboxNode) {
List<Widget> _buildListChildTileWidget(BuildContext context, List<MailboxNode> listMailboxNode) {
return listMailboxNode
.map((mailboxNode) => mailboxNode.hasChildren()
? Padding(
@@ -206,7 +204,7 @@ class MailboxView extends GetWidget<MailboxController> {
mailboxNode,
controller.getSelectMode(mailboxNode.item, controller.mailboxDashBoardController.selectedMailbox.value))
.build(context)),
children: _buildListChildTileWidget(context, mailboxNode.childrenItems)))
children: _buildListChildTileWidget(context, mailboxNode.childrenItems!)))
: Padding(
padding: EdgeInsets.only(left: 16),
child: GestureDetector(
@@ -1,7 +1,9 @@
import 'dart:collection';
import 'package:collection/collection.dart';
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
import 'package:model/mailbox/presentation_mailbox.dart';
import 'package:tmail_ui_user/features/mailbox/domain/extensions/mailbox_name_extension.dart';
import 'mailbox_node.dart';
import 'mailbox_tree.dart';
@@ -21,8 +23,16 @@ class TreeBuilder {
if (node != null) {
if (parentNode != null) {
parentNode.addChildNode(node);
parentNode.childrenItems?.sortByCompare<MailboxName?>(
(node) => node.item.name,
(name, other) => name?.compareAlphabetically(other) ?? -1
);
} else {
tree.root.addChildNode(node);
tree.root.childrenItems?.sortByCompare<MailboxName?>(
(node) => node.item.name,
(name, other) => name?.compareAlphabetically(other) ?? -1
);
}
}
});
+2
View File
@@ -83,6 +83,8 @@ dependencies:
# http_parser
http_parser: 4.0.0
collection: 1.15.0
# file_size
filesize: 2.0.1
@@ -13,46 +13,46 @@ void main() {
PresentationMailbox(MailboxId(Id('root'))),
childrenItems: [
MailboxNode(
PresentationMailbox(MailboxId(Id("1")), parentId: null),
childrenItems: [
MailboxNode(PresentationMailbox(MailboxId(Id("1_1")), parentId: MailboxId(Id('1')))),
MailboxNode(
PresentationMailbox(MailboxId(Id("1_2")), parentId: MailboxId(Id('1'))),
childrenItems: [
MailboxNode(PresentationMailbox(MailboxId(Id("1_2_1")), parentId: MailboxId(Id('1_2'))))
]
),
]
PresentationMailbox(MailboxId(Id("3")), parentId: null),
childrenItems: [
MailboxNode(
PresentationMailbox(MailboxId(Id("3_2")), parentId: MailboxId(Id('3'))),
childrenItems: [MailboxNode(PresentationMailbox(MailboxId(Id("3_2_1")), parentId: MailboxId(Id('3_2'))))]
),
MailboxNode(
PresentationMailbox(MailboxId(Id("3_1")), parentId: MailboxId(Id('3'))),
childrenItems: [
MailboxNode(PresentationMailbox(MailboxId(Id("3_1_1")), parentId: MailboxId(Id('3_1'))))
]
),
]
),
MailboxNode(
PresentationMailbox(MailboxId(Id("2")), parentId: null),
childrenItems: [
MailboxNode(PresentationMailbox(MailboxId(Id("2_1")), parentId: MailboxId(Id('2'))),
childrenItems: [
MailboxNode(
PresentationMailbox(MailboxId(Id("2_1_1")), parentId: MailboxId(Id('2_1'))),
childrenItems: [MailboxNode(PresentationMailbox(MailboxId(Id("2_1_1_1")), parentId: MailboxId(Id('2_1_1'))))]
),
MailboxNode(PresentationMailbox(MailboxId(Id("2_1_2")), parentId: MailboxId(Id('2_1'))))
]
),
MailboxNode(PresentationMailbox(MailboxId(Id("2_2")), parentId: MailboxId(Id('2'))))
]
PresentationMailbox(MailboxId(Id("1")), parentId: null),
childrenItems: [
MailboxNode(
PresentationMailbox(MailboxId(Id("1_2")), parentId: MailboxId(Id('1'))),
childrenItems: [
MailboxNode(PresentationMailbox(MailboxId(Id("1_2_1")), parentId: MailboxId(Id('1_2'))))
]
),
MailboxNode(PresentationMailbox(MailboxId(Id("1_1")), parentId: MailboxId(Id('1')))),
]
),
MailboxNode(
PresentationMailbox(MailboxId(Id("3")), parentId: null),
childrenItems: [
MailboxNode(
PresentationMailbox(MailboxId(Id("3_1")), parentId: MailboxId(Id('3'))),
childrenItems: [
MailboxNode(PresentationMailbox(MailboxId(Id("3_1_1")), parentId: MailboxId(Id('3_1'))))
]
),
MailboxNode(
PresentationMailbox(MailboxId(Id("3_2")), parentId: MailboxId(Id('3'))),
childrenItems: [MailboxNode(PresentationMailbox(MailboxId(Id("3_2_1")), parentId: MailboxId(Id('3_2'))))]
)
]
PresentationMailbox(MailboxId(Id("2")), parentId: null),
childrenItems: [
MailboxNode(PresentationMailbox(MailboxId(Id("2_2")), parentId: MailboxId(Id('2')))),
MailboxNode(PresentationMailbox(MailboxId(Id("2_1")), parentId: MailboxId(Id('2'))),
childrenItems: [
MailboxNode(PresentationMailbox(MailboxId(Id("2_1_2")), parentId: MailboxId(Id('2_1')))),
MailboxNode(
PresentationMailbox(MailboxId(Id("2_1_1")), parentId: MailboxId(Id('2_1'))),
childrenItems: [MailboxNode(PresentationMailbox(MailboxId(Id("2_1_1_1")), parentId: MailboxId(Id('2_1_1'))))]
),
]
),
]
),
]
)