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
@@ -20,11 +20,15 @@ import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
import 'package:model/model.dart';
import 'package:tmail_ui_user/features/base/base_controller.dart';
import 'package:tmail_ui_user/features/email/domain/model/mark_read_action.dart';
import 'package:tmail_ui_user/features/email/domain/state/mark_as_email_read_state.dart';
import 'package:tmail_ui_user/features/email/domain/state/mark_as_email_star_state.dart';
import 'package:tmail_ui_user/features/email/presentation/action/email_ui_action.dart';
import 'package:tmail_ui_user/features/email/presentation/utils/email_utils.dart';
import 'package:tmail_ui_user/features/home/data/exceptions/session_exceptions.dart';
import 'package:tmail_ui_user/features/mailbox/domain/state/mark_as_mailbox_read_state.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/action/dashboard_action.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/search_controller.dart' as search;
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/search/email_sort_order_type.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/search_email_filter.dart';
@@ -45,6 +49,8 @@ import 'package:tmail_ui_user/features/thread/domain/model/search_query.dart';
import 'package:tmail_ui_user/features/thread/domain/state/get_all_email_state.dart';
import 'package:tmail_ui_user/features/thread/domain/state/get_email_by_id_state.dart';
import 'package:tmail_ui_user/features/thread/domain/state/load_more_emails_state.dart';
import 'package:tmail_ui_user/features/thread/domain/state/mark_as_multiple_email_read_state.dart';
import 'package:tmail_ui_user/features/thread/domain/state/mark_as_star_multiple_email_state.dart';
import 'package:tmail_ui_user/features/thread/domain/state/refresh_all_email_state.dart';
import 'package:tmail_ui_user/features/thread/domain/state/refresh_changes_all_email_state.dart';
import 'package:tmail_ui_user/features/thread/domain/state/search_email_state.dart';
@@ -331,6 +337,59 @@ class ThreadController extends BaseController with EmailActionController {
mailboxDashBoardController.clearEmailUIAction();
}
});
ever(mailboxDashBoardController.viewState, (viewState) {
final reactionState = viewState.getOrElse(() => UIState.idle);
if (reactionState is MarkAsEmailReadSuccess) {
mailboxDashBoardController.updateEmailFlagByEmailIds(
[reactionState.emailId],
readAction: reactionState.readActions,
);
} else if (reactionState is MarkAsMultipleEmailReadAllSuccess) {
mailboxDashBoardController.updateEmailFlagByEmailIds(
reactionState.emailIds,
readAction: reactionState.readActions,
);
} else if (reactionState is MarkAsMultipleEmailReadHasSomeEmailFailure) {
mailboxDashBoardController.updateEmailFlagByEmailIds(
reactionState.successEmailIds,
readAction: reactionState.readActions,
);
} else if (reactionState is MarkAsMailboxReadAllSuccess) {
_handleMarkEmailsAsReadByMailboxId(reactionState.mailboxId);
} else if (reactionState is MarkAsMailboxReadHasSomeEmailFailure) {
mailboxDashBoardController.updateEmailFlagByEmailIds(
reactionState.successEmailIds,
readAction: ReadActions.markAsRead,
);
} else if (reactionState is MarkAsStarEmailSuccess) {
mailboxDashBoardController.updateEmailFlagByEmailIds(
[reactionState.emailId],
markStarAction: reactionState.markStarAction,
);
} else if (reactionState is MarkAsStarMultipleEmailAllSuccess) {
mailboxDashBoardController.updateEmailFlagByEmailIds(
reactionState.emailIds,
markStarAction: reactionState.markStarAction,
);
} else if (reactionState is MarkAsStarMultipleEmailHasSomeEmailFailure) {
mailboxDashBoardController.updateEmailFlagByEmailIds(
reactionState.successEmailIds,
markStarAction: reactionState.markStarAction,
);
}
});
}
void _handleMarkEmailsAsReadByMailboxId(MailboxId mailboxId) {
if (mailboxDashBoardController.selectedMailbox.value?.id != mailboxId) return;
for (var presentationEmail in mailboxDashBoardController.emailsInCurrentMailbox) {
if (presentationEmail.mailboxContain?.id != mailboxId) continue;
presentationEmail.keywords?[KeyWordIdentifier.emailSeen] = true;
}
mailboxDashBoardController.emailsInCurrentMailbox.refresh();
}
void _registerBrowserResizeListener() {
@@ -444,7 +503,10 @@ class ThreadController extends BaseController with EmailActionController {
}
}
void _getAllEmailAction({bool getLatestChanges = true}) {
void _getAllEmailAction({
bool getLatestChanges = true,
bool skipCache = false,
}) {
log('ThreadController::_getAllEmailAction:');
if (_session != null &&_accountId != null) {
consumeState(_getEmailsInMailboxInteractor.execute(
@@ -460,6 +522,7 @@ class ThreadController extends BaseController with EmailActionController {
propertiesCreated: EmailUtils.getPropertiesForEmailGetMethod(_session!, _accountId!),
propertiesUpdated: ThreadConstants.propertiesUpdatedDefault,
getLatestChanges: getLatestChanges,
skipCache: skipCache,
));
} else {
consumeState(Stream.value(Left(GetAllEmailFailure(NotFoundSessionException()))));
@@ -508,7 +571,7 @@ class ThreadController extends BaseController with EmailActionController {
if (searchController.isSearchEmailRunning) {
_searchEmail(limit: limitEmailFetched);
} else {
_getAllEmailAction();
_getAllEmailAction(skipCache: true);
}
}
@@ -792,6 +855,9 @@ class ThreadController extends BaseController with EmailActionController {
}
void cancelSelectEmail() {
if (mailboxDashBoardController.currentSelectMode.value == SelectMode.INACTIVE) {
return;
}
final newEmailList = mailboxDashBoardController.emailsInCurrentMailbox
.map((email) => email.toSelectedEmail(selectMode: SelectMode.INACTIVE))
.toList();