TF-3298 Fix blink when refresh email list (#3299)
This commit is contained in:
@@ -17,23 +17,24 @@ extension ListEmailExtension on List<Email> {
|
||||
};
|
||||
}
|
||||
|
||||
List<Email> sortingByOrderOfIdList(List<Id> ids) {
|
||||
if (ids.length != length) {
|
||||
return this;
|
||||
}
|
||||
List<Email> sortEmailsById(List<Id> referenceIds) {
|
||||
final indexMap = {
|
||||
for (var i = 0; i < referenceIds.length; i++)
|
||||
referenceIds[i]: i
|
||||
};
|
||||
|
||||
sort((email1, email2) {
|
||||
final id1 = email1.id?.id;
|
||||
final id2 = email2.id?.id;
|
||||
final emailId1 = email1.id?.id;
|
||||
final emailId2 = email2.id?.id;
|
||||
|
||||
if (id1 == null || id2 == null) {
|
||||
return 0;
|
||||
if (emailId1 == null || emailId2 == null) {
|
||||
return emailId1 == null ? 1 : -1;
|
||||
}
|
||||
|
||||
final index1 = ids.indexWhere((id) => id == id1);
|
||||
final index2 = ids.indexWhere((id) => id == id2);
|
||||
final indexEmail1 = indexMap[emailId1] ?? double.maxFinite;
|
||||
final indexEmail2 = indexMap[emailId2] ?? double.maxFinite;
|
||||
|
||||
return index1.compareTo(index2);
|
||||
return indexEmail1.compareTo(indexEmail2);
|
||||
});
|
||||
|
||||
return this;
|
||||
|
||||
@@ -20,7 +20,6 @@ import 'package:jmap_dart_client/jmap/mail/email/get/get_email_method.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/email/get/get_email_response.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/email/query/query_email_method.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/email/query/query_email_response.dart';
|
||||
import 'package:model/extensions/list_email_extension.dart';
|
||||
import 'package:tmail_ui_user/features/thread/data/extensions/list_email_extension.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/email/search_snippet/search_snippet.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/email/search_snippet/search_snippet_get_method.dart';
|
||||
@@ -91,24 +90,33 @@ class ThreadAPI {
|
||||
QueryEmailResponse.deserialize,
|
||||
);
|
||||
|
||||
List<Email>? emailList;
|
||||
final emailList = sortEmails(
|
||||
getEmailResponse: responseOfGetEmailMethod,
|
||||
queryEmailResponse: responseOfQueryEmailMethod,
|
||||
);
|
||||
|
||||
if (responseOfGetEmailMethod?.list.isNotEmpty == true &&
|
||||
responseOfQueryEmailMethod?.ids.isNotEmpty == true) {
|
||||
log('ThreadAPI::getAllEmail: QUERY_EMAIL_IDS = ${responseOfQueryEmailMethod?.ids}');
|
||||
final listSortedEmail = responseOfGetEmailMethod!.list
|
||||
.sortingByOrderOfIdList(responseOfQueryEmailMethod!.ids.toList());
|
||||
emailList = listSortedEmail;
|
||||
} else {
|
||||
emailList = responseOfGetEmailMethod?.list;
|
||||
}
|
||||
log('ThreadAPI::getAllEmail: EMAIL_DISPLAYED_IDS = ${emailList?.listEmailIds}');
|
||||
return EmailsResponse(
|
||||
emailList: emailList,
|
||||
state: responseOfGetEmailMethod?.state,
|
||||
);
|
||||
}
|
||||
|
||||
List<Email>? sortEmails({
|
||||
GetEmailResponse? getEmailResponse,
|
||||
QueryEmailResponse? queryEmailResponse,
|
||||
}) {
|
||||
final listEmails = getEmailResponse?.list;
|
||||
final listIds = queryEmailResponse?.ids.toList();
|
||||
|
||||
if (listEmails?.isNotEmpty != true || listIds?.isNotEmpty != true) {
|
||||
return listEmails;
|
||||
}
|
||||
|
||||
final listSortedEmails = listEmails!.sortEmailsById(listIds!);
|
||||
|
||||
return listSortedEmails;
|
||||
}
|
||||
|
||||
Future<SearchEmailsResponse> searchEmails(
|
||||
Session session,
|
||||
AccountId accountId,
|
||||
@@ -166,21 +174,16 @@ class ThreadAPI {
|
||||
.build()
|
||||
.execute();
|
||||
|
||||
final emailResultList = result.parse<GetEmailResponse>(
|
||||
final responseOfGetEmailMethod = result.parse<GetEmailResponse>(
|
||||
getEmailInvocation.methodCallId, GetEmailResponse.deserialize);
|
||||
final responseOfQueryEmailMethod = result.parse<QueryEmailResponse>(
|
||||
queryEmailInvocation.methodCallId,
|
||||
QueryEmailResponse.deserialize);
|
||||
|
||||
List<Email>? sortedEmailList;
|
||||
|
||||
if (emailResultList?.list.isNotEmpty == true &&
|
||||
responseOfQueryEmailMethod?.ids.isNotEmpty == true) {
|
||||
sortedEmailList = emailResultList!.list
|
||||
.sortingByOrderOfIdList(responseOfQueryEmailMethod!.ids.toList());
|
||||
} else {
|
||||
sortedEmailList = emailResultList?.list;
|
||||
}
|
||||
final sortedEmailList = sortEmails(
|
||||
getEmailResponse: responseOfGetEmailMethod,
|
||||
queryEmailResponse: responseOfQueryEmailMethod,
|
||||
);
|
||||
|
||||
final searchSnippets = _getSearchSnippetsFromResponse(
|
||||
result,
|
||||
@@ -188,7 +191,7 @@ class ThreadAPI {
|
||||
);
|
||||
return SearchEmailsResponse(
|
||||
emailList: sortedEmailList,
|
||||
state: emailResultList?.state,
|
||||
state: responseOfGetEmailMethod?.state,
|
||||
searchSnippets: searchSnippets);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user