TF-1243 Fix move to after advance search result list went blank
This commit is contained in:
@@ -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(
|
||||||
|
|||||||
Reference in New Issue
Block a user