TF-1243 Fix move to after advance search result list went blank

This commit is contained in:
dab246
2022-12-06 11:43:50 +07:00
committed by Dat H. Pham
parent a4fd61e0ac
commit 9c89c1527b
3 changed files with 64 additions and 41 deletions
@@ -329,7 +329,12 @@ class MailboxController extends BaseMailboxController {
void _initialMailboxVariableStorage({bool isRefreshChange = false}) { void _initialMailboxVariableStorage({bool isRefreshChange = false}) {
_setMapMailbox(); _setMapMailbox();
_setOutboxMailbox(); _setOutboxMailbox();
_selectMailboxDefault(isRefreshChange: isRefreshChange);
if (isRefreshChange) {
_selectSelectedMailboxDefault();
} else {
_handleDataFromNavigationRouter();
}
} }
void _setMapMailbox() { void _setMapMailbox() {
@@ -363,62 +368,63 @@ class MailboxController extends BaseMailboxController {
} }
} }
void _selectMailboxDefault({bool isRefreshChange = false}) { void _selectSelectedMailboxDefault() {
final mapDefaultMailbox = { final isSearchEmailRunning = mailboxDashBoardController.searchController.isSearchEmailRunning;
for (var mailboxNode in defaultMailboxTree.value.root.childrenItems ?? List<MailboxNode>.empty()) if (isSearchEmailRunning) {
mailboxNode.item.role!: mailboxNode.item log('MailboxController::_selectMailboxDefault(): isSearchEmailRunning is $isSearchEmailRunning');
}; return;
}
final mailboxSelected = _getCurrentSelectedMailbox();
mailboxDashBoardController.setSelectedMailbox(mailboxSelected);
}
PresentationMailbox? _getCurrentSelectedMailbox() {
final mailboxCurrent = mailboxDashBoardController.selectedMailbox.value; final mailboxCurrent = mailboxDashBoardController.selectedMailbox.value;
final mapMailboxById = mailboxDashBoardController.mapMailboxById; final mapMailboxById = mailboxDashBoardController.mapMailboxById;
final isSearchEmailRunning = mailboxDashBoardController.searchController.isSearchEmailRunning; final isSearchEmailRunning = mailboxDashBoardController.searchController.isSearchEmailRunning;
final mapDefaultPresentationMailboxByRole = defaultMailboxTree.value.mapPresentationMailboxByRole;
PresentationMailbox? mailboxSelected;
if (mailboxCurrent != null) { if (mailboxCurrent != null) {
if (mailboxCurrent.hasRole()) { if (mailboxCurrent.hasRole()) {
mailboxSelected = mapDefaultMailbox.containsKey(mailboxCurrent.role) return mapDefaultPresentationMailboxByRole.containsKey(mailboxCurrent.role)
? mapDefaultMailbox[mailboxCurrent.role] ? mapDefaultPresentationMailboxByRole[mailboxCurrent.role]
: mailboxCurrent; : mailboxCurrent;
} else { } else {
mailboxSelected = mapMailboxById.containsKey(mailboxCurrent.id) return mapMailboxById.containsKey(mailboxCurrent.id)
? mapMailboxById[mailboxCurrent.id] ? mapMailboxById[mailboxCurrent.id]
: mailboxCurrent; : mailboxCurrent;
} }
} else { } else if (!isSearchEmailRunning) {
if (!isSearchEmailRunning) { if (mapDefaultPresentationMailboxByRole.containsKey(PresentationMailbox.roleInbox)) {
if (mapDefaultMailbox.containsKey(PresentationMailbox.roleInbox)) { return mapDefaultPresentationMailboxByRole[PresentationMailbox.roleInbox];
mailboxSelected = mapDefaultMailbox[PresentationMailbox.roleInbox]; } else if (allMailboxes.isNotEmpty) {
} else { return allMailboxes.first;
if (allMailboxes.isNotEmpty) {
mailboxSelected = allMailboxes.first;
}
}
} }
} }
if (isRefreshChange) { return null;
mailboxDashBoardController.setSelectedMailbox(mailboxSelected); }
} else {
if (isHasDataFromRoute) { void _handleDataFromNavigationRouter() {
log('MailboxController::_selectMailboxDefault(): isHasDataFromRoute is true:navigationRouter: $navigationRouter'); log('MailboxController::_handleDataFromNavigationRouter():navigationRouter: $navigationRouter');
if (mailboxIdFromNavigationRouter != null) {
_selectMailboxFromRouter(); if (isHasDataFromRoute) {
} else if (emailIdFromNavigationRouter != null) { if (mailboxIdFromNavigationRouter != null) {
mailboxDashBoardController.dispatchAction(SelectEmailByIdAction(navigationRouter!)); _selectMailboxFromRouter();
_clearNavigationRouter(); } else if (emailIdFromNavigationRouter != null) {
} else if (searchQueryFromNavigationRouter != null) { mailboxDashBoardController.dispatchAction(SelectEmailByIdAction(navigationRouter!));
mailboxDashBoardController.dispatchAction(SearchEmailByQueryAction(navigationRouter!)); _clearNavigationRouter();
_clearNavigationRouter(); } else if (searchQueryFromNavigationRouter != null && searchQueryFromNavigationRouter?.value.isNotEmpty == true) {
} else { mailboxDashBoardController.dispatchAction(SearchEmailByQueryAction(navigationRouter!));
_clearNavigationRouter(); _clearNavigationRouter();
mailboxDashBoardController.setSelectedMailbox(mailboxSelected);
_updateSelectedMailboxRouteOnBrowser();
}
} else { } else {
log('MailboxController::_selectMailboxDefault(): isHasDataFromRoute is false'); _clearNavigationRouter();
mailboxDashBoardController.setSelectedMailbox(mailboxSelected); _selectSelectedMailboxDefault();
_updateSelectedMailboxRouteOnBrowser(); _updateSelectedMailboxRouteOnBrowser();
} }
} else {
_selectSelectedMailboxDefault();
_updateSelectedMailboxRouteOnBrowser();
} }
} }
@@ -4,6 +4,7 @@ import 'dart:collection';
import 'package:equatable/equatable.dart'; import 'package:equatable/equatable.dart';
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
import 'package:model/mailbox/expand_mode.dart'; import 'package:model/mailbox/expand_mode.dart';
import 'package:model/mailbox/presentation_mailbox.dart';
import 'package:model/mailbox/select_mode.dart'; import 'package:model/mailbox/select_mode.dart';
import 'mailbox_node.dart'; import 'mailbox_node.dart';
@@ -99,6 +100,22 @@ class MailboxTree with EquatableMixin {
return path; return path;
} }
Map<Role, PresentationMailbox> get mapPresentationMailboxByRole {
if (root.childrenItems?.isEmpty == true) {
return {};
} else {
final listPresentationMailboxHasRole = root.childrenItems!
.where((node) => node.item.role != null)
.map((node) => node.item)
.toList();
return {
for (var mailbox in listPresentationMailboxHasRole)
mailbox.role!: mailbox
};
}
}
@override @override
List<Object?> get props => [root]; List<Object?> get props => [root];
} }
@@ -623,7 +623,7 @@ class ThreadController extends BaseController with EmailActionController {
} }
void _searchEmail({UnsignedInt? limit, EmailFilterCondition? filterCondition}) { void _searchEmail({UnsignedInt? limit, EmailFilterCondition? filterCondition}) {
if (_accountId != null && searchQuery != null) { if (_accountId != null) {
searchController.activateSimpleSearch(); searchController.activateSimpleSearch();
filterCondition = EmailFilterCondition( filterCondition = EmailFilterCondition(