TF-3698 Thread Detail Real time update
TF-3698 Thread Detail update reset RefreshThreadDetailAction position TF-3698 Thread Detail refactor initializeThreadDetailEmails TF-3698 Thread Detail refactor handleRefreshThreadDetailAction TF-3698 Thread Detail create listThreadIds in ListEmailExtension
This commit is contained in:
@@ -273,7 +273,7 @@ class ThreadRepositoryImpl extends ThreadRepository {
|
||||
}
|
||||
) async* {
|
||||
log('ThreadRepositoryImpl::refreshChanges(): $currentState');
|
||||
await _synchronizeCacheWithChanges(
|
||||
final emailChangeResponse = await _synchronizeCacheWithChanges(
|
||||
session,
|
||||
accountId,
|
||||
currentState,
|
||||
@@ -305,9 +305,9 @@ class ThreadRepositoryImpl extends ThreadRepository {
|
||||
propertiesCreated: propertiesCreated,
|
||||
);
|
||||
|
||||
yield networkEmailResponse;
|
||||
yield networkEmailResponse.copyWith(emailChangeResponse: emailChangeResponse);
|
||||
} else {
|
||||
yield newEmailResponse;
|
||||
yield newEmailResponse.copyWith(emailChangeResponse: emailChangeResponse);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -396,7 +396,7 @@ class ThreadRepositoryImpl extends ThreadRepository {
|
||||
return listEmailIdDeleted;
|
||||
}
|
||||
|
||||
Future<void> _synchronizeCacheWithChanges(
|
||||
Future<EmailChangeResponse?> _synchronizeCacheWithChanges(
|
||||
Session session,
|
||||
AccountId accountId,
|
||||
jmap.State currentState,
|
||||
@@ -452,6 +452,8 @@ class ThreadRepositoryImpl extends ThreadRepository {
|
||||
await _updateState(accountId, session.username, emailChangeResponse.newStateEmail!);
|
||||
}
|
||||
}
|
||||
|
||||
return emailChangeResponse;
|
||||
}
|
||||
|
||||
@override
|
||||
|
||||
@@ -2,16 +2,19 @@
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/state.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
||||
import 'package:tmail_ui_user/features/thread/data/model/email_change_response.dart';
|
||||
|
||||
class EmailsResponse with EquatableMixin {
|
||||
final List<Email>? emailList;
|
||||
final List<EmailId>? notFoundEmailIds;
|
||||
final State? state;
|
||||
final EmailChangeResponse? emailChangeResponse;
|
||||
|
||||
const EmailsResponse({
|
||||
this.emailList,
|
||||
this.notFoundEmailIds,
|
||||
this.state
|
||||
this.state,
|
||||
this.emailChangeResponse,
|
||||
});
|
||||
|
||||
bool hasEmails() => emailList != null && emailList!.isNotEmpty;
|
||||
@@ -21,5 +24,24 @@ class EmailsResponse with EquatableMixin {
|
||||
bool get existNotFoundEmails => notFoundEmailIds?.isNotEmpty == true;
|
||||
|
||||
@override
|
||||
List<Object?> get props => [emailList, notFoundEmailIds, state];
|
||||
List<Object?> get props => [
|
||||
emailList,
|
||||
notFoundEmailIds,
|
||||
state,
|
||||
emailChangeResponse,
|
||||
];
|
||||
|
||||
EmailsResponse copyWith({
|
||||
List<Email>? emailList,
|
||||
List<EmailId>? notFoundEmailIds,
|
||||
State? state,
|
||||
EmailChangeResponse? emailChangeResponse,
|
||||
}) {
|
||||
return EmailsResponse(
|
||||
emailList: emailList ?? this.emailList,
|
||||
notFoundEmailIds: notFoundEmailIds ?? this.notFoundEmailIds,
|
||||
state: state ?? this.state,
|
||||
emailChangeResponse: emailChangeResponse ?? this.emailChangeResponse,
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -3,6 +3,7 @@ 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';
|
||||
import 'package:tmail_ui_user/features/thread/data/model/email_change_response.dart';
|
||||
|
||||
class RefreshChangesAllEmailLoading extends LoadingState {}
|
||||
|
||||
@@ -10,18 +11,21 @@ class RefreshChangesAllEmailSuccess extends UIState {
|
||||
final List<PresentationEmail> emailList;
|
||||
final State? currentEmailState;
|
||||
final MailboxId? currentMailboxId;
|
||||
final EmailChangeResponse? emailChangeResponse;
|
||||
|
||||
RefreshChangesAllEmailSuccess({
|
||||
required this.emailList,
|
||||
this.currentEmailState,
|
||||
this.currentMailboxId
|
||||
this.currentMailboxId,
|
||||
this.emailChangeResponse,
|
||||
});
|
||||
|
||||
@override
|
||||
List<Object?> get props => [
|
||||
emailList,
|
||||
currentEmailState,
|
||||
currentMailboxId
|
||||
currentMailboxId,
|
||||
emailChangeResponse,
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
+3
-1
@@ -59,6 +59,8 @@ class RefreshChangesEmailsInMailboxInteractor {
|
||||
return Right<Failure, Success>(RefreshChangesAllEmailSuccess(
|
||||
emailList: presentationEmailList,
|
||||
currentEmailState: emailResponse.state,
|
||||
currentMailboxId: currentMailboxId));
|
||||
currentMailboxId: currentMailboxId,
|
||||
emailChangeResponse: emailResponse.emailChangeResponse,
|
||||
));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
import 'package:tmail_ui_user/features/email/presentation/action/email_ui_action.dart';
|
||||
import 'package:tmail_ui_user/features/thread/data/model/email_change_response.dart';
|
||||
import 'package:tmail_ui_user/features/thread/presentation/thread_controller.dart';
|
||||
|
||||
extension RefreshThreadDetailExtension on ThreadController {
|
||||
void refreshThreadDetail(EmailChangeResponse? emailChangeResponse) {
|
||||
if (emailChangeResponse == null) return;
|
||||
|
||||
mailboxDashBoardController
|
||||
.dispatchEmailUIAction(RefreshThreadDetailAction(emailChangeResponse));
|
||||
}
|
||||
}
|
||||
@@ -61,6 +61,7 @@ import 'package:tmail_ui_user/features/thread/domain/usecases/refresh_changes_em
|
||||
import 'package:tmail_ui_user/features/thread/domain/usecases/search_email_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/thread/domain/usecases/search_more_email_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/thread/presentation/extensions/list_presentation_email_extensions.dart';
|
||||
import 'package:tmail_ui_user/features/thread/presentation/extensions/refresh_thread_detail_extension.dart';
|
||||
import 'package:tmail_ui_user/features/thread/presentation/mixin/email_action_controller.dart';
|
||||
import 'package:tmail_ui_user/features/thread/presentation/model/delete_action_type.dart';
|
||||
import 'package:tmail_ui_user/features/thread/presentation/model/loading_more_status.dart';
|
||||
@@ -697,7 +698,7 @@ class ThreadController extends BaseController with EmailActionController {
|
||||
}
|
||||
|
||||
Future<Either<Failure, Success>> _refreshChangeListEmailCache() async {
|
||||
return _refreshChangesEmailsInMailboxInteractor.execute(
|
||||
final refreshState = await _refreshChangesEmailsInMailboxInteractor.execute(
|
||||
_session!,
|
||||
_accountId!,
|
||||
mailboxDashBoardController.currentEmailState!,
|
||||
@@ -716,6 +717,17 @@ class ThreadController extends BaseController with EmailActionController {
|
||||
mailboxId: selectedMailboxId,
|
||||
),
|
||||
).last;
|
||||
|
||||
refreshState.fold(
|
||||
(failure) {},
|
||||
(success) {
|
||||
if (success is RefreshChangesAllEmailSuccess) {
|
||||
refreshThreadDetail(success.emailChangeResponse);
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
return refreshState;
|
||||
}
|
||||
|
||||
Future<void> _refreshChangeListEmail() async {
|
||||
|
||||
Reference in New Issue
Block a user