TF-78 Update state email in threads and count unread of current mailbox when back from EmailView
This commit is contained in:
@@ -8,20 +8,27 @@ import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
||||
import 'package:model/model.dart';
|
||||
import 'package:tmail_ui_user/features/base/base_controller.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/state/get_email_content_state.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/state/mark_as_email_read_state.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/usecases/get_email_content_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/usecases/mark_as_email_read_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/model/composer_arguments.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/mailbox_dashboard_controller.dart';
|
||||
import 'package:tmail_ui_user/main/actions/app_action.dart';
|
||||
import 'package:tmail_ui_user/main/actions/email_action.dart';
|
||||
import 'package:tmail_ui_user/main/routes/app_routes.dart';
|
||||
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
||||
|
||||
class EmailController extends BaseController {
|
||||
|
||||
final mailboxDashBoardController = Get.find<MailboxDashBoardController>();
|
||||
final responsiveUtils = Get.find<ResponsiveUtils>();
|
||||
|
||||
final GetEmailContentInteractor _getEmailContentInteractor;
|
||||
final MarkAsEmailReadInteractor _markAsEmailReadInteractor;
|
||||
|
||||
final emailAddressExpandMode = ExpandMode.COLLAPSE.obs;
|
||||
EmailContent? emailContent;
|
||||
AppAction? emailActionCurrent;
|
||||
|
||||
EmailController(this._getEmailContentInteractor, this._markAsEmailReadInteractor);
|
||||
|
||||
@@ -30,10 +37,13 @@ class EmailController extends BaseController {
|
||||
super.onReady();
|
||||
mailboxDashBoardController.selectedEmail.listen((presentationEmail) {
|
||||
toggleDisplayEmailAddressAction(expandMode: ExpandMode.COLLAPSE);
|
||||
emailActionCurrent = null;
|
||||
final accountId = mailboxDashBoardController.accountId.value;
|
||||
if (accountId != null && presentationEmail != null) {
|
||||
_getEmailContentAction(accountId, presentationEmail.id);
|
||||
markAsEmailRead(unread: false);
|
||||
if (presentationEmail.isUnReadEmail()) {
|
||||
markAsEmailRead(unread: false);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -73,8 +83,23 @@ class EmailController extends BaseController {
|
||||
void markAsEmailRead({required bool unread}) async {
|
||||
final accountId = mailboxDashBoardController.accountId.value;
|
||||
final presentationEmail = mailboxDashBoardController.selectedEmail.value;
|
||||
if (accountId != null && presentationEmail != null) {
|
||||
_markAsEmailReadInteractor.execute(accountId, presentationEmail.id, unread);
|
||||
final mailboxCurrent = mailboxDashBoardController.selectedMailbox.value;
|
||||
if (accountId != null && presentationEmail != null && mailboxCurrent != null) {
|
||||
_markAsEmailReadInteractor.execute(accountId, presentationEmail.id, unread)
|
||||
.then((result) => result
|
||||
.map((success) {
|
||||
if (success is MarkAsEmailReadSuccess) {
|
||||
emailActionCurrent = MarkAsEmailReadAction(presentationEmail.id, mailboxCurrent);
|
||||
_updateMailboxDashBoardActionForDesktop(emailActionCurrent);
|
||||
}
|
||||
})
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
void _updateMailboxDashBoardActionForDesktop(AppAction? appAction) {
|
||||
if (Get.context != null && responsiveUtils.isDesktop(Get.context!)) {
|
||||
mailboxDashBoardController.setMailboxDashBoardAction(appAction);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -84,7 +109,7 @@ class EmailController extends BaseController {
|
||||
&& mailboxDashBoardController.selectedEmail.value != null;
|
||||
|
||||
void goToThreadView(BuildContext context) {
|
||||
Get.back();
|
||||
popBack(result: emailActionCurrent);
|
||||
}
|
||||
|
||||
void pressEmailAction(EmailActionType emailActionType) {
|
||||
|
||||
@@ -22,25 +22,29 @@ class EmailView extends GetWidget {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
resizeToAvoidBottomInset: false,
|
||||
backgroundColor: AppColor.primaryLightColor,
|
||||
body: SafeArea(
|
||||
right: false,
|
||||
left: false,
|
||||
child: Container(
|
||||
alignment: Alignment.center,
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: [
|
||||
_buildAppBar(context),
|
||||
Expanded(child: _buildEmailContent(context)),
|
||||
_buildBottomBar(context),
|
||||
])
|
||||
)
|
||||
),
|
||||
);
|
||||
return WillPopScope(
|
||||
child: Scaffold(
|
||||
resizeToAvoidBottomInset: false,
|
||||
backgroundColor: AppColor.primaryLightColor,
|
||||
body: SafeArea(
|
||||
right: false,
|
||||
left: false,
|
||||
child: Container(
|
||||
alignment: Alignment.center,
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: [
|
||||
_buildAppBar(context),
|
||||
Expanded(child: _buildEmailContent(context)),
|
||||
_buildBottomBar(context),
|
||||
])
|
||||
)
|
||||
)),
|
||||
onWillPop: () async {
|
||||
emailController.goToThreadView(context);
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
Widget _buildAppBar(BuildContext context) {
|
||||
|
||||
Reference in New Issue
Block a user