TF-2925 Fix change mailbox very quick when refreshing after any mail action make the message list is not showed correctly

This commit is contained in:
dab246
2024-07-19 16:04:44 +07:00
committed by Dat H. Pham
parent 76e5b01ac6
commit 71ae708939
9 changed files with 76 additions and 34 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/core/state.dart';
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
import 'package:model/email/presentation_email.dart';
class RefreshAllEmailLoading extends LoadingState {}
@@ -10,11 +11,20 @@ class GetAllEmailLoading extends LoadingState {}
class GetAllEmailSuccess extends UIState {
final List<PresentationEmail> emailList;
final State? currentEmailState;
final MailboxId? currentMailboxId;
GetAllEmailSuccess({required this.emailList, this.currentEmailState});
GetAllEmailSuccess({
required this.emailList,
this.currentEmailState,
this.currentMailboxId,
});
@override
List<Object?> get props => [emailList, currentEmailState];
List<Object?> get props => [
emailList,
currentEmailState,
currentMailboxId,
];
}
class GetAllEmailFailure extends FeatureFailure {
@@ -1,6 +1,7 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:jmap_dart_client/jmap/core/state.dart';
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
import 'package:model/email/presentation_email.dart';
class RefreshChangesAllEmailLoading extends LoadingState {}
@@ -8,11 +9,20 @@ class RefreshChangesAllEmailLoading extends LoadingState {}
class RefreshChangesAllEmailSuccess extends UIState {
final List<PresentationEmail> emailList;
final State? currentEmailState;
final MailboxId? currentMailboxId;
RefreshChangesAllEmailSuccess({required this.emailList, this.currentEmailState});
RefreshChangesAllEmailSuccess({
required this.emailList,
this.currentEmailState,
this.currentMailboxId
});
@override
List<Object?> get props => [emailList, currentEmailState];
List<Object?> get props => [
emailList,
currentEmailState,
currentMailboxId
];
}
class RefreshChangesAllEmailFailure extends FeatureFailure {
@@ -5,6 +5,7 @@ import 'package:jmap_dart_client/jmap/core/properties/properties.dart';
import 'package:jmap_dart_client/jmap/core/session/session.dart';
import 'package:jmap_dart_client/jmap/core/sort/comparator.dart';
import 'package:jmap_dart_client/jmap/core/unsigned_int.dart';
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
import 'package:tmail_ui_user/features/thread/domain/model/email_filter.dart';
import 'package:tmail_ui_user/features/thread/domain/model/email_response.dart';
import 'package:tmail_ui_user/features/thread/domain/repository/thread_repository.dart';
@@ -39,18 +40,25 @@ class GetEmailsInMailboxInteractor {
emailFilter: emailFilter,
propertiesCreated: propertiesCreated,
propertiesUpdated: propertiesUpdated)
.map(_toGetEmailState);
.map((emailResponse) => _toGetEmailState(
emailResponse: emailResponse,
currentMailboxId: emailFilter?.mailboxId
));
} catch (e) {
yield Left(GetAllEmailFailure(e));
}
}
Either<Failure, Success> _toGetEmailState(EmailsResponse emailResponse) {
Either<Failure, Success> _toGetEmailState({
required EmailsResponse emailResponse,
MailboxId? currentMailboxId,
}) {
final presentationEmailList = emailResponse.emailList
?.map((email) => email.toPresentationEmail()).toList() ?? List.empty();
return Right<Failure, Success>(GetAllEmailSuccess(
emailList: presentationEmailList,
currentEmailState: emailResponse.state));
currentEmailState: emailResponse.state,
currentMailboxId: currentMailboxId));
}
}
@@ -4,6 +4,7 @@ import 'package:jmap_dart_client/jmap/account_id.dart';
import 'package:jmap_dart_client/jmap/core/properties/properties.dart';
import 'package:jmap_dart_client/jmap/core/session/session.dart';
import 'package:jmap_dart_client/jmap/core/sort/comparator.dart';
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
import 'package:tmail_ui_user/features/thread/domain/model/email_filter.dart';
import 'package:tmail_ui_user/features/thread/domain/model/email_response.dart';
import 'package:tmail_ui_user/features/thread/domain/repository/thread_repository.dart';
@@ -39,18 +40,25 @@ class RefreshChangesEmailsInMailboxInteractor {
propertiesCreated: propertiesCreated,
propertiesUpdated: propertiesUpdated,
emailFilter: emailFilter)
.map(_toGetEmailState);
.map((emailResponse) => _toGetEmailState(
emailResponse: emailResponse,
currentMailboxId: emailFilter?.mailboxId
));
} catch (e) {
yield Left(RefreshChangesAllEmailFailure(e));
}
}
Either<Failure, Success> _toGetEmailState(EmailsResponse emailResponse) {
Either<Failure, Success> _toGetEmailState({
required EmailsResponse emailResponse,
MailboxId? currentMailboxId
}) {
final presentationEmailList = emailResponse.emailList
?.map((email) => email.toPresentationEmail()).toList() ?? List.empty();
return Right<Failure, Success>(RefreshChangesAllEmailSuccess(
emailList: presentationEmailList,
currentEmailState: emailResponse.state));
currentEmailState: emailResponse.state,
currentMailboxId: currentMailboxId));
}
}