TF-37 Sort mailbox in alphabet
This commit is contained in:
committed by
Dat H. Pham
parent
e63298bc29
commit
63702035c8
@@ -1,5 +1,10 @@
|
|||||||
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
||||||
|
|
||||||
extension MailboxNameExtension on MailboxName {
|
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/presentation_mailbox.dart';
|
||||||
import 'package:model/mailbox/select_mode.dart';
|
import 'package:model/mailbox/select_mode.dart';
|
||||||
import 'package:tmail_ui_user/features/base/base_controller.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/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/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/domain/usecases/get_all_mailbox_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_node.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/core.dart';
|
||||||
import 'package:core/presentation/extensions/color_extension.dart';
|
import 'package:core/presentation/extensions/color_extension.dart';
|
||||||
import 'package:core/presentation/resources/image_paths.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/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/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_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_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_folder_tile_builder.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/mailbox_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)
|
.addName(AppLocalizations.of(context).new_folder)
|
||||||
.build()
|
.build()
|
||||||
),
|
),
|
||||||
Obx(() => controller.folderMailboxTree.value.root.childrenItems.isNotEmpty
|
_buildFolderMailbox(context),
|
||||||
? _buildFolderMailbox(context, controller.folderMailboxTree.value)
|
|
||||||
: SizedBox.shrink()
|
|
||||||
),
|
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -180,19 +175,22 @@ class MailboxView extends GetWidget<MailboxController> {
|
|||||||
.build()));
|
.build()));
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _buildFolderMailbox(BuildContext context, MailboxTree mailboxTree) {
|
Widget _buildFolderMailbox(BuildContext context) {
|
||||||
return Transform(
|
return Obx(() => controller.folderMailboxTree.value.root.hasChildren()
|
||||||
transform: Matrix4.translationValues(responsiveUtils.isMobile(context) ? 0.0 : -15.0, 0.0, 0.0),
|
? Transform(
|
||||||
child: Padding(
|
transform: Matrix4.translationValues(responsiveUtils.isMobile(context) ? 0.0 : -15.0, 0.0, 0.0),
|
||||||
padding: EdgeInsets.only(left: 4, right: 16),
|
child: Padding(
|
||||||
child: TreeView(
|
padding: EdgeInsets.only(left: 4, right: 16),
|
||||||
startExpanded: false,
|
child: TreeView(
|
||||||
key: Key('folder_mailbox_list'),
|
startExpanded: false,
|
||||||
children: _buildListChildTileWidget(context, mailboxTree.root.childrenItems)))
|
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
|
return listMailboxNode
|
||||||
.map((mailboxNode) => mailboxNode.hasChildren()
|
.map((mailboxNode) => mailboxNode.hasChildren()
|
||||||
? Padding(
|
? Padding(
|
||||||
@@ -206,7 +204,7 @@ class MailboxView extends GetWidget<MailboxController> {
|
|||||||
mailboxNode,
|
mailboxNode,
|
||||||
controller.getSelectMode(mailboxNode.item, controller.mailboxDashBoardController.selectedMailbox.value))
|
controller.getSelectMode(mailboxNode.item, controller.mailboxDashBoardController.selectedMailbox.value))
|
||||||
.build(context)),
|
.build(context)),
|
||||||
children: _buildListChildTileWidget(context, mailboxNode.childrenItems)))
|
children: _buildListChildTileWidget(context, mailboxNode.childrenItems!)))
|
||||||
: Padding(
|
: Padding(
|
||||||
padding: EdgeInsets.only(left: 16),
|
padding: EdgeInsets.only(left: 16),
|
||||||
child: GestureDetector(
|
child: GestureDetector(
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
import 'dart:collection';
|
import 'dart:collection';
|
||||||
|
import 'package:collection/collection.dart';
|
||||||
|
|
||||||
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
||||||
import 'package:model/mailbox/presentation_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_node.dart';
|
||||||
import 'mailbox_tree.dart';
|
import 'mailbox_tree.dart';
|
||||||
@@ -21,8 +23,16 @@ class TreeBuilder {
|
|||||||
if (node != null) {
|
if (node != null) {
|
||||||
if (parentNode != null) {
|
if (parentNode != null) {
|
||||||
parentNode.addChildNode(node);
|
parentNode.addChildNode(node);
|
||||||
|
parentNode.childrenItems?.sortByCompare<MailboxName?>(
|
||||||
|
(node) => node.item.name,
|
||||||
|
(name, other) => name?.compareAlphabetically(other) ?? -1
|
||||||
|
);
|
||||||
} else {
|
} else {
|
||||||
tree.root.addChildNode(node);
|
tree.root.addChildNode(node);
|
||||||
|
tree.root.childrenItems?.sortByCompare<MailboxName?>(
|
||||||
|
(node) => node.item.name,
|
||||||
|
(name, other) => name?.compareAlphabetically(other) ?? -1
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -83,6 +83,8 @@ dependencies:
|
|||||||
# http_parser
|
# http_parser
|
||||||
http_parser: 4.0.0
|
http_parser: 4.0.0
|
||||||
|
|
||||||
|
collection: 1.15.0
|
||||||
|
|
||||||
# file_size
|
# file_size
|
||||||
filesize: 2.0.1
|
filesize: 2.0.1
|
||||||
|
|
||||||
|
|||||||
@@ -13,46 +13,46 @@ void main() {
|
|||||||
PresentationMailbox(MailboxId(Id('root'))),
|
PresentationMailbox(MailboxId(Id('root'))),
|
||||||
childrenItems: [
|
childrenItems: [
|
||||||
MailboxNode(
|
MailboxNode(
|
||||||
PresentationMailbox(MailboxId(Id("1")), parentId: null),
|
PresentationMailbox(MailboxId(Id("3")), parentId: null),
|
||||||
childrenItems: [
|
childrenItems: [
|
||||||
MailboxNode(PresentationMailbox(MailboxId(Id("1_1")), parentId: MailboxId(Id('1')))),
|
MailboxNode(
|
||||||
MailboxNode(
|
PresentationMailbox(MailboxId(Id("3_2")), parentId: MailboxId(Id('3'))),
|
||||||
PresentationMailbox(MailboxId(Id("1_2")), parentId: MailboxId(Id('1'))),
|
childrenItems: [MailboxNode(PresentationMailbox(MailboxId(Id("3_2_1")), parentId: MailboxId(Id('3_2'))))]
|
||||||
childrenItems: [
|
),
|
||||||
MailboxNode(PresentationMailbox(MailboxId(Id("1_2_1")), parentId: MailboxId(Id('1_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(
|
MailboxNode(
|
||||||
PresentationMailbox(MailboxId(Id("2")), parentId: null),
|
PresentationMailbox(MailboxId(Id("1")), parentId: null),
|
||||||
childrenItems: [
|
childrenItems: [
|
||||||
MailboxNode(PresentationMailbox(MailboxId(Id("2_1")), parentId: MailboxId(Id('2'))),
|
MailboxNode(
|
||||||
childrenItems: [
|
PresentationMailbox(MailboxId(Id("1_2")), parentId: MailboxId(Id('1'))),
|
||||||
MailboxNode(
|
childrenItems: [
|
||||||
PresentationMailbox(MailboxId(Id("2_1_1")), parentId: MailboxId(Id('2_1'))),
|
MailboxNode(PresentationMailbox(MailboxId(Id("1_2_1")), parentId: MailboxId(Id('1_2'))))
|
||||||
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("1_1")), parentId: MailboxId(Id('1')))),
|
||||||
]
|
]
|
||||||
),
|
|
||||||
MailboxNode(PresentationMailbox(MailboxId(Id("2_2")), parentId: MailboxId(Id('2'))))
|
|
||||||
]
|
|
||||||
),
|
),
|
||||||
MailboxNode(
|
MailboxNode(
|
||||||
PresentationMailbox(MailboxId(Id("3")), parentId: null),
|
PresentationMailbox(MailboxId(Id("2")), parentId: null),
|
||||||
childrenItems: [
|
childrenItems: [
|
||||||
MailboxNode(
|
MailboxNode(PresentationMailbox(MailboxId(Id("2_2")), parentId: MailboxId(Id('2')))),
|
||||||
PresentationMailbox(MailboxId(Id("3_1")), parentId: MailboxId(Id('3'))),
|
MailboxNode(PresentationMailbox(MailboxId(Id("2_1")), parentId: MailboxId(Id('2'))),
|
||||||
childrenItems: [
|
childrenItems: [
|
||||||
MailboxNode(PresentationMailbox(MailboxId(Id("3_1_1")), parentId: MailboxId(Id('3_1'))))
|
MailboxNode(PresentationMailbox(MailboxId(Id("2_1_2")), parentId: MailboxId(Id('2_1')))),
|
||||||
]
|
MailboxNode(
|
||||||
),
|
PresentationMailbox(MailboxId(Id("2_1_1")), parentId: MailboxId(Id('2_1'))),
|
||||||
MailboxNode(
|
childrenItems: [MailboxNode(PresentationMailbox(MailboxId(Id("2_1_1_1")), parentId: MailboxId(Id('2_1_1'))))]
|
||||||
PresentationMailbox(MailboxId(Id("3_2")), parentId: MailboxId(Id('3'))),
|
),
|
||||||
childrenItems: [MailboxNode(PresentationMailbox(MailboxId(Id("3_2_1")), parentId: MailboxId(Id('3_2'))))]
|
]
|
||||||
)
|
),
|
||||||
]
|
]
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user