TF-3924 Thread Detail Reduce middle state when metadata loading
This commit is contained in:
+25
-6
@@ -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/domain/state/get_thread_by_id_state.dart';
|
||||||
import 'package:tmail_ui_user/features/thread_detail/presentation/thread_detail_controller.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 selectedEmail = mailboxDashBoardController.selectedEmail.value;
|
||||||
final selectedEmailId = selectedEmail?.id;
|
final selectedEmailId = selectedEmail?.id;
|
||||||
emailIdsPresentation.value = {
|
final originalMap = Map.from(emailIdsPresentation.value);
|
||||||
for (final id in allEmailIds)
|
_assignNewThreadEmailIdsWithoutRebuildingTheUI(
|
||||||
id: id == selectedEmailId
|
allEmailIds,
|
||||||
? emailIdsPresentation[id] ?? selectedEmail
|
selectedEmailId,
|
||||||
: null,
|
originalMap,
|
||||||
};
|
selectedEmail,
|
||||||
|
);
|
||||||
if ((isThreadDetailEnabled && success is! PreloadEmailIdsInThreadSuccess) ||
|
if ((isThreadDetailEnabled && success is! PreloadEmailIdsInThreadSuccess) ||
|
||||||
(!isThreadDetailEnabled && success is PreloadEmailIdsInThreadSuccess)) {
|
(!isThreadDetailEnabled && success is PreloadEmailIdsInThreadSuccess)) {
|
||||||
emailsInThreadDetailInfo.value = allEmailsInThreadDetailInfo;
|
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,
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user