TF-3924 Thread Detail Reduce middle state when metadata loading

This commit is contained in:
DatDang
2025-07-31 17:31:07 +07:00
committed by Dat H. Pham
parent 0b17dc26e8
commit bfd58d5e91
@@ -1,3 +1,7 @@
// ignore_for_file: invalid_use_of_protected_member
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
import 'package:model/email/presentation_email.dart';
import 'package:tmail_ui_user/features/thread_detail/domain/state/get_thread_by_id_state.dart';
import 'package:tmail_ui_user/features/thread_detail/presentation/thread_detail_controller.dart';
@@ -32,15 +36,30 @@ extension HandleGetEmailIdsByThreadIdSuccess on ThreadDetailController {
final selectedEmail = mailboxDashBoardController.selectedEmail.value;
final selectedEmailId = selectedEmail?.id;
emailIdsPresentation.value = {
for (final id in allEmailIds)
id: id == selectedEmailId
? emailIdsPresentation[id] ?? selectedEmail
: null,
};
final originalMap = Map.from(emailIdsPresentation.value);
_assignNewThreadEmailIdsWithoutRebuildingTheUI(
allEmailIds,
selectedEmailId,
originalMap,
selectedEmail,
);
if ((isThreadDetailEnabled && success is! PreloadEmailIdsInThreadSuccess) ||
(!isThreadDetailEnabled && success is PreloadEmailIdsInThreadSuccess)) {
emailsInThreadDetailInfo.value = allEmailsInThreadDetailInfo;
}
}
void _assignNewThreadEmailIdsWithoutRebuildingTheUI(
List<EmailId> allEmailIds,
EmailId? selectedEmailId,
Map<dynamic, dynamic> originalMap,
PresentationEmail? selectedEmail,
) {
emailIdsPresentation.value..clear()..addAll({
for (final id in allEmailIds)
id: id == selectedEmailId
? originalMap[id] ?? selectedEmail
: null,
});
}
}