TF-934 Handle route path when open email in new tab
This commit is contained in:
@@ -15,8 +15,17 @@ extension ServicePathExtension on ServicePath {
|
|||||||
if (queryParameters.isEmpty) {
|
if (queryParameters.isEmpty) {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
return ServicePath('$path?${queryParameters
|
if (path.lastIndexOf('/') == path.length - 1) {
|
||||||
.map((query) => '${query.queryName}=${query.queryValue}').join('&')}');
|
final newPath = path.substring(0, path.length - 1);
|
||||||
|
|
||||||
|
return ServicePath('$newPath?${queryParameters
|
||||||
|
.map((query) => '${query.queryName}=${query.queryValue}')
|
||||||
|
.join('&')}');
|
||||||
|
} else {
|
||||||
|
return ServicePath('$path?${queryParameters
|
||||||
|
.map((query) => '${query.queryName}=${query.queryValue}')
|
||||||
|
.join('&')}');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ServicePath withPathParameter(String? pathParameter) {
|
ServicePath withPathParameter(String? pathParameter) {
|
||||||
|
|||||||
@@ -49,7 +49,9 @@ import 'package:tmail_ui_user/features/login/presentation/state/login_state.dart
|
|||||||
import 'package:tmail_ui_user/features/manage_account/domain/usecases/log_out_oidc_interactor.dart';
|
import 'package:tmail_ui_user/features/manage_account/domain/usecases/log_out_oidc_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/network_status_handle/presentation/network_connnection_controller.dart';
|
import 'package:tmail_ui_user/features/network_status_handle/presentation/network_connnection_controller.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/app_routes.dart';
|
import 'package:tmail_ui_user/main/routes/app_routes.dart';
|
||||||
|
import 'package:tmail_ui_user/main/routes/navigation_router.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
||||||
|
import 'package:tmail_ui_user/main/routes/route_utils.dart';
|
||||||
import 'package:tmail_ui_user/main/utils/app_config.dart';
|
import 'package:tmail_ui_user/main/utils/app_config.dart';
|
||||||
|
|
||||||
class LoginController extends ReloadableController {
|
class LoginController extends ReloadableController {
|
||||||
@@ -191,7 +193,9 @@ class LoginController extends ReloadableController {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
void handleReloaded(Session session) {
|
void handleReloaded(Session session) {
|
||||||
pushAndPop(AppRoutes.dashboard, arguments: session);
|
pushAndPop(
|
||||||
|
RouteUtils.generateRoutePathMobile(AppRoutes.dashboard, NavigationRouter()),
|
||||||
|
arguments: session);
|
||||||
}
|
}
|
||||||
|
|
||||||
void _getAuthenticationInfo() {
|
void _getAuthenticationInfo() {
|
||||||
|
|||||||
@@ -69,6 +69,7 @@ import 'package:tmail_ui_user/features/thread/presentation/model/search_status.d
|
|||||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/app_routes.dart';
|
import 'package:tmail_ui_user/main/routes/app_routes.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
||||||
|
import 'package:tmail_ui_user/main/routes/route_utils.dart';
|
||||||
import 'package:uuid/uuid.dart';
|
import 'package:uuid/uuid.dart';
|
||||||
|
|
||||||
class MailboxController extends BaseMailboxController {
|
class MailboxController extends BaseMailboxController {
|
||||||
@@ -102,7 +103,10 @@ class MailboxController extends BaseMailboxController {
|
|||||||
jmap.State? _currentMailboxState;
|
jmap.State? _currentMailboxState;
|
||||||
List<String> listMailboxNameAsStringExist = <String>[];
|
List<String> listMailboxNameAsStringExist = <String>[];
|
||||||
|
|
||||||
late Worker accountIdWorker, viewStateWorker, dashboardActionWorker;
|
late Worker accountIdWorker,
|
||||||
|
viewStateWorker,
|
||||||
|
dashboardActionWorker,
|
||||||
|
routerParametersWorker;
|
||||||
|
|
||||||
MailboxController(
|
MailboxController(
|
||||||
this._getAllMailboxInteractor,
|
this._getAllMailboxInteractor,
|
||||||
@@ -118,7 +122,7 @@ class MailboxController extends BaseMailboxController {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
void onInit() {
|
void onInit() {
|
||||||
_initWorker();
|
_registerListenerWorker();
|
||||||
_registerSearchFocusListener();
|
_registerSearchFocusListener();
|
||||||
super.onInit();
|
super.onInit();
|
||||||
}
|
}
|
||||||
@@ -139,7 +143,7 @@ class MailboxController extends BaseMailboxController {
|
|||||||
searchFocus.dispose();
|
searchFocus.dispose();
|
||||||
_openMailboxEventController.close();
|
_openMailboxEventController.close();
|
||||||
mailboxListScrollController.dispose();
|
mailboxListScrollController.dispose();
|
||||||
_clearWorker();
|
_unregisterListenerWorker();
|
||||||
super.onClose();
|
super.onClose();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -151,6 +155,7 @@ class MailboxController extends BaseMailboxController {
|
|||||||
_currentMailboxState = success.currentMailboxState;
|
_currentMailboxState = success.currentMailboxState;
|
||||||
await buildTree(success.mailboxList);
|
await buildTree(success.mailboxList);
|
||||||
_setUpMapMailbox(success.mailboxList, defaultMailboxTree.value, folderMailboxTree.value);
|
_setUpMapMailbox(success.mailboxList, defaultMailboxTree.value, folderMailboxTree.value);
|
||||||
|
_selectMailboxById();
|
||||||
} else if (success is RefreshChangesAllMailboxSuccess) {
|
} else if (success is RefreshChangesAllMailboxSuccess) {
|
||||||
_currentMailboxState = success.currentMailboxState;
|
_currentMailboxState = success.currentMailboxState;
|
||||||
await refreshTree(success.mailboxList);
|
await refreshTree(success.mailboxList);
|
||||||
@@ -191,13 +196,18 @@ class MailboxController extends BaseMailboxController {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
void _initWorker() {
|
void _registerListenerWorker() {
|
||||||
accountIdWorker = ever(mailboxDashBoardController.accountId, (accountId) {
|
accountIdWorker = ever(mailboxDashBoardController.accountId, (accountId) {
|
||||||
if (accountId is AccountId) {
|
if (accountId is AccountId) {
|
||||||
getAllMailboxAction(accountId);
|
getAllMailboxAction(accountId);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
routerParametersWorker = ever<Map<String, String?>?>(
|
||||||
|
mailboxDashBoardController.routerParameters,
|
||||||
|
_handleNavigationRouteParameters
|
||||||
|
);
|
||||||
|
|
||||||
viewStateWorker = ever(mailboxDashBoardController.viewState, (state) {
|
viewStateWorker = ever(mailboxDashBoardController.viewState, (state) {
|
||||||
if (state is Either) {
|
if (state is Either) {
|
||||||
state.fold((failure) => null, (success) {
|
state.fold((failure) => null, (success) {
|
||||||
@@ -260,10 +270,11 @@ class MailboxController extends BaseMailboxController {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void _clearWorker() {
|
void _unregisterListenerWorker() {
|
||||||
accountIdWorker.call();
|
accountIdWorker.dispose();
|
||||||
viewStateWorker.call();
|
viewStateWorker.dispose();
|
||||||
dashboardActionWorker.call();
|
dashboardActionWorker.dispose();
|
||||||
|
routerParametersWorker.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
void _initCollapseMailboxCategories() {
|
void _initCollapseMailboxCategories() {
|
||||||
@@ -985,6 +996,34 @@ class MailboxController extends BaseMailboxController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void _selectMailboxById() {
|
||||||
|
if (mailboxDashBoardController.navigationRouter != null) {
|
||||||
|
final mailboxId = mailboxDashBoardController.navigationRouter?.mailboxId;
|
||||||
|
if (mailboxId != null) {
|
||||||
|
final matchedMailboxNode = findMailboxNodeById(mailboxId);
|
||||||
|
if (matchedMailboxNode != null && currentContext != null) {
|
||||||
|
mailboxDashBoardController.setSelectedMailbox(matchedMailboxNode.item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
final emailId = mailboxDashBoardController.navigationRouter?.emailId;
|
||||||
|
if (emailId != null) {
|
||||||
|
mailboxDashBoardController.dispatchAction(SelectEmailByIdAction(emailId));
|
||||||
|
}
|
||||||
|
|
||||||
|
mailboxDashBoardController.navigationRouter = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void _handleNavigationRouteParameters(Map<String, String?>? parameters) {
|
||||||
|
log('MailboxDashBoardController::_handleNavigationRouteParameters(): parameters: $parameters');
|
||||||
|
if (parameters != null) {
|
||||||
|
final navigationRouter = RouteUtils.parsingRouteParametersToNavigationRouter(parameters);
|
||||||
|
log('ThreadController::_handleNavigationRouteParameters():navigationRouter: $navigationRouter');
|
||||||
|
mailboxDashBoardController.navigationRouter = navigationRouter;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void _showAppDashboardAction() {
|
void _showAppDashboardAction() {
|
||||||
mailboxDashBoardController.showAppDashboardAction();
|
mailboxDashBoardController.showAppDashboardAction();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
|
|
||||||
import 'package:flutter/cupertino.dart';
|
import 'package:flutter/cupertino.dart';
|
||||||
|
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
||||||
import 'package:model/email/email_action_type.dart';
|
import 'package:model/email/email_action_type.dart';
|
||||||
import 'package:model/email/presentation_email.dart';
|
import 'package:model/email/presentation_email.dart';
|
||||||
import 'package:tmail_ui_user/features/base/action/ui_action.dart';
|
import 'package:tmail_ui_user/features/base/action/ui_action.dart';
|
||||||
@@ -109,4 +110,14 @@ class SelectMailboxDefaultAction extends DashBoardAction {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
List<Object?> get props => [];
|
List<Object?> get props => [];
|
||||||
|
}
|
||||||
|
|
||||||
|
class SelectEmailByIdAction extends DashBoardAction {
|
||||||
|
|
||||||
|
final EmailId emailId;
|
||||||
|
|
||||||
|
SelectEmailByIdAction(this.emailId);
|
||||||
|
|
||||||
|
@override
|
||||||
|
List<Object?> get props => [emailId];
|
||||||
}
|
}
|
||||||
+10
@@ -77,6 +77,7 @@ import 'package:tmail_ui_user/features/thread/domain/usecases/move_multiple_emai
|
|||||||
import 'package:tmail_ui_user/features/thread/presentation/model/delete_action_type.dart';
|
import 'package:tmail_ui_user/features/thread/presentation/model/delete_action_type.dart';
|
||||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/app_routes.dart';
|
import 'package:tmail_ui_user/main/routes/app_routes.dart';
|
||||||
|
import 'package:tmail_ui_user/main/routes/navigation_router.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/router_arguments.dart';
|
import 'package:tmail_ui_user/main/routes/router_arguments.dart';
|
||||||
import 'package:tmail_ui_user/main/utils/email_receive_manager.dart';
|
import 'package:tmail_ui_user/main/utils/email_receive_manager.dart';
|
||||||
@@ -122,6 +123,7 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
final composerOverlayState = ComposerOverlayState.inActive.obs;
|
final composerOverlayState = ComposerOverlayState.inActive.obs;
|
||||||
final viewStateMarkAsReadMailbox = Rx<Either<Failure, Success>>(Right(UIState.idle));
|
final viewStateMarkAsReadMailbox = Rx<Either<Failure, Success>>(Right(UIState.idle));
|
||||||
final vacationResponse = Rxn<VacationResponse>();
|
final vacationResponse = Rxn<VacationResponse>();
|
||||||
|
final routerParameters = Rxn<Map<String, String?>>();
|
||||||
|
|
||||||
Session? sessionCurrent;
|
Session? sessionCurrent;
|
||||||
Map<Role, MailboxId> mapDefaultMailboxIdByRole = {};
|
Map<Role, MailboxId> mapDefaultMailboxIdByRole = {};
|
||||||
@@ -130,6 +132,7 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
final listResultSearch = RxList<PresentationEmail>();
|
final listResultSearch = RxList<PresentationEmail>();
|
||||||
PresentationMailbox? outboxMailbox;
|
PresentationMailbox? outboxMailbox;
|
||||||
RouterArguments? routerArguments;
|
RouterArguments? routerArguments;
|
||||||
|
NavigationRouter? navigationRouter;
|
||||||
|
|
||||||
late StreamSubscription _emailReceiveManagerStreamSubscription;
|
late StreamSubscription _emailReceiveManagerStreamSubscription;
|
||||||
late StreamSubscription _fileReceiveManagerStreamSubscription;
|
late StreamSubscription _fileReceiveManagerStreamSubscription;
|
||||||
@@ -1025,6 +1028,13 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
injectRuleFilterBindings(sessionCurrent, accountId.value);
|
injectRuleFilterBindings(sessionCurrent, accountId.value);
|
||||||
injectVacationBindings(sessionCurrent, accountId.value);
|
injectVacationBindings(sessionCurrent, accountId.value);
|
||||||
_getVacationResponse();
|
_getVacationResponse();
|
||||||
|
_getRouteParameters();
|
||||||
|
}
|
||||||
|
|
||||||
|
void _getRouteParameters() {
|
||||||
|
final parameters = Get.parameters;
|
||||||
|
log('MailboxDashBoardController::_getRouteParameters(): parameters: $parameters');
|
||||||
|
routerParameters.value = parameters;
|
||||||
}
|
}
|
||||||
|
|
||||||
UnsignedInt? get maxSizeAttachmentsPerEmail {
|
UnsignedInt? get maxSizeAttachmentsPerEmail {
|
||||||
|
|||||||
@@ -32,7 +32,9 @@ import 'package:tmail_ui_user/features/manage_account/presentation/vacation/vaca
|
|||||||
import 'package:tmail_ui_user/main/error/capability_validator.dart';
|
import 'package:tmail_ui_user/main/error/capability_validator.dart';
|
||||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/app_routes.dart';
|
import 'package:tmail_ui_user/main/routes/app_routes.dart';
|
||||||
|
import 'package:tmail_ui_user/main/routes/navigation_router.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
||||||
|
import 'package:tmail_ui_user/main/routes/route_utils.dart';
|
||||||
|
|
||||||
class ManageAccountDashBoardController extends ReloadableController {
|
class ManageAccountDashBoardController extends ReloadableController {
|
||||||
|
|
||||||
@@ -224,7 +226,9 @@ class ManageAccountDashBoardController extends ReloadableController {
|
|||||||
popBack(result: vacationResponse.value);
|
popBack(result: vacationResponse.value);
|
||||||
} else {
|
} else {
|
||||||
log('ManageAccountDashBoardController::backToMailboxDashBoard(): canBack: FALSE');
|
log('ManageAccountDashBoardController::backToMailboxDashBoard(): canBack: FALSE');
|
||||||
pushAndPopAll(AppRoutes.dashboard, arguments: sessionCurrent);
|
pushAndPopAll(
|
||||||
|
RouteUtils.generateRoutePathMobile(AppRoutes.dashboard, NavigationRouter()),
|
||||||
|
arguments: sessionCurrent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,9 @@ import 'package:tmail_ui_user/features/session/domain/usecases/get_session_inter
|
|||||||
import 'package:tmail_ui_user/main/exceptions/remote_exception.dart';
|
import 'package:tmail_ui_user/main/exceptions/remote_exception.dart';
|
||||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/app_routes.dart';
|
import 'package:tmail_ui_user/main/routes/app_routes.dart';
|
||||||
|
import 'package:tmail_ui_user/main/routes/navigation_router.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
||||||
|
import 'package:tmail_ui_user/main/routes/route_utils.dart';
|
||||||
|
|
||||||
class SessionController extends ReloadableController {
|
class SessionController extends ReloadableController {
|
||||||
final GetSessionInteractor _getSessionInteractor;
|
final GetSessionInteractor _getSessionInteractor;
|
||||||
@@ -55,7 +57,9 @@ class SessionController extends ReloadableController {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
void handleReloaded(Session session) {
|
void handleReloaded(Session session) {
|
||||||
pushAndPop(AppRoutes.dashboard, arguments: session);
|
pushAndPop(
|
||||||
|
RouteUtils.generateRoutePathMobile(AppRoutes.dashboard, NavigationRouter()),
|
||||||
|
arguments: session);
|
||||||
}
|
}
|
||||||
|
|
||||||
void _getSession() async {
|
void _getSession() async {
|
||||||
@@ -103,7 +107,9 @@ class SessionController extends ReloadableController {
|
|||||||
final apiUrl = success.session.apiUrl.toString();
|
final apiUrl = success.session.apiUrl.toString();
|
||||||
if (apiUrl.isNotEmpty) {
|
if (apiUrl.isNotEmpty) {
|
||||||
_dynamicUrlInterceptors.changeBaseUrl(apiUrl);
|
_dynamicUrlInterceptors.changeBaseUrl(apiUrl);
|
||||||
pushAndPop(AppRoutes.dashboard, arguments: success.session);
|
pushAndPop(
|
||||||
|
RouteUtils.generateRoutePathMobile(AppRoutes.dashboard, NavigationRouter()),
|
||||||
|
arguments: success.session);
|
||||||
} else {
|
} else {
|
||||||
_goToLogin();
|
_goToLogin();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ import 'package:tmail_ui_user/features/thread/data/network/thread_isolate_worker
|
|||||||
import 'package:tmail_ui_user/features/thread/data/repository/thread_repository_impl.dart';
|
import 'package:tmail_ui_user/features/thread/data/repository/thread_repository_impl.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/domain/repository/thread_repository.dart';
|
import 'package:tmail_ui_user/features/thread/domain/repository/thread_repository.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/domain/usecases/empty_trash_folder_interactor.dart';
|
import 'package:tmail_ui_user/features/thread/domain/usecases/empty_trash_folder_interactor.dart';
|
||||||
|
import 'package:tmail_ui_user/features/thread/domain/usecases/get_email_by_id_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/domain/usecases/get_emails_in_mailbox_interactor.dart';
|
import 'package:tmail_ui_user/features/thread/domain/usecases/get_emails_in_mailbox_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/domain/usecases/load_more_emails_in_mailbox_interactor.dart';
|
import 'package:tmail_ui_user/features/thread/domain/usecases/load_more_emails_in_mailbox_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/domain/usecases/mark_as_multiple_email_read_interactor.dart';
|
import 'package:tmail_ui_user/features/thread/domain/usecases/mark_as_multiple_email_read_interactor.dart';
|
||||||
@@ -65,6 +66,7 @@ class ThreadBindings extends BaseBindings {
|
|||||||
Get.find<MarkAsEmailReadInteractor>(),
|
Get.find<MarkAsEmailReadInteractor>(),
|
||||||
Get.find<MoveToMailboxInteractor>(),
|
Get.find<MoveToMailboxInteractor>(),
|
||||||
Get.find<CachingManager>(),
|
Get.find<CachingManager>(),
|
||||||
|
Get.find<GetEmailByIdInteractor>(),
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -135,6 +137,7 @@ class ThreadBindings extends BaseBindings {
|
|||||||
Get.lazyPut(() => MoveToMailboxInteractor(
|
Get.lazyPut(() => MoveToMailboxInteractor(
|
||||||
Get.find<EmailRepository>(),
|
Get.find<EmailRepository>(),
|
||||||
Get.find<MailboxRepository>()));
|
Get.find<MailboxRepository>()));
|
||||||
|
Get.lazyPut(() => GetEmailByIdInteractor(Get.find<ThreadRepository>()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
|||||||
@@ -54,6 +54,7 @@ import 'package:tmail_ui_user/features/thread/domain/model/get_email_request.dar
|
|||||||
import 'package:tmail_ui_user/features/thread/domain/model/search_query.dart';
|
import 'package:tmail_ui_user/features/thread/domain/model/search_query.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/domain/state/empty_trash_folder_state.dart';
|
import 'package:tmail_ui_user/features/thread/domain/state/empty_trash_folder_state.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/domain/state/get_all_email_state.dart';
|
import 'package:tmail_ui_user/features/thread/domain/state/get_all_email_state.dart';
|
||||||
|
import 'package:tmail_ui_user/features/thread/domain/state/get_email_by_id_state.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/domain/state/load_more_emails_state.dart';
|
import 'package:tmail_ui_user/features/thread/domain/state/load_more_emails_state.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/domain/state/mark_as_multiple_email_read_state.dart';
|
import 'package:tmail_ui_user/features/thread/domain/state/mark_as_multiple_email_read_state.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/domain/state/mark_as_star_multiple_email_state.dart';
|
import 'package:tmail_ui_user/features/thread/domain/state/mark_as_star_multiple_email_state.dart';
|
||||||
@@ -62,6 +63,7 @@ import 'package:tmail_ui_user/features/thread/domain/state/refresh_changes_all_e
|
|||||||
import 'package:tmail_ui_user/features/thread/domain/state/search_email_state.dart';
|
import 'package:tmail_ui_user/features/thread/domain/state/search_email_state.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/domain/state/search_more_email_state.dart';
|
import 'package:tmail_ui_user/features/thread/domain/state/search_more_email_state.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/domain/usecases/empty_trash_folder_interactor.dart';
|
import 'package:tmail_ui_user/features/thread/domain/usecases/empty_trash_folder_interactor.dart';
|
||||||
|
import 'package:tmail_ui_user/features/thread/domain/usecases/get_email_by_id_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/domain/usecases/get_emails_in_mailbox_interactor.dart';
|
import 'package:tmail_ui_user/features/thread/domain/usecases/get_emails_in_mailbox_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/domain/usecases/load_more_emails_in_mailbox_interactor.dart';
|
import 'package:tmail_ui_user/features/thread/domain/usecases/load_more_emails_in_mailbox_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/domain/usecases/mark_as_multiple_email_read_interactor.dart';
|
import 'package:tmail_ui_user/features/thread/domain/usecases/mark_as_multiple_email_read_interactor.dart';
|
||||||
@@ -102,6 +104,7 @@ class ThreadController extends BaseController {
|
|||||||
final MarkAsEmailReadInteractor _markAsEmailReadInteractor;
|
final MarkAsEmailReadInteractor _markAsEmailReadInteractor;
|
||||||
final MoveToMailboxInteractor _moveToMailboxInteractor;
|
final MoveToMailboxInteractor _moveToMailboxInteractor;
|
||||||
final CachingManager _cachingManager;
|
final CachingManager _cachingManager;
|
||||||
|
final GetEmailByIdInteractor _getEmailByIdInteractor;
|
||||||
|
|
||||||
final listEmailDrag = <PresentationEmail>[].obs;
|
final listEmailDrag = <PresentationEmail>[].obs;
|
||||||
bool _rangeSelectionMode = false;
|
bool _rangeSelectionMode = false;
|
||||||
@@ -149,11 +152,12 @@ class ThreadController extends BaseController {
|
|||||||
this._markAsEmailReadInteractor,
|
this._markAsEmailReadInteractor,
|
||||||
this._moveToMailboxInteractor,
|
this._moveToMailboxInteractor,
|
||||||
this._cachingManager,
|
this._cachingManager,
|
||||||
|
this._getEmailByIdInteractor,
|
||||||
);
|
);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void onInit() {
|
void onInit() {
|
||||||
_initWorker();
|
_registerListenerWorker();
|
||||||
super.onInit();
|
super.onInit();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -167,7 +171,7 @@ class ThreadController extends BaseController {
|
|||||||
void onClose() {
|
void onClose() {
|
||||||
listEmailController.dispose();
|
listEmailController.dispose();
|
||||||
focusNodeKeyBoard.dispose();
|
focusNodeKeyBoard.dispose();
|
||||||
_clearWorker();
|
_unregisterListenerWorker();
|
||||||
super.onClose();
|
super.onClose();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -195,6 +199,16 @@ class ThreadController extends BaseController {
|
|||||||
_searchMoreEmailsSuccess(success);
|
_searchMoreEmailsSuccess(success);
|
||||||
} else if (success is SearchingMoreState || success is LoadingMoreState) {
|
} else if (success is SearchingMoreState || success is LoadingMoreState) {
|
||||||
_isLoadingMore = true;
|
_isLoadingMore = true;
|
||||||
|
} else if (success is GetEmailByIdSuccess) {
|
||||||
|
if (currentContext != null) {
|
||||||
|
final mailboxContain = success.email
|
||||||
|
.findMailboxContain(mailboxDashBoardController.mapMailboxById);
|
||||||
|
pressEmailAction(
|
||||||
|
currentContext!,
|
||||||
|
EmailActionType.preview,
|
||||||
|
success.email,
|
||||||
|
mailboxContain: mailboxContain);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
@@ -243,7 +257,7 @@ class ThreadController extends BaseController {
|
|||||||
_handleErrorGetAllOrRefreshChangesEmail(error);
|
_handleErrorGetAllOrRefreshChangesEmail(error);
|
||||||
}
|
}
|
||||||
|
|
||||||
void _initWorker() {
|
void _registerListenerWorker() {
|
||||||
mailboxWorker = ever(mailboxDashBoardController.selectedMailbox, (mailbox) {
|
mailboxWorker = ever(mailboxDashBoardController.selectedMailbox, (mailbox) {
|
||||||
if (mailbox is PresentationMailbox) {
|
if (mailbox is PresentationMailbox) {
|
||||||
if (_currentMailboxId != mailbox.id) {
|
if (_currentMailboxId != mailbox.id) {
|
||||||
@@ -272,39 +286,40 @@ class ThreadController extends BaseController {
|
|||||||
});
|
});
|
||||||
|
|
||||||
dashboardActionWorker = ever(mailboxDashBoardController.dashBoardAction, (action) {
|
dashboardActionWorker = ever(mailboxDashBoardController.dashBoardAction, (action) {
|
||||||
if (action is DashBoardAction) {
|
if (action is RefreshAllEmailAction) {
|
||||||
if (action is RefreshAllEmailAction) {
|
refreshAllEmail();
|
||||||
refreshAllEmail();
|
mailboxDashBoardController.clearDashBoardAction();
|
||||||
mailboxDashBoardController.clearDashBoardAction();
|
} else if (action is SelectionAllEmailAction) {
|
||||||
} else if (action is SelectionAllEmailAction) {
|
setSelectAllEmailAction();
|
||||||
setSelectAllEmailAction();
|
mailboxDashBoardController.clearDashBoardAction();
|
||||||
mailboxDashBoardController.clearDashBoardAction();
|
} else if (action is CancelSelectionAllEmailAction) {
|
||||||
} else if (action is CancelSelectionAllEmailAction) {
|
cancelSelectEmail();
|
||||||
cancelSelectEmail();
|
mailboxDashBoardController.clearDashBoardAction();
|
||||||
mailboxDashBoardController.clearDashBoardAction();
|
} else if (action is FilterMessageAction) {
|
||||||
} else if (action is FilterMessageAction) {
|
filterMessagesAction(action.context, action.option);
|
||||||
filterMessagesAction(action.context, action.option);
|
mailboxDashBoardController.clearDashBoardAction();
|
||||||
mailboxDashBoardController.clearDashBoardAction();
|
} else if (action is HandleEmailActionTypeAction) {
|
||||||
} else if (action is HandleEmailActionTypeAction) {
|
pressEmailSelectionAction(action.context, action.emailAction, action.listEmailSelected);
|
||||||
pressEmailSelectionAction(action.context, action.emailAction, action.listEmailSelected);
|
mailboxDashBoardController.clearDashBoardAction();
|
||||||
mailboxDashBoardController.clearDashBoardAction();
|
} else if (action is OpenEmailDetailedFromSuggestionQuickSearchAction) {
|
||||||
} else if (action is OpenEmailDetailedFromSuggestionQuickSearchAction) {
|
final mailboxContain = action.presentationEmail
|
||||||
final mailboxContain = action.presentationEmail
|
.findMailboxContain(mailboxDashBoardController.mapMailboxById);
|
||||||
.findMailboxContain(mailboxDashBoardController.mapMailboxById);
|
pressEmailAction(
|
||||||
pressEmailAction(
|
action.context,
|
||||||
action.context,
|
EmailActionType.preview,
|
||||||
EmailActionType.preview,
|
action.presentationEmail,
|
||||||
action.presentationEmail,
|
mailboxContain: mailboxContain);
|
||||||
mailboxContain: mailboxContain);
|
mailboxDashBoardController.clearDashBoardAction();
|
||||||
mailboxDashBoardController.clearDashBoardAction();
|
} else if (action is StartSearchEmailAction) {
|
||||||
} else if (action is StartSearchEmailAction) {
|
cancelSelectEmail();
|
||||||
cancelSelectEmail();
|
_searchEmail();
|
||||||
_searchEmail();
|
mailboxDashBoardController.clearDashBoardAction();
|
||||||
mailboxDashBoardController.clearDashBoardAction();
|
} else if (action is EmptyTrashAction) {
|
||||||
} else if (action is EmptyTrashAction) {
|
deleteSelectionEmailsPermanently(action.context, DeleteActionType.all);
|
||||||
deleteSelectionEmailsPermanently(action.context, DeleteActionType.all);
|
mailboxDashBoardController.clearDashBoardAction();
|
||||||
mailboxDashBoardController.clearDashBoardAction();
|
} else if (action is SelectEmailByIdAction) {
|
||||||
}
|
_openEmailDetailedView(action.emailId);
|
||||||
|
mailboxDashBoardController.clearDashBoardAction();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -339,12 +354,12 @@ class ThreadController extends BaseController {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void _clearWorker() {
|
void _unregisterListenerWorker() {
|
||||||
mailboxWorker.call();
|
mailboxWorker.dispose();
|
||||||
dashboardActionWorker.call();
|
dashboardActionWorker.dispose();
|
||||||
searchWorker.call();
|
searchWorker.dispose();
|
||||||
advancedSearchFilterWorker.call();
|
advancedSearchFilterWorker.dispose();
|
||||||
viewStateWorker.call();
|
viewStateWorker.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
void _handleErrorGetAllOrRefreshChangesEmail(dynamic error) async {
|
void _handleErrorGetAllOrRefreshChangesEmail(dynamic error) async {
|
||||||
@@ -1529,4 +1544,13 @@ class ThreadController extends BaseController {
|
|||||||
? KeyEventResult.handled
|
? KeyEventResult.handled
|
||||||
: KeyEventResult.ignored;
|
: KeyEventResult.ignored;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void _openEmailDetailedView(EmailId emailId) {
|
||||||
|
if (_accountId != null) {
|
||||||
|
consumeState(_getEmailByIdInteractor.execute(
|
||||||
|
_accountId!,
|
||||||
|
emailId,
|
||||||
|
properties: ThreadConstants.propertiesDefault));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -12,8 +12,8 @@ import 'package:tmail_ui_user/features/thread/domain/model/search_query.dart';
|
|||||||
import 'package:tmail_ui_user/features/thread/presentation/mixin/base_email_item_tile.dart';
|
import 'package:tmail_ui_user/features/thread/presentation/mixin/base_email_item_tile.dart';
|
||||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/app_routes.dart';
|
import 'package:tmail_ui_user/main/routes/app_routes.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/browser_route_utils.dart';
|
|
||||||
import 'package:tmail_ui_user/main/routes/navigation_router.dart';
|
import 'package:tmail_ui_user/main/routes/navigation_router.dart';
|
||||||
|
import 'package:tmail_ui_user/main/routes/route_utils.dart';
|
||||||
import 'package:url_launcher/link.dart';
|
import 'package:url_launcher/link.dart';
|
||||||
|
|
||||||
class EmailTileBuilder with BaseEmailItemTile {
|
class EmailTileBuilder with BaseEmailItemTile {
|
||||||
@@ -91,7 +91,7 @@ class EmailTileBuilder with BaseEmailItemTile {
|
|||||||
color: AppColor.colorItemEmailSelectedDesktop)
|
color: AppColor.colorItemEmailSelectedDesktop)
|
||||||
: null,
|
: null,
|
||||||
child: Link(
|
child: Link(
|
||||||
uri: BrowserRouteUtils.generateRoutePathBrowser(
|
uri: RouteUtils.generateRoutePathBrowser(
|
||||||
AppRoutes.dashboard,
|
AppRoutes.dashboard,
|
||||||
NavigationRouter(
|
NavigationRouter(
|
||||||
emailId: _presentationEmail.id,
|
emailId: _presentationEmail.id,
|
||||||
@@ -118,7 +118,7 @@ class EmailTileBuilder with BaseEmailItemTile {
|
|||||||
color: Colors.white),
|
color: Colors.white),
|
||||||
alignment: Alignment.center,
|
alignment: Alignment.center,
|
||||||
child: Link(
|
child: Link(
|
||||||
uri: BrowserRouteUtils.generateRoutePathBrowser(
|
uri: RouteUtils.generateRoutePathBrowser(
|
||||||
AppRoutes.dashboard,
|
AppRoutes.dashboard,
|
||||||
NavigationRouter(
|
NavigationRouter(
|
||||||
emailId: _presentationEmail.id,
|
emailId: _presentationEmail.id,
|
||||||
|
|||||||
@@ -43,11 +43,11 @@ class AppPages {
|
|||||||
page: () => DeferredWidget(session.loadLibrary, () => session.SessionView()),
|
page: () => DeferredWidget(session.loadLibrary, () => session.SessionView()),
|
||||||
binding: SessionPageBindings()),
|
binding: SessionPageBindings()),
|
||||||
GetPage(
|
GetPage(
|
||||||
name: AppRoutes.dashboard,
|
name: AppRoutes.dashboard,
|
||||||
page: () => DeferredWidget(
|
page: () => DeferredWidget(
|
||||||
mailbox_dashboard.loadLibrary,
|
mailbox_dashboard.loadLibrary,
|
||||||
() => mailbox_dashboard.MailboxDashBoardView()),
|
() => mailbox_dashboard.MailboxDashBoardView()),
|
||||||
binding: MailboxDashBoardBindings()),
|
binding: MailboxDashBoardBindings()),
|
||||||
GetPage(
|
GetPage(
|
||||||
name: AppRoutes.dashboardWithParameter,
|
name: AppRoutes.dashboardWithParameter,
|
||||||
page: () => DeferredWidget(
|
page: () => DeferredWidget(
|
||||||
|
|||||||
@@ -1,17 +1,30 @@
|
|||||||
|
|
||||||
import 'package:core/data/model/query/query_parameter.dart';
|
import 'package:core/data/model/query/query_parameter.dart';
|
||||||
import 'package:core/data/network/config/service_path.dart';
|
import 'package:core/data/network/config/service_path.dart';
|
||||||
import 'package:core/utils/app_logger.dart';
|
|
||||||
import 'package:jmap_dart_client/jmap/core/id.dart';
|
import 'package:jmap_dart_client/jmap/core/id.dart';
|
||||||
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
||||||
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
||||||
import 'package:tmail_ui_user/features/login/data/extensions/service_path_extension.dart';
|
import 'package:tmail_ui_user/features/login/data/extensions/service_path_extension.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/navigation_router.dart';
|
import 'package:tmail_ui_user/main/routes/navigation_router.dart';
|
||||||
|
|
||||||
class BrowserRouteUtils {
|
class RouteUtils {
|
||||||
|
|
||||||
static String get baseOriginUrl => Uri.base.origin;
|
static String get baseOriginUrl => Uri.base.origin;
|
||||||
|
|
||||||
|
static String generateRoutePathMobile(String route, NavigationRouter router) {
|
||||||
|
ServicePath servicePath = ServicePath(route);
|
||||||
|
if (router.emailId != null) {
|
||||||
|
servicePath = servicePath.withPathParameter(router.emailId!.id.value);
|
||||||
|
}
|
||||||
|
servicePath = servicePath.withQueryParameters([
|
||||||
|
StringQueryParameter('type', router.dashboardType.name),
|
||||||
|
if (router.mailboxId != null)
|
||||||
|
StringQueryParameter('context', router.mailboxId!.id.value),
|
||||||
|
]);
|
||||||
|
|
||||||
|
return servicePath.path;
|
||||||
|
}
|
||||||
|
|
||||||
static Uri generateRoutePathBrowser(String route, NavigationRouter router) {
|
static Uri generateRoutePathBrowser(String route, NavigationRouter router) {
|
||||||
final baseRoutePath = '$baseOriginUrl/#$route';
|
final baseRoutePath = '$baseOriginUrl/#$route';
|
||||||
ServicePath servicePath = ServicePath(baseRoutePath);
|
ServicePath servicePath = ServicePath(baseRoutePath);
|
||||||
@@ -24,7 +37,6 @@ class BrowserRouteUtils {
|
|||||||
StringQueryParameter('context', router.mailboxId!.id.value),
|
StringQueryParameter('context', router.mailboxId!.id.value),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
log('BrowserRouteUtils::generateRoutePathForBrowser(): routePath: ${servicePath.path}');
|
|
||||||
return Uri.parse(servicePath.path);
|
return Uri.parse(servicePath.path);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -33,10 +45,6 @@ class BrowserRouteUtils {
|
|||||||
final typeParam = parameters['type'];
|
final typeParam = parameters['type'];
|
||||||
final contextPram = parameters['context'];
|
final contextPram = parameters['context'];
|
||||||
|
|
||||||
log('BrowserRouteUtils::parsingRouteParametersToNavigationRouter(): idParam: $idParam');
|
|
||||||
log('BrowserRouteUtils::parsingRouteParametersToNavigationRouter(): typeParam: $typeParam');
|
|
||||||
log('BrowserRouteUtils::parsingRouteParametersToNavigationRouter(): contextPram: $contextPram');
|
|
||||||
|
|
||||||
final emailId = idParam != null ? EmailId(Id(idParam)) : null;
|
final emailId = idParam != null ? EmailId(Id(idParam)) : null;
|
||||||
final mailboxId = contextPram != null ? MailboxId(Id(contextPram)) : null;
|
final mailboxId = contextPram != null ? MailboxId(Id(contextPram)) : null;
|
||||||
final dashboardType = typeParam == DashboardType.search.name
|
final dashboardType = typeParam == DashboardType.search.name
|
||||||
Reference in New Issue
Block a user