TF-3724 Thread Detail add unread indicator collapsed email
TF-3724 Thread Detail Optimize mark read/star call TF-3724 Thread Detail Organize markCollapsedEmailReadSuccess TF-3724 Thread Detail show toast on mark read fail TF-3724 Thread Detail Update sender, recipient and preview style TF-3724 Thread Detail Revert ThemeUtils changes
This commit is contained in:
@@ -92,6 +92,7 @@ extension GetThreadDetailEmailViews on ThreadDetailController {
|
||||
EmailActionType.deletePermanently,
|
||||
],
|
||||
],
|
||||
emailIsRead: presentationEmail.hasRead,
|
||||
),
|
||||
openEmailAddressDetailAction: (_, emailAddress) {
|
||||
openEmailAddressDetailAction(emailAddress);
|
||||
|
||||
+36
-1
@@ -1,3 +1,5 @@
|
||||
import 'package:jmap_dart_client/jmap/mail/email/keyword_identifier.dart';
|
||||
import 'package:model/email/email_in_thread_status.dart';
|
||||
import 'package:model/email/read_actions.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/state/mark_as_email_read_state.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/update_current_emails_flags_extension.dart';
|
||||
@@ -7,12 +9,45 @@ import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
||||
|
||||
extension MarkCollapsedEmailReadSuccess on ThreadDetailController {
|
||||
void markCollapsedEmailReadSuccess(MarkAsEmailReadSuccess success) {
|
||||
_updateEmailListInMailboxDashboardController(success);
|
||||
_updateEmailKeywordInThreadDetailController(success);
|
||||
_updateEmailCollapsedStatusInThreadDetailController(success);
|
||||
}
|
||||
|
||||
void _updateEmailListInMailboxDashboardController(
|
||||
MarkAsEmailReadSuccess success,
|
||||
) {
|
||||
mailboxDashBoardController.updateEmailFlagByEmailIds(
|
||||
[success.emailId],
|
||||
readAction: success.readActions,
|
||||
);
|
||||
if (success.readActions == ReadActions.markAsUnread) {
|
||||
}
|
||||
|
||||
void _updateEmailKeywordInThreadDetailController(
|
||||
MarkAsEmailReadSuccess success,
|
||||
) {
|
||||
if (success.readActions == ReadActions.markAsRead) {
|
||||
emailIdsPresentation[success.emailId]
|
||||
?.keywords
|
||||
?[KeyWordIdentifier.emailSeen] = true;
|
||||
} else {
|
||||
emailIdsPresentation[success.emailId]
|
||||
?.keywords?.remove(KeyWordIdentifier.emailSeen);
|
||||
}
|
||||
}
|
||||
|
||||
void _updateEmailCollapsedStatusInThreadDetailController(
|
||||
MarkAsEmailReadSuccess success,
|
||||
) {
|
||||
if (success.readActions == ReadActions.markAsRead) return;
|
||||
if (emailIdsPresentation.length == 1) {
|
||||
closeThreadDetailAction(currentContext);
|
||||
} else {
|
||||
emailIdsPresentation[success.emailId] = emailIdsPresentation
|
||||
[success.emailId]
|
||||
?.copyWith(
|
||||
emailInThreadStatus: EmailInThreadStatus.collapsed,
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
+6
-3
@@ -83,7 +83,7 @@ extension ThreadDetailOnEmailActionClick on ThreadDetailController {
|
||||
}
|
||||
|
||||
void _markRead(PresentationEmail presentationEmail) {
|
||||
if (session == null || accountId == null) return;
|
||||
if (session == null || accountId == null || presentationEmail.hasRead) return;
|
||||
|
||||
consumeState(emailActionReactor.markAsEmailRead(
|
||||
session!,
|
||||
@@ -94,7 +94,7 @@ extension ThreadDetailOnEmailActionClick on ThreadDetailController {
|
||||
}
|
||||
|
||||
void _unRead(PresentationEmail presentationEmail) {
|
||||
if (session == null || accountId == null) return;
|
||||
if (session == null || accountId == null || !presentationEmail.hasRead) return;
|
||||
|
||||
consumeState(emailActionReactor.markAsEmailRead(
|
||||
session!,
|
||||
@@ -108,7 +108,10 @@ extension ThreadDetailOnEmailActionClick on ThreadDetailController {
|
||||
PresentationEmail presentationEmail,
|
||||
MarkStarAction markStarAction,
|
||||
) {
|
||||
if (session == null || accountId == null) return;
|
||||
if (session == null ||
|
||||
accountId == null ||
|
||||
(presentationEmail.hasStarred && markStarAction == MarkStarAction.markStar) ||
|
||||
(!presentationEmail.hasStarred && markStarAction == MarkStarAction.unMarkStar)) return;
|
||||
|
||||
consumeState(emailActionReactor.markAsStarEmail(
|
||||
session!,
|
||||
|
||||
+6
@@ -1,9 +1,11 @@
|
||||
import 'package:get/get.dart';
|
||||
import 'package:model/email/email_action_type.dart';
|
||||
import 'package:model/email/presentation_email.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/bindings/email_bindings.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/controller/single_email_controller.dart';
|
||||
import 'package:model/email/email_in_thread_status.dart';
|
||||
import 'package:tmail_ui_user/features/thread_detail/presentation/extension/focus_thread_detail_expanded_email.dart';
|
||||
import 'package:tmail_ui_user/features/thread_detail/presentation/extension/thread_detail_on_email_action_click.dart';
|
||||
import 'package:tmail_ui_user/features/thread_detail/presentation/thread_detail_controller.dart';
|
||||
|
||||
extension ToggleThreadDetailCollapeExpand on ThreadDetailController {
|
||||
@@ -27,6 +29,10 @@ extension ToggleThreadDetailCollapeExpand on ThreadDetailController {
|
||||
EmailBindings(currentEmailId: presentationEmail.id).dependencies();
|
||||
} else {
|
||||
focusExpandedEmail(emailId);
|
||||
threadDetailOnEmailActionClick(
|
||||
presentationEmail,
|
||||
EmailActionType.markAsRead,
|
||||
);
|
||||
}
|
||||
for (var key in emailIdsPresentation.keys) {
|
||||
if (emailIdsPresentation[key] == null) continue;
|
||||
|
||||
@@ -62,6 +62,7 @@ class ThreadDetailView extends GetWidget<ThreadDetailController> {
|
||||
EmailActionType.printAll,
|
||||
EmailActionType.moveToMailbox,
|
||||
],
|
||||
emailIsRead: presentationEmail.hasRead,
|
||||
),
|
||||
);
|
||||
}),
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import 'package:core/presentation/extensions/color_extension.dart';
|
||||
import 'package:core/presentation/resources/image_paths.dart';
|
||||
import 'package:core/presentation/utils/responsive_utils.dart';
|
||||
import 'package:core/presentation/utils/theme_utils.dart';
|
||||
import 'package:core/presentation/views/text/text_overflow_builder.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:model/email/presentation_email.dart';
|
||||
@@ -73,6 +74,7 @@ class ThreadDetailCollapsedEmail extends StatelessWidget {
|
||||
showRecipients: false,
|
||||
onTapAvatarActionClick: onToggleThreadDetailCollapseExpand,
|
||||
mailboxContain: mailboxContain,
|
||||
showUnreadVisualization: true,
|
||||
),
|
||||
Padding(
|
||||
padding: const EdgeInsets.all(16),
|
||||
@@ -80,7 +82,11 @@ class ThreadDetailCollapsedEmail extends StatelessWidget {
|
||||
preview,
|
||||
maxLines: 1,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
style: Theme.of(context).textTheme.bodyMedium,
|
||||
style: ThemeUtils.textStyleBodyBody1(
|
||||
fontWeight: presentationEmail.hasRead
|
||||
? FontWeight.normal
|
||||
: FontWeight.w600,
|
||||
).copyWith(height: 24),
|
||||
),
|
||||
),
|
||||
],
|
||||
|
||||
Reference in New Issue
Block a user