TF-3924 Thread Detail Delay selected email content render
This commit is contained in:
+1
-6
@@ -5,7 +5,6 @@ import 'package:model/email/email_in_thread_status.dart';
|
||||
import 'package:tmail_ui_user/features/thread_detail/presentation/extension/load_more_thread_detail_emails.dart';
|
||||
import 'package:tmail_ui_user/features/thread_detail/presentation/extension/thread_detail_on_email_action_click.dart';
|
||||
import 'package:tmail_ui_user/features/thread_detail/presentation/extension/thread_detail_open_email_address_detail_action.dart';
|
||||
import 'package:tmail_ui_user/features/thread_detail/domain/state/get_emails_by_ids_state.dart';
|
||||
import 'package:tmail_ui_user/features/thread_detail/presentation/extension/thread_detail_load_more_segments.dart';
|
||||
import 'package:tmail_ui_user/features/thread_detail/presentation/extension/toggle_thread_detail_collape_expand.dart';
|
||||
import 'package:tmail_ui_user/features/thread_detail/presentation/thread_detail_controller.dart';
|
||||
@@ -32,11 +31,7 @@ extension GetThreadDetailEmailViews on ThreadDetailController {
|
||||
loadMoreCount: loadMoreSegments[indexOfEmailId]!,
|
||||
),
|
||||
imagePaths: imagePaths,
|
||||
isLoading: viewState.value.fold(
|
||||
(failure) => false,
|
||||
(success) => success is GettingEmailsByIds &&
|
||||
success.loadingIndex == indexOfEmailId,
|
||||
),
|
||||
loadingIndex: indexOfEmailId,
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
+35
-9
@@ -1,17 +1,42 @@
|
||||
import 'package:core/utils/platform_info.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/bindings/email_bindings.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/dashboard_routes.dart';
|
||||
import 'package:model/email/email_in_thread_status.dart';
|
||||
import 'package:tmail_ui_user/features/thread_detail/domain/state/get_emails_by_ids_state.dart';
|
||||
import 'package:tmail_ui_user/features/thread_detail/presentation/action/thread_detail_ui_action.dart';
|
||||
import 'package:tmail_ui_user/features/thread_detail/presentation/thread_detail_controller.dart';
|
||||
|
||||
extension HandleGetEmailsByIdsSuccess on ThreadDetailController {
|
||||
void handleGetEmailsByIdsSuccess(GetEmailsByIdsSuccess success) {
|
||||
Future<void> handleGetEmailsByIdsSuccess(GetEmailsByIdsSuccess success) async {
|
||||
final currentRoute = mailboxDashBoardController.dashboardRoute.value;
|
||||
if (currentRoute != DashboardRoutes.threadDetailed) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (success is PreloadEmailsByIdsSuccess &&
|
||||
success.presentationEmails.isNotEmpty) {
|
||||
final email = success.presentationEmails.first;
|
||||
final emailId = email.id;
|
||||
if (emailId == null) return;
|
||||
EmailBindings(currentEmailId: emailId).dependencies();
|
||||
currentExpandedEmailId.value = emailId;
|
||||
final isInternetConnected = await networkConnectionController.hasInternetConnection();
|
||||
|
||||
if (isThreadDetailEnabled && isInternetConnected) {
|
||||
loadThreadOnThreadChanged = false;
|
||||
mailboxDashBoardController.dispatchThreadDetailUIAction(
|
||||
LoadThreadDetailAfterSelectedEmailAction(email.threadId!),
|
||||
);
|
||||
} else {
|
||||
emailIdsPresentation[emailId] = emailIdsPresentation[emailId]?.copyWith(
|
||||
emailInThreadStatus: EmailInThreadStatus.expanded,
|
||||
);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
final selectedEmailId = mailboxDashBoardController.selectedEmail.value?.id;
|
||||
if (selectedEmailId == null) return;
|
||||
|
||||
for (var presentationEmail in success.presentationEmails) {
|
||||
if (presentationEmail.id == null) continue;
|
||||
@@ -24,16 +49,17 @@ extension HandleGetEmailsByIdsSuccess on ThreadDetailController {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (presentationEmail.id == selectedEmailId) {
|
||||
EmailBindings(currentEmailId: presentationEmail.id).dependencies();
|
||||
currentExpandedEmailId.value = presentationEmail.id;
|
||||
}
|
||||
emailIdsPresentation[presentationEmail.id!] = presentationEmail.copyWith(
|
||||
emailInThreadStatus: presentationEmail.id == selectedEmailId
|
||||
? EmailInThreadStatus.expanded
|
||||
: EmailInThreadStatus.collapsed,
|
||||
emailInThreadStatus: EmailInThreadStatus.collapsed,
|
||||
);
|
||||
}
|
||||
threadDetailManager.currentMobilePageViewIndex.refresh();
|
||||
if (currentExpandedEmailId.value != null) {
|
||||
emailIdsPresentation[currentExpandedEmailId.value!] = emailIdsPresentation[currentExpandedEmailId.value!]?.copyWith(
|
||||
emailInThreadStatus: EmailInThreadStatus.expanded,
|
||||
);
|
||||
}
|
||||
if (PlatformInfo.isMobile) {
|
||||
threadDetailManager.currentMobilePageViewIndex.refresh();
|
||||
}
|
||||
}
|
||||
}
|
||||
+9
-1
@@ -34,7 +34,15 @@ extension InitializeThreadDetailEmails on ThreadDetailController {
|
||||
))));
|
||||
return;
|
||||
}
|
||||
if (_currentThreadOnlyContainsSelectedEmail(selectedEmailId)) return;
|
||||
if (_currentThreadOnlyContainsSelectedEmail(selectedEmailId) &&
|
||||
mailboxDashBoardController.selectedEmail.value != null) {
|
||||
if (!loadThreadOnThreadChanged) {
|
||||
consumeState(Stream.value(Right(GetEmailsByIdsSuccess(
|
||||
[mailboxDashBoardController.selectedEmail.value!],
|
||||
))));
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
consumeState(getEmailsByIdsInteractor.execute(
|
||||
session!,
|
||||
|
||||
+1
@@ -21,6 +21,7 @@ extension ThreadDetailOnSelectedEmailUpdated on ThreadDetailController {
|
||||
return;
|
||||
}
|
||||
|
||||
emailIdsPresentation.clear();
|
||||
scrollController ??= ScrollController();
|
||||
|
||||
if (currentExpandedEmailId.value == null) {
|
||||
|
||||
Reference in New Issue
Block a user