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
@@ -29,6 +29,7 @@ abstract class ThreadRepository {
Properties? propertiesCreated,
Properties? propertiesUpdated,
bool getLatestChanges = true,
bool skipCache = false,
}
);
@@ -1,20 +1,24 @@
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';
class LoadingMarkAsMultipleEmailReadAll extends UIState {}
class MarkAsMultipleEmailReadAllSuccess extends UIState {
final int countMarkAsReadSuccess;
final List<EmailId> emailIds;
final ReadActions readActions;
final MailboxId? mailboxId;
MarkAsMultipleEmailReadAllSuccess(
this.countMarkAsReadSuccess,
this.readActions,
this.emailIds,
this.readActions,
this.mailboxId,
);
@override
List<Object?> get props => [countMarkAsReadSuccess, readActions];
List<Object?> get props => [emailIds, readActions, mailboxId];
}
class MarkAsMultipleEmailReadAllFailure extends FeatureFailure {
@@ -27,16 +31,18 @@ class MarkAsMultipleEmailReadAllFailure extends FeatureFailure {
}
class MarkAsMultipleEmailReadHasSomeEmailFailure extends UIState {
final int countMarkAsReadSuccess;
final List<EmailId> successEmailIds;
final ReadActions readActions;
final MailboxId? mailboxId;
MarkAsMultipleEmailReadHasSomeEmailFailure(
this.countMarkAsReadSuccess,
this.successEmailIds,
this.readActions,
this.mailboxId,
);
@override
List<Object?> get props => [countMarkAsReadSuccess, readActions];
List<Object?> get props => [successEmailIds, readActions, mailboxId];
}
class MarkAsMultipleEmailReadFailure extends FeatureFailure {
@@ -1,5 +1,6 @@
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 LoadingMarkAsStarMultipleEmailAll extends UIState {}
@@ -7,14 +8,16 @@ class LoadingMarkAsStarMultipleEmailAll extends UIState {}
class MarkAsStarMultipleEmailAllSuccess extends UIState {
final int countMarkStarSuccess;
final MarkStarAction markStarAction;
final List<EmailId> emailIds;
MarkAsStarMultipleEmailAllSuccess(
this.countMarkStarSuccess,
this.markStarAction,
this.emailIds,
);
@override
List<Object?> get props => [countMarkStarSuccess, markStarAction];
List<Object?> get props => [countMarkStarSuccess, markStarAction, emailIds];
}
class MarkAsStarMultipleEmailAllFailure extends FeatureFailure {
@@ -29,14 +32,16 @@ class MarkAsStarMultipleEmailAllFailure extends FeatureFailure {
class MarkAsStarMultipleEmailHasSomeEmailFailure extends UIState {
final int countMarkStarSuccess;
final MarkStarAction markStarAction;
final List<EmailId> successEmailIds;
MarkAsStarMultipleEmailHasSomeEmailFailure(
this.countMarkStarSuccess,
this.markStarAction,
this.successEmailIds,
);
@override
List<Object?> get props => [countMarkStarSuccess, markStarAction];
List<Object?> get props => [countMarkStarSuccess, markStarAction, successEmailIds];
}
class MarkAsStarMultipleEmailFailure extends FeatureFailure {
@@ -27,6 +27,7 @@ class GetEmailsInMailboxInteractor {
Properties? propertiesCreated,
Properties? propertiesUpdated,
bool getLatestChanges = true,
bool skipCache = false,
}
) async* {
try {
@@ -41,7 +42,8 @@ class GetEmailsInMailboxInteractor {
emailFilter: emailFilter,
propertiesCreated: propertiesCreated,
propertiesUpdated: propertiesUpdated,
getLatestChanges: getLatestChanges)
getLatestChanges: getLatestChanges,
skipCache: skipCache)
.map((emailResponse) => _toGetEmailState(
emailResponse: emailResponse,
currentMailboxId: emailFilter?.mailboxId
@@ -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/model.dart';
import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart';
import 'package:tmail_ui_user/features/thread/domain/state/mark_as_multiple_email_read_state.dart';
@@ -17,7 +18,8 @@ class MarkAsMultipleEmailReadInteractor {
Session session,
AccountId accountId,
List<EmailId> emailIds,
ReadActions readAction
ReadActions readAction,
MailboxId? mailboxId,
) async* {
try {
yield Right(LoadingMarkAsMultipleEmailReadAll());
@@ -31,15 +33,17 @@ class MarkAsMultipleEmailReadInteractor {
if (emailIds.length == result.emailIdsSuccess.length) {
yield Right(MarkAsMultipleEmailReadAllSuccess(
result.emailIdsSuccess.length,
readAction,
result.emailIdsSuccess,
readAction,
mailboxId,
));
} else if (result.emailIdsSuccess.isEmpty) {
yield Left(MarkAsMultipleEmailReadAllFailure(readAction));
} else {
yield Right(MarkAsMultipleEmailReadHasSomeEmailFailure(
result.emailIdsSuccess.length,
readAction,
result.emailIdsSuccess,
readAction,
mailboxId,
));
}
} catch (e) {
@@ -26,15 +26,17 @@ class MarkAsStarMultipleEmailInteractor {
if (emailIds.length == result.emailIdsSuccess.length) {
yield Right(MarkAsStarMultipleEmailAllSuccess(
emailIds.length,
markStarAction,
emailIds.length,
markStarAction,
result.emailIdsSuccess,
));
} else if (result.emailIdsSuccess.isEmpty) {
yield Left(MarkAsStarMultipleEmailAllFailure(markStarAction));
} else {
yield Right(MarkAsStarMultipleEmailHasSomeEmailFailure(
result.emailIdsSuccess.length,
markStarAction,
result.emailIdsSuccess.length,
markStarAction,
result.emailIdsSuccess,
));
}
} catch (e) {