TF-101 Show counter regular mailbox on app bar thread view

This commit is contained in:
dab246
2021-10-14 13:59:17 +07:00
committed by Dat H. Pham
parent f198f4ada0
commit eb8103d98f
5 changed files with 73 additions and 51 deletions
@@ -343,7 +343,7 @@ class EmailController extends BaseController {
bool canComposeEmail() => mailboxDashBoardController.sessionCurrent != null bool canComposeEmail() => mailboxDashBoardController.sessionCurrent != null
&& mailboxDashBoardController.userProfile.value != null && mailboxDashBoardController.userProfile.value != null
&& mailboxDashBoardController.mapMailboxId.containsKey(PresentationMailbox.roleOutbox) && mailboxDashBoardController.mapDefaultMailboxId.containsKey(PresentationMailbox.roleOutbox)
&& mailboxDashBoardController.selectedEmail.value != null; && mailboxDashBoardController.selectedEmail.value != null;
void backToThreadView() { void backToThreadView() {
@@ -362,7 +362,7 @@ class EmailController extends BaseController {
mailboxRole: mailboxDashBoardController.selectedMailbox.value?.role, mailboxRole: mailboxDashBoardController.selectedMailbox.value?.role,
session: mailboxDashBoardController.sessionCurrent!, session: mailboxDashBoardController.sessionCurrent!,
userProfile: mailboxDashBoardController.userProfile.value!, userProfile: mailboxDashBoardController.userProfile.value!,
mapMailboxId: mailboxDashBoardController.mapMailboxId)); mapMailboxId: mailboxDashBoardController.mapDefaultMailboxId));
} }
} }
} }
@@ -84,7 +84,7 @@ class MailboxController extends BaseController {
if (success is GetAllMailboxSuccess) { if (success is GetAllMailboxSuccess) {
currentMailboxState = success.currentMailboxState; currentMailboxState = success.currentMailboxState;
defaultMailboxList.value = success.defaultMailboxList; defaultMailboxList.value = success.defaultMailboxList;
_setUpMapMailboxIdDefault(success.defaultMailboxList); _setUpMapMailboxIdDefault(success.defaultMailboxList, success.folderMailboxList);
_buildTree(success.folderMailboxList); _buildTree(success.folderMailboxList);
} }
}); });
@@ -131,32 +131,44 @@ class MailboxController extends BaseController {
folderMailboxNodeList.value = newMailboxNodeList; folderMailboxNodeList.value = newMailboxNodeList;
} }
void _setUpMapMailboxIdDefault(List<PresentationMailbox> defaultMailboxList) { void _setUpMapMailboxIdDefault(List<PresentationMailbox> defaultMailboxList, List<PresentationMailbox> folderMailboxList) {
final mapMailboxId = Map<Role, MailboxId>.fromIterable( final mapDefaultMailboxId = Map<Role, MailboxId>.fromIterable(
defaultMailboxList, defaultMailboxList,
key: (presentationMailbox) => presentationMailbox.role!, key: (presentationMailbox) => presentationMailbox.role!,
value: (presentationMailbox) => presentationMailbox.id); value: (presentationMailbox) => presentationMailbox.id);
final mapMailboxDefault = Map<Role, PresentationMailbox>.fromIterable( final mapDefaultMailbox = Map<Role, PresentationMailbox>.fromIterable(
defaultMailboxList, defaultMailboxList,
key: (presentationMailbox) => presentationMailbox.role!, key: (presentationMailbox) => presentationMailbox.role!,
value: (presentationMailbox) => presentationMailbox); value: (presentationMailbox) => presentationMailbox);
mailboxDashBoardController.setMapMailboxId(mapMailboxId); final mapFolderMailbox = Map<MailboxId, PresentationMailbox>.fromIterable(
folderMailboxList,
key: (presentationMailbox) => presentationMailbox.id,
value: (presentationMailbox) => presentationMailbox);
mailboxDashBoardController.setMapDefaultMailboxId(mapDefaultMailboxId);
var mailboxCurrent = mailboxDashBoardController.selectedMailbox.value; var mailboxCurrent = mailboxDashBoardController.selectedMailbox.value;
if (mailboxCurrent != null) { if (mailboxCurrent != null) {
if (mapMailboxDefault.containsKey(mailboxCurrent.role)) { if (mailboxCurrent.hasRole()) {
mailboxDashBoardController.setNewFirstSelectedMailbox(mapMailboxDefault[mailboxCurrent.role]); mailboxDashBoardController.setNewFirstSelectedMailbox(mapDefaultMailbox.containsKey(mailboxCurrent.role)
? mapDefaultMailbox[mailboxCurrent.role]
: mailboxCurrent);
} else { } else {
mailboxDashBoardController.setNewFirstSelectedMailbox(mailboxCurrent); mailboxDashBoardController.setNewFirstSelectedMailbox(mapFolderMailbox.containsKey(mailboxCurrent.id)
? mapFolderMailbox[mailboxCurrent.id]
: mailboxCurrent);
} }
} else { } else {
if (mapMailboxDefault.containsKey(PresentationMailbox.roleInbox)) { if (mapDefaultMailbox.containsKey(PresentationMailbox.roleInbox)) {
mailboxDashBoardController.setNewFirstSelectedMailbox(mapMailboxDefault[PresentationMailbox.roleInbox]); mailboxDashBoardController.setNewFirstSelectedMailbox(mapDefaultMailbox[PresentationMailbox.roleInbox]);
} else { } else {
mailboxDashBoardController.setNewFirstSelectedMailbox(mapMailboxDefault.values.first); final allMailbox = defaultMailboxList + folderMailboxList;
if (allMailbox.isNotEmpty) {
mailboxDashBoardController.setNewFirstSelectedMailbox(allMailbox.first);
}
} }
} }
} }
@@ -26,7 +26,7 @@ class MailboxDashBoardController extends BaseController {
final userProfile = Rxn<UserProfile>(); final userProfile = Rxn<UserProfile>();
Session? sessionCurrent; Session? sessionCurrent;
Map<Role, MailboxId> mapMailboxId = Map(); Map<Role, MailboxId> mapDefaultMailboxId = Map();
MailboxDashBoardController(this._getUserProfileInteractor, this._appToast); MailboxDashBoardController(this._getUserProfileInteractor, this._appToast);
@@ -91,8 +91,8 @@ class MailboxDashBoardController extends BaseController {
}); });
} }
void setMapMailboxId(Map<Role, MailboxId> newMapMailboxId) { void setMapDefaultMailboxId(Map<Role, MailboxId> newMapMailboxId) {
mapMailboxId = newMapMailboxId; mapDefaultMailboxId = newMapMailboxId;
} }
void setSelectedMailbox(PresentationMailbox? newPresentationMailbox) { void setSelectedMailbox(PresentationMailbox? newPresentationMailbox) {
@@ -473,7 +473,7 @@ class ThreadController extends BaseController {
bool canComposeEmail() => mailboxDashBoardController.sessionCurrent != null bool canComposeEmail() => mailboxDashBoardController.sessionCurrent != null
&& mailboxDashBoardController.userProfile.value != null && mailboxDashBoardController.userProfile.value != null
&& mailboxDashBoardController.mapMailboxId.containsKey(PresentationMailbox.roleOutbox); && mailboxDashBoardController.mapDefaultMailboxId.containsKey(PresentationMailbox.roleOutbox);
void openMailboxLeftMenu() { void openMailboxLeftMenu() {
mailboxDashBoardController.openDrawer(); mailboxDashBoardController.openDrawer();
@@ -490,7 +490,7 @@ class ThreadController extends BaseController {
arguments: ComposerArguments( arguments: ComposerArguments(
session: mailboxDashBoardController.sessionCurrent!, session: mailboxDashBoardController.sessionCurrent!,
userProfile: mailboxDashBoardController.userProfile.value!, userProfile: mailboxDashBoardController.userProfile.value!,
mapMailboxId: mailboxDashBoardController.mapMailboxId)); mapMailboxId: mailboxDashBoardController.mapDefaultMailboxId));
} }
} }
} }
@@ -94,43 +94,33 @@ class AppBarThreadWidgetBuilder {
Widget _buildContentCenterAppBar() { Widget _buildContentCenterAppBar() {
return Row( return Row(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.center,
children: [ children: [
(_presentationMailbox != null && _presentationMailbox!.hasRole()) GestureDetector(
? GestureDetector( onTap: () => {
onTap: () => { if (_onOpenListMailboxActionClick != null) {
if (_onOpenListMailboxActionClick != null) { _onOpenListMailboxActionClick!()
_onOpenListMailboxActionClick!() }},
}}, child: Padding(
child: Padding( padding: EdgeInsets.only(left: 16, right: 8),
padding: EdgeInsets.only(left: 16), child: Container(
child: Text( padding: EdgeInsets.zero,
'${_presentationMailbox?.name != null ? _presentationMailbox?.name?.name : ''}', margin: EdgeInsets.zero,
maxLines: 1, constraints: BoxConstraints(maxWidth: _getMaxWidthAppBarTitle()),
overflow: TextOverflow.ellipsis, child: Text(
style: TextStyle(fontSize: 22, color: AppColor.titleAppBarMailboxListMail, fontWeight: FontWeight.w500)))) '${ _presentationMailbox?.name?.name ?? ''}',
: Expanded(child: GestureDetector( maxLines: 1,
onTap: () => { overflow: TextOverflow.ellipsis,
if (_onOpenListMailboxActionClick != null) { style: TextStyle(fontSize: 22, color: AppColor.titleAppBarMailboxListMail, fontWeight: FontWeight.w500))
_onOpenListMailboxActionClick!() ))),
}}, if(_presentationMailbox?.getCountUnReadEmails().isNotEmpty == true)
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)
Container( Container(
margin: EdgeInsets.only(left: 9), margin: EdgeInsets.zero,
padding: EdgeInsets.only(left: 8, right: 8, top: 2.5, bottom: 2.5), padding: EdgeInsets.only(left: 8, right: 8, top: 2.5, bottom: 2.5),
decoration:BoxDecoration( decoration:BoxDecoration(
borderRadius: BorderRadius.circular(8), borderRadius: BorderRadius.circular(8),
color: AppColor.backgroundCounterMailboxColor), color: AppColor.backgroundCounterMailboxColor),
child: Text( child: Text(
'${_presentationMailbox!.getCountUnReadEmails()} ${AppLocalizations.of(_context).unread_email_notification}', '${_presentationMailbox?.getCountUnReadEmails() ?? ''} ${AppLocalizations.of(_context).unread_email_notification}',
maxLines: 1, maxLines: 1,
overflow: TextOverflow.ellipsis, overflow: TextOverflow.ellipsis,
style: TextStyle(fontSize: 10, color: AppColor.counterMailboxColor, fontWeight: FontWeight.w500), 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;
}
} }