TF-3385 Update mark as read and star

This commit is contained in:
DatDang
2024-12-31 10:12:43 +07:00
committed by Dat H. Pham
parent a94513efb4
commit 8f5168ec6b
24 changed files with 521 additions and 32 deletions
@@ -1,6 +1,7 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
import 'package:model/email/read_actions.dart';
import 'package:tmail_ui_user/features/email/domain/model/mark_read_action.dart';
@@ -8,15 +9,17 @@ class MarkAsEmailReadSuccess extends UIState {
final EmailId emailId;
final ReadActions readActions;
final MarkReadAction markReadAction;
final MailboxId? mailboxId;
MarkAsEmailReadSuccess(
this.emailId,
this.readActions,
this.markReadAction,
this.mailboxId,
);
@override
List<Object?> get props => [emailId, readActions, markReadAction];
List<Object?> get props => [emailId, readActions, markReadAction, mailboxId];
}
class MarkAsEmailReadFailure extends FeatureFailure {
@@ -1,14 +1,16 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
import 'package:model/email/mark_star_action.dart';
class MarkAsStarEmailSuccess extends UIState {
final MarkStarAction markStarAction;
final EmailId emailId;
MarkAsStarEmailSuccess(this.markStarAction);
MarkAsStarEmailSuccess(this.markStarAction, this.emailId);
@override
List<Object?> get props => [markStarAction];
List<Object?> get props => [markStarAction, emailId];
}
class MarkAsStarEmailFailure extends FeatureFailure {
@@ -4,6 +4,7 @@ import 'package:dartz/dartz.dart';
import 'package:jmap_dart_client/jmap/account_id.dart';
import 'package:jmap_dart_client/jmap/core/session/session.dart';
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
import 'package:model/email/read_actions.dart';
import 'package:tmail_ui_user/features/email/domain/model/mark_read_action.dart';
import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart';
@@ -20,6 +21,7 @@ class MarkAsEmailReadInteractor {
EmailId emailId,
ReadActions readAction,
MarkReadAction markReadAction,
MailboxId? mailboxId,
) async* {
try {
final result = await _emailRepository.markAsRead(
@@ -36,7 +38,8 @@ class MarkAsEmailReadInteractor {
result.emailIdsSuccess.first,
readAction,
markReadAction,
));
mailboxId,
));
}
} catch (e) {
yield Left(MarkAsEmailReadFailure(readAction, exception: e));
@@ -26,7 +26,7 @@ class MarkAsStarEmailInteractor {
[emailId],
markStarAction,
);
yield Right(MarkAsStarEmailSuccess(markStarAction));
yield Right(MarkAsStarEmailSuccess(markStarAction, emailId));
} catch (e) {
yield Left(MarkAsStarEmailFailure(markStarAction, exception: e));
}
@@ -96,6 +96,7 @@ import 'package:tmail_ui_user/features/home/data/exceptions/session_exceptions.d
import 'package:tmail_ui_user/features/mailbox/presentation/action/mailbox_ui_action.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_actions.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/update_current_emails_flags_extension.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/dashboard_routes.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/download/download_task_state.dart';
import 'package:tmail_ui_user/features/manage_account/domain/model/create_new_email_rule_filter_request.dart';
@@ -663,11 +664,18 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
presentationEmail.id!,
readActions,
markReadAction,
presentationEmail.mailboxContain?.mailboxId,
));
}
}
void _handleMarkAsEmailReadCompleted(ReadActions readActions) {
if (_currentEmailId != null) {
mailboxDashBoardController.updateEmailFlagByEmailIds(
[_currentEmailId!],
readAction: ReadActions.markAsRead,
);
}
if (readActions == ReadActions.markAsUnread) {
closeEmailView(context: currentContext);
}
@@ -1083,7 +1091,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
void _markAsEmailStarSuccess(MarkAsStarEmailSuccess success) {
final newEmail = currentEmail?.updateKeywords({
KeyWordIdentifier.emailFlagged: true,
KeyWordIdentifier.emailFlagged: success.markStarAction == MarkStarAction.markStar,
});
mailboxDashBoardController.setSelectedEmail(newEmail);
}