From eb8103d98fb7202b58621e3687a14a220cd92811 Mon Sep 17 00:00:00 2001 From: dab246 Date: Thu, 14 Oct 2021 13:59:17 +0700 Subject: [PATCH] TF-101 Show counter regular mailbox on app bar thread view --- .../email/presentation/email_controller.dart | 4 +- .../presentation/mailbox_controller.dart | 40 +++++++---- .../mailbox_dashboard_controller.dart | 6 +- .../presentation/thread_controller.dart | 4 +- .../app_bar_thread_widget_builder.dart | 70 +++++++++++-------- 5 files changed, 73 insertions(+), 51 deletions(-) diff --git a/lib/features/email/presentation/email_controller.dart b/lib/features/email/presentation/email_controller.dart index 7354d396c..341cefe55 100644 --- a/lib/features/email/presentation/email_controller.dart +++ b/lib/features/email/presentation/email_controller.dart @@ -343,7 +343,7 @@ class EmailController extends BaseController { bool canComposeEmail() => mailboxDashBoardController.sessionCurrent != null && mailboxDashBoardController.userProfile.value != null - && mailboxDashBoardController.mapMailboxId.containsKey(PresentationMailbox.roleOutbox) + && mailboxDashBoardController.mapDefaultMailboxId.containsKey(PresentationMailbox.roleOutbox) && mailboxDashBoardController.selectedEmail.value != null; void backToThreadView() { @@ -362,7 +362,7 @@ class EmailController extends BaseController { mailboxRole: mailboxDashBoardController.selectedMailbox.value?.role, session: mailboxDashBoardController.sessionCurrent!, userProfile: mailboxDashBoardController.userProfile.value!, - mapMailboxId: mailboxDashBoardController.mapMailboxId)); + mapMailboxId: mailboxDashBoardController.mapDefaultMailboxId)); } } } \ No newline at end of file diff --git a/lib/features/mailbox/presentation/mailbox_controller.dart b/lib/features/mailbox/presentation/mailbox_controller.dart index bad344e58..a9930c1f4 100644 --- a/lib/features/mailbox/presentation/mailbox_controller.dart +++ b/lib/features/mailbox/presentation/mailbox_controller.dart @@ -84,7 +84,7 @@ class MailboxController extends BaseController { if (success is GetAllMailboxSuccess) { currentMailboxState = success.currentMailboxState; defaultMailboxList.value = success.defaultMailboxList; - _setUpMapMailboxIdDefault(success.defaultMailboxList); + _setUpMapMailboxIdDefault(success.defaultMailboxList, success.folderMailboxList); _buildTree(success.folderMailboxList); } }); @@ -131,32 +131,44 @@ class MailboxController extends BaseController { folderMailboxNodeList.value = newMailboxNodeList; } - void _setUpMapMailboxIdDefault(List defaultMailboxList) { - final mapMailboxId = Map.fromIterable( + void _setUpMapMailboxIdDefault(List defaultMailboxList, List folderMailboxList) { + final mapDefaultMailboxId = Map.fromIterable( defaultMailboxList, key: (presentationMailbox) => presentationMailbox.role!, value: (presentationMailbox) => presentationMailbox.id); - final mapMailboxDefault = Map.fromIterable( - defaultMailboxList, - key: (presentationMailbox) => presentationMailbox.role!, - value: (presentationMailbox) => presentationMailbox); + final mapDefaultMailbox = Map.fromIterable( + defaultMailboxList, + key: (presentationMailbox) => presentationMailbox.role!, + value: (presentationMailbox) => presentationMailbox); - mailboxDashBoardController.setMapMailboxId(mapMailboxId); + final mapFolderMailbox = Map.fromIterable( + folderMailboxList, + key: (presentationMailbox) => presentationMailbox.id, + value: (presentationMailbox) => presentationMailbox); + + mailboxDashBoardController.setMapDefaultMailboxId(mapDefaultMailboxId); var mailboxCurrent = mailboxDashBoardController.selectedMailbox.value; if (mailboxCurrent != null) { - if (mapMailboxDefault.containsKey(mailboxCurrent.role)) { - mailboxDashBoardController.setNewFirstSelectedMailbox(mapMailboxDefault[mailboxCurrent.role]); + if (mailboxCurrent.hasRole()) { + mailboxDashBoardController.setNewFirstSelectedMailbox(mapDefaultMailbox.containsKey(mailboxCurrent.role) + ? mapDefaultMailbox[mailboxCurrent.role] + : mailboxCurrent); } else { - mailboxDashBoardController.setNewFirstSelectedMailbox(mailboxCurrent); + mailboxDashBoardController.setNewFirstSelectedMailbox(mapFolderMailbox.containsKey(mailboxCurrent.id) + ? mapFolderMailbox[mailboxCurrent.id] + : mailboxCurrent); } } else { - if (mapMailboxDefault.containsKey(PresentationMailbox.roleInbox)) { - mailboxDashBoardController.setNewFirstSelectedMailbox(mapMailboxDefault[PresentationMailbox.roleInbox]); + if (mapDefaultMailbox.containsKey(PresentationMailbox.roleInbox)) { + mailboxDashBoardController.setNewFirstSelectedMailbox(mapDefaultMailbox[PresentationMailbox.roleInbox]); } else { - mailboxDashBoardController.setNewFirstSelectedMailbox(mapMailboxDefault.values.first); + final allMailbox = defaultMailboxList + folderMailboxList; + if (allMailbox.isNotEmpty) { + mailboxDashBoardController.setNewFirstSelectedMailbox(allMailbox.first); + } } } } diff --git a/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_controller.dart b/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_controller.dart index 30514ce96..e863b7bb9 100644 --- a/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_controller.dart @@ -26,7 +26,7 @@ class MailboxDashBoardController extends BaseController { final userProfile = Rxn(); Session? sessionCurrent; - Map mapMailboxId = Map(); + Map mapDefaultMailboxId = Map(); MailboxDashBoardController(this._getUserProfileInteractor, this._appToast); @@ -91,8 +91,8 @@ class MailboxDashBoardController extends BaseController { }); } - void setMapMailboxId(Map newMapMailboxId) { - mapMailboxId = newMapMailboxId; + void setMapDefaultMailboxId(Map newMapMailboxId) { + mapDefaultMailboxId = newMapMailboxId; } void setSelectedMailbox(PresentationMailbox? newPresentationMailbox) { diff --git a/lib/features/thread/presentation/thread_controller.dart b/lib/features/thread/presentation/thread_controller.dart index 3445c1312..ae60b2850 100644 --- a/lib/features/thread/presentation/thread_controller.dart +++ b/lib/features/thread/presentation/thread_controller.dart @@ -473,7 +473,7 @@ class ThreadController extends BaseController { bool canComposeEmail() => mailboxDashBoardController.sessionCurrent != null && mailboxDashBoardController.userProfile.value != null - && mailboxDashBoardController.mapMailboxId.containsKey(PresentationMailbox.roleOutbox); + && mailboxDashBoardController.mapDefaultMailboxId.containsKey(PresentationMailbox.roleOutbox); void openMailboxLeftMenu() { mailboxDashBoardController.openDrawer(); @@ -490,7 +490,7 @@ class ThreadController extends BaseController { arguments: ComposerArguments( session: mailboxDashBoardController.sessionCurrent!, userProfile: mailboxDashBoardController.userProfile.value!, - mapMailboxId: mailboxDashBoardController.mapMailboxId)); + mapMailboxId: mailboxDashBoardController.mapDefaultMailboxId)); } } } \ No newline at end of file diff --git a/lib/features/thread/presentation/widgets/app_bar_thread_widget_builder.dart b/lib/features/thread/presentation/widgets/app_bar_thread_widget_builder.dart index b227f09df..19c0e2a29 100644 --- a/lib/features/thread/presentation/widgets/app_bar_thread_widget_builder.dart +++ b/lib/features/thread/presentation/widgets/app_bar_thread_widget_builder.dart @@ -94,43 +94,33 @@ class AppBarThreadWidgetBuilder { Widget _buildContentCenterAppBar() { return Row( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.center, children: [ - (_presentationMailbox != null && _presentationMailbox!.hasRole()) - ? GestureDetector( - onTap: () => { - if (_onOpenListMailboxActionClick != null) { - _onOpenListMailboxActionClick!() - }}, - child: Padding( - padding: EdgeInsets.only(left: 16), - child: Text( - '${_presentationMailbox?.name != null ? _presentationMailbox?.name?.name : ''}', - maxLines: 1, - overflow: TextOverflow.ellipsis, - style: TextStyle(fontSize: 22, color: AppColor.titleAppBarMailboxListMail, fontWeight: FontWeight.w500)))) - : Expanded(child: GestureDetector( - onTap: () => { - if (_onOpenListMailboxActionClick != null) { - _onOpenListMailboxActionClick!() - }}, - child: Padding( - padding: EdgeInsets.only(left: 16), - child: Text( - '${_presentationMailbox?.name != null ? _presentationMailbox?.name?.name : ''}', - maxLines: 1, - overflow: TextOverflow.ellipsis, - style: TextStyle(fontSize: 22, color: AppColor.titleAppBarMailboxListMail, fontWeight: FontWeight.w500))))), - if(_presentationMailbox != null && _presentationMailbox!.hasRole() && _presentationMailbox!.getCountUnReadEmails().isNotEmpty) + GestureDetector( + onTap: () => { + if (_onOpenListMailboxActionClick != null) { + _onOpenListMailboxActionClick!() + }}, + child: Padding( + padding: EdgeInsets.only(left: 16, right: 8), + child: Container( + padding: EdgeInsets.zero, + margin: EdgeInsets.zero, + constraints: BoxConstraints(maxWidth: _getMaxWidthAppBarTitle()), + child: Text( + '${ _presentationMailbox?.name?.name ?? ''}', + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: TextStyle(fontSize: 22, color: AppColor.titleAppBarMailboxListMail, fontWeight: FontWeight.w500)) + ))), + if(_presentationMailbox?.getCountUnReadEmails().isNotEmpty == true) Container( - margin: EdgeInsets.only(left: 9), + margin: EdgeInsets.zero, padding: EdgeInsets.only(left: 8, right: 8, top: 2.5, bottom: 2.5), decoration:BoxDecoration( borderRadius: BorderRadius.circular(8), color: AppColor.backgroundCounterMailboxColor), child: Text( - '${_presentationMailbox!.getCountUnReadEmails()} ${AppLocalizations.of(_context).unread_email_notification}', + '${_presentationMailbox?.getCountUnReadEmails() ?? ''} ${AppLocalizations.of(_context).unread_email_notification}', maxLines: 1, overflow: TextOverflow.ellipsis, style: TextStyle(fontSize: 10, color: AppColor.counterMailboxColor, fontWeight: FontWeight.w500), @@ -138,4 +128,24 @@ class AppBarThreadWidgetBuilder { ] ); } + + double _getMaxWidthAppBarTitle() { + var width = MediaQuery.of(_context).size.width; + var widthSiblingsWidget = _presentationMailbox?.getCountUnReadEmails().isNotEmpty == true + ? 150 + : 100; + if (_responsiveUtils.isTablet(_context)) { + width = width * 0.7; + widthSiblingsWidget = _presentationMailbox?.getCountUnReadEmails().isNotEmpty == true + ? 70 + : 0; + } else if (_responsiveUtils.isDesktop(_context)) { + width = width * 0.2; + widthSiblingsWidget = _presentationMailbox?.getCountUnReadEmails().isNotEmpty == true + ? 50 + : 0; + } + final maxWidth = width - widthSiblingsWidget; + return maxWidth; + } } \ No newline at end of file