TF-3385 Fix mark as read not work properly
This commit is contained in:
@@ -673,7 +673,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
|
|||||||
if (_currentEmailId != null) {
|
if (_currentEmailId != null) {
|
||||||
mailboxDashBoardController.updateEmailFlagByEmailIds(
|
mailboxDashBoardController.updateEmailFlagByEmailIds(
|
||||||
[_currentEmailId!],
|
[_currentEmailId!],
|
||||||
readAction: ReadActions.markAsRead,
|
readAction: readActions,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (readActions == ReadActions.markAsUnread) {
|
if (readActions == ReadActions.markAsUnread) {
|
||||||
|
|||||||
@@ -281,25 +281,29 @@ class MailboxController extends BaseMailboxController
|
|||||||
: null,
|
: null,
|
||||||
);
|
);
|
||||||
} else if (reactionState is MarkAsMultipleEmailReadAllSuccess) {
|
} else if (reactionState is MarkAsMultipleEmailReadAllSuccess) {
|
||||||
_handleMarkEmailsAsReadOrUnread(
|
for (var emailIdsByMailboxId in reactionState.markSuccessEmailIdsByMailboxId.entries) {
|
||||||
affectedMailboxId: reactionState.mailboxId,
|
_handleMarkEmailsAsReadOrUnread(
|
||||||
readCount: reactionState.readActions == ReadActions.markAsRead
|
affectedMailboxId: emailIdsByMailboxId.key,
|
||||||
? reactionState.emailIds.length
|
readCount: reactionState.readActions == ReadActions.markAsRead
|
||||||
: null,
|
? emailIdsByMailboxId.value.length
|
||||||
unreadCount: reactionState.readActions == ReadActions.markAsUnread
|
: null,
|
||||||
? reactionState.emailIds.length
|
unreadCount: reactionState.readActions == ReadActions.markAsUnread
|
||||||
: null,
|
? emailIdsByMailboxId.value.length
|
||||||
);
|
: null,
|
||||||
|
);
|
||||||
|
}
|
||||||
} else if (reactionState is MarkAsMultipleEmailReadHasSomeEmailFailure) {
|
} else if (reactionState is MarkAsMultipleEmailReadHasSomeEmailFailure) {
|
||||||
_handleMarkEmailsAsReadOrUnread(
|
for (var emailIdsByMailboxId in reactionState.markSuccessEmailIdsByMailboxId.entries) {
|
||||||
affectedMailboxId: reactionState.mailboxId,
|
_handleMarkEmailsAsReadOrUnread(
|
||||||
readCount: reactionState.readActions == ReadActions.markAsRead
|
affectedMailboxId: emailIdsByMailboxId.key,
|
||||||
? reactionState.successEmailIds.length
|
readCount: reactionState.readActions == ReadActions.markAsRead
|
||||||
: null,
|
? emailIdsByMailboxId.value.length
|
||||||
unreadCount: reactionState.readActions == ReadActions.markAsUnread
|
: null,
|
||||||
? reactionState.successEmailIds.length
|
unreadCount: reactionState.readActions == ReadActions.markAsUnread
|
||||||
: null,
|
? emailIdsByMailboxId.value.length
|
||||||
);
|
: null,
|
||||||
|
);
|
||||||
|
}
|
||||||
} else if (reactionState is MarkAsMailboxReadAllSuccess) {
|
} else if (reactionState is MarkAsMailboxReadAllSuccess) {
|
||||||
_handleMarkMailboxAsRead(
|
_handleMarkMailboxAsRead(
|
||||||
affectedMailboxId: reactionState.mailboxId,
|
affectedMailboxId: reactionState.mailboxId,
|
||||||
|
|||||||
+1
-1
@@ -967,7 +967,7 @@ class MailboxDashBoardController extends ReloadableController
|
|||||||
accountId.value!,
|
accountId.value!,
|
||||||
listEmailNeedMarkAsRead.listEmailIds,
|
listEmailNeedMarkAsRead.listEmailIds,
|
||||||
readActions,
|
readActions,
|
||||||
listPresentationEmail.firstOrNull?.mailboxContain?.mailboxId,
|
listEmailNeedMarkAsRead.emailIdsByMailboxId,
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,16 +9,16 @@ class LoadingMarkAsMultipleEmailReadAll extends UIState {}
|
|||||||
class MarkAsMultipleEmailReadAllSuccess extends UIState {
|
class MarkAsMultipleEmailReadAllSuccess extends UIState {
|
||||||
final List<EmailId> emailIds;
|
final List<EmailId> emailIds;
|
||||||
final ReadActions readActions;
|
final ReadActions readActions;
|
||||||
final MailboxId? mailboxId;
|
final Map<MailboxId, List<EmailId>> markSuccessEmailIdsByMailboxId;
|
||||||
|
|
||||||
MarkAsMultipleEmailReadAllSuccess(
|
MarkAsMultipleEmailReadAllSuccess(
|
||||||
this.emailIds,
|
this.emailIds,
|
||||||
this.readActions,
|
this.readActions,
|
||||||
this.mailboxId,
|
this.markSuccessEmailIdsByMailboxId,
|
||||||
);
|
);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
List<Object?> get props => [emailIds, readActions, mailboxId];
|
List<Object?> get props => [emailIds, readActions, markSuccessEmailIdsByMailboxId];
|
||||||
}
|
}
|
||||||
|
|
||||||
class MarkAsMultipleEmailReadAllFailure extends FeatureFailure {
|
class MarkAsMultipleEmailReadAllFailure extends FeatureFailure {
|
||||||
@@ -33,16 +33,16 @@ class MarkAsMultipleEmailReadAllFailure extends FeatureFailure {
|
|||||||
class MarkAsMultipleEmailReadHasSomeEmailFailure extends UIState {
|
class MarkAsMultipleEmailReadHasSomeEmailFailure extends UIState {
|
||||||
final List<EmailId> successEmailIds;
|
final List<EmailId> successEmailIds;
|
||||||
final ReadActions readActions;
|
final ReadActions readActions;
|
||||||
final MailboxId? mailboxId;
|
final Map<MailboxId, List<EmailId>> markSuccessEmailIdsByMailboxId;
|
||||||
|
|
||||||
MarkAsMultipleEmailReadHasSomeEmailFailure(
|
MarkAsMultipleEmailReadHasSomeEmailFailure(
|
||||||
this.successEmailIds,
|
this.successEmailIds,
|
||||||
this.readActions,
|
this.readActions,
|
||||||
this.mailboxId,
|
this.markSuccessEmailIdsByMailboxId,
|
||||||
);
|
);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
List<Object?> get props => [successEmailIds, readActions, mailboxId];
|
List<Object?> get props => [successEmailIds, readActions, markSuccessEmailIdsByMailboxId];
|
||||||
}
|
}
|
||||||
|
|
||||||
class MarkAsMultipleEmailReadFailure extends FeatureFailure {
|
class MarkAsMultipleEmailReadFailure extends FeatureFailure {
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ class MarkAsMultipleEmailReadInteractor {
|
|||||||
AccountId accountId,
|
AccountId accountId,
|
||||||
List<EmailId> emailIds,
|
List<EmailId> emailIds,
|
||||||
ReadActions readAction,
|
ReadActions readAction,
|
||||||
MailboxId? mailboxId,
|
Map<MailboxId, List<EmailId>> emailIdsByMailboxId,
|
||||||
) async* {
|
) async* {
|
||||||
try {
|
try {
|
||||||
yield Right(LoadingMarkAsMultipleEmailReadAll());
|
yield Right(LoadingMarkAsMultipleEmailReadAll());
|
||||||
@@ -30,12 +30,18 @@ class MarkAsMultipleEmailReadInteractor {
|
|||||||
emailIds,
|
emailIds,
|
||||||
readAction,
|
readAction,
|
||||||
);
|
);
|
||||||
|
final markSuccessEmailIdsByMailboxId = emailIdsByMailboxId.map(
|
||||||
|
(key, value) => MapEntry(
|
||||||
|
key,
|
||||||
|
value.where(result.emailIdsSuccess.contains).toList(),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
if (emailIds.length == result.emailIdsSuccess.length) {
|
if (emailIds.length == result.emailIdsSuccess.length) {
|
||||||
yield Right(MarkAsMultipleEmailReadAllSuccess(
|
yield Right(MarkAsMultipleEmailReadAllSuccess(
|
||||||
result.emailIdsSuccess,
|
result.emailIdsSuccess,
|
||||||
readAction,
|
readAction,
|
||||||
mailboxId,
|
markSuccessEmailIdsByMailboxId,
|
||||||
));
|
));
|
||||||
} else if (result.emailIdsSuccess.isEmpty) {
|
} else if (result.emailIdsSuccess.isEmpty) {
|
||||||
yield Left(MarkAsMultipleEmailReadAllFailure(readAction));
|
yield Left(MarkAsMultipleEmailReadAllFailure(readAction));
|
||||||
@@ -43,7 +49,7 @@ class MarkAsMultipleEmailReadInteractor {
|
|||||||
yield Right(MarkAsMultipleEmailReadHasSomeEmailFailure(
|
yield Right(MarkAsMultipleEmailReadHasSomeEmailFailure(
|
||||||
result.emailIdsSuccess,
|
result.emailIdsSuccess,
|
||||||
readAction,
|
readAction,
|
||||||
mailboxId,
|
markSuccessEmailIdsByMailboxId,
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
|||||||
@@ -22,6 +22,17 @@ extension ListPresentationEmailExtension on List<PresentationEmail> {
|
|||||||
|
|
||||||
List<EmailId> get listEmailIds => map((email) => email.id).whereNotNull().toList();
|
List<EmailId> get listEmailIds => map((email) => email.id).whereNotNull().toList();
|
||||||
|
|
||||||
|
Map<MailboxId, List<EmailId>> get emailIdsByMailboxId => Map.from(
|
||||||
|
where((email) => email.mailboxContain?.mailboxId != null && email.id != null)
|
||||||
|
.fold(<MailboxId, List<EmailId>>{}, (combine, email) {
|
||||||
|
final mailboxId = email.mailboxContain!.mailboxId!;
|
||||||
|
combine[mailboxId] ??= [];
|
||||||
|
combine[mailboxId]!.add(email.id!);
|
||||||
|
return combine;
|
||||||
|
}
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
bool isAllCanDeletePermanently(Map<MailboxId, PresentationMailbox> mapMailbox) {
|
bool isAllCanDeletePermanently(Map<MailboxId, PresentationMailbox> mapMailbox) {
|
||||||
final listMailboxContain = map((email) => email.findMailboxContain(mapMailbox))
|
final listMailboxContain = map((email) => email.findMailboxContain(mapMailbox))
|
||||||
.whereType<PresentationMailbox>()
|
.whereType<PresentationMailbox>()
|
||||||
|
|||||||
Reference in New Issue
Block a user