diff --git a/lib/features/email/presentation/action/email_ui_action.dart b/lib/features/email/presentation/action/email_ui_action.dart index b05711ef3..b3e9eb924 100644 --- a/lib/features/email/presentation/action/email_ui_action.dart +++ b/lib/features/email/presentation/action/email_ui_action.dart @@ -24,10 +24,6 @@ class RefreshChangeEmailAction extends EmailUIAction { List get props => [newState]; } -class CloseEmailDetailedViewToRedirectToTheInboxAction extends EmailUIAction {} - -class CloseEmailDetailedViewAction extends EmailUIAction {} - class HideEmailContentViewAction extends EmailUIAction {} class ShowEmailContentViewAction extends EmailUIAction {} diff --git a/lib/features/email/presentation/controller/email_supervisor_controller.dart b/lib/features/email/presentation/controller/email_supervisor_controller.dart deleted file mode 100644 index bee43932a..000000000 --- a/lib/features/email/presentation/controller/email_supervisor_controller.dart +++ /dev/null @@ -1,156 +0,0 @@ -import 'dart:collection'; - -import 'package:collection/collection.dart'; -import 'package:core/utils/platform_info.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -import 'package:get/get.dart'; -import 'package:jmap_dart_client/jmap/mail/email/email.dart'; -import 'package:model/email/presentation_email.dart'; -import 'package:model/extensions/list_presentation_email_extension.dart'; -import 'package:tmail_ui_user/features/email/presentation/model/email_loaded.dart'; -import 'package:tmail_ui_user/features/email/presentation/model/page_view_navigator_state.dart'; -import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart'; - -class EmailSupervisorController extends GetxController { - - final mailboxDashBoardController = Get.find(); - - final Queue presentationEmailsLoaded = Queue(); - PageController? pageController; - - int _currentEmailIndex = -1; - final List _currentListEmail = []; - - final pageViewNavigatorState = PageViewNavigatorState.none.obs; - final supportedPageView = RxBool(false); - final scrollPhysicsPageView = Rxn(); - - List get currentListEmail => _currentListEmail; - - int get currentEmailIndex => _currentEmailIndex; - - void setCurrentEmailIndex(int index) => _currentEmailIndex = index; - - @override - void onInit() { - super.onInit(); - updateScrollPhysicPageView(false); - } - - @override - void onClose() { - pageController?.dispose(); - pageController = null; - super.onClose(); - } - - void updateNewCurrentListEmail() { - _currentListEmail.clear(); - if (isSearchActivatedOnMobile) { - _currentListEmail.addAll(mailboxDashBoardController.listResultSearch); - } else { - _currentListEmail.addAll(mailboxDashBoardController.emailsInCurrentMailbox); - } - } - - bool get isSearchActivatedOnMobile { - return mailboxDashBoardController.searchController.isSearchEmailRunning - && PlatformInfo.isMobile; - } - - void createPageControllerAndJumpToEmailById(EmailId currentEmailId) { - _currentEmailIndex = _currentListEmail.matchedIndex(currentEmailId); - if (pageController != null && pageController?.hasClients == true) { - pageController?.jumpToPage(_currentEmailIndex); - } else { - pageController = PageController(initialPage: _currentEmailIndex); - } - _updateStatePageViewNavigator(); - } - - void onPageChanged(int index) { - updateScrollPhysicPageView(false); - mailboxDashBoardController.openEmailDetailedView(currentListEmail[index]); - } - - void _updateStatePageViewNavigator() { - if (_currentListEmail.length <= 1) { - pageViewNavigatorState.value = PageViewNavigatorState.none; - } else { - if (_currentEmailIndex > 0 && _currentEmailIndex < _currentListEmail.length - 1) { - pageViewNavigatorState.value = PageViewNavigatorState.all; - } else if (_currentEmailIndex <= 0) { - pageViewNavigatorState.value = PageViewNavigatorState.previous; - } else if (_currentEmailIndex >= _currentListEmail.length - 1) { - pageViewNavigatorState.value = PageViewNavigatorState.next; - } - } - } - - bool get nextEmailActivated { - return pageViewNavigatorState.value == PageViewNavigatorState.next || - pageViewNavigatorState.value == PageViewNavigatorState.all; - } - - bool get previousEmailActivated { - return pageViewNavigatorState.value == PageViewNavigatorState.previous || - pageViewNavigatorState.value == PageViewNavigatorState.all; - } - - void moveToNextEmail() { - if (nextEmailActivated) { - _currentEmailIndex--; - _jumpToPage(_currentEmailIndex); - } - } - - void backToPreviousEmail() { - if (previousEmailActivated) { - _currentEmailIndex++; - _jumpToPage(_currentEmailIndex); - } - } - - void _jumpToPage(int page) { - if (PlatformInfo.isWeb) { - onPageChanged(page); - } else { - pageController?.animateToPage( - page, - duration: const Duration(milliseconds: 500), - curve: Curves.linear); - } - } - - void updateScrollPhysicPageView(bool isScrollPageViewActivated) { - if (PlatformInfo.isMobile) { - if (!isScrollPageViewActivated) { - scrollPhysicsPageView.value = const NeverScrollableScrollPhysics(); - } else { - scrollPhysicsPageView.value = null; - } - } - } - - EmailLoaded? getEmailInQueueByEmailId(EmailId emailId) { - return presentationEmailsLoaded.firstWhereOrNull((e) => e.emailCurrent!.id == emailId); - } - - void popFirstEmailQueue() { - presentationEmailsLoaded.removeFirst(); - } - - void popEmailQueue(EmailId? emailId) { - presentationEmailsLoaded.removeWhere((e) => e.emailCurrent!.id == emailId); - } - - void pushEmailQueue(EmailLoaded emailLoaded) { - presentationEmailsLoaded.add(emailLoaded); - } - - void disposePageViewController() { - pageController?.dispose(); - pageController = null; - } -} \ No newline at end of file diff --git a/lib/features/email/presentation/controller/single_email_controller.dart b/lib/features/email/presentation/controller/single_email_controller.dart index 173152cb6..f0e8de4f9 100644 --- a/lib/features/email/presentation/controller/single_email_controller.dart +++ b/lib/features/email/presentation/controller/single_email_controller.dart @@ -387,15 +387,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin { }); obxListeners.add(ever(mailboxDashBoardController.emailUIAction, (action) { - if (action is CloseEmailDetailedViewToRedirectToTheInboxAction) { - _resetToOriginalValue(isEmailClosing: true); - mailboxDashBoardController.clearSelectedEmail(); - mailboxDashBoardController.dispatchRoute(DashboardRoutes.thread); - mailboxDashBoardController.clearEmailUIAction(); - } else if (action is CloseEmailDetailedViewAction) { - closeEmailView(context: currentContext); - mailboxDashBoardController.clearEmailUIAction(); - } else if (action is HideEmailContentViewAction) { + if (action is HideEmailContentViewAction) { isEmailContentHidden.value = true; mailboxDashBoardController.clearEmailUIAction(); } else if (action is ShowEmailContentViewAction) { diff --git a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart index 660240fd4..fb112c6dd 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart @@ -908,13 +908,9 @@ class MailboxDashBoardController extends ReloadableController selectedEmail.value = null; } - void openEmailDetailedView(PresentationEmail presentationEmail, {bool singleEmail = false}) { + void openEmailDetailedView(PresentationEmail presentationEmail) { setSelectedEmail(presentationEmail); - if (singleEmail) { - dispatchRoute(DashboardRoutes.emailDetailed); - } else { - dispatchRoute(DashboardRoutes.threadDetailed); - } + dispatchRoute(DashboardRoutes.threadDetailed); if (PlatformInfo.isWeb && presentationEmail.routeWeb != null) { RouteUtils.replaceBrowserHistory( title: 'Email-${presentationEmail.id?.id.value ?? ''}', @@ -947,9 +943,7 @@ class MailboxDashBoardController extends ReloadableController void handleAdvancedSearchEmail() { log('MailboxDashBoardController::handleAdvancedSearchEmail:'); - if (_searchInsideEmailDetailedViewIsActive()) { - _closeEmailDetailedView(); - } else if (_searchInsideThreadDetailViewIsActive()) { + if (_searchInsideThreadDetailViewIsActive()) { _closeEmailDetailedView(); } _unSelectedMailbox(); @@ -962,9 +956,7 @@ class MailboxDashBoardController extends ReloadableController void handleClearAdvancedSearchFilterEmail() { log('MailboxDashBoardController::handleClearAdvancedSearchFilterEmail:'); clearFilterMessageOption(); - if (_searchInsideEmailDetailedViewIsActive()) { - _closeEmailDetailedView(); - } else if (_searchInsideThreadDetailViewIsActive()) { + if (_searchInsideThreadDetailViewIsActive()) { _closeEmailDetailedView(); } _unSelectedMailbox(); @@ -977,9 +969,7 @@ class MailboxDashBoardController extends ReloadableController final isMailAddress = EmailUtils.isEmailAddressValid(queryString); log('MailboxDashBoardController::searchEmailByQueryString():QueryString = $queryString | isMailAddress = $isMailAddress'); clearFilterMessageOption(); - if (_searchInsideEmailDetailedViewIsActive()) { - _closeEmailDetailedView(); - } else if (_searchInsideThreadDetailViewIsActive()) { + if (_searchInsideThreadDetailViewIsActive()) { _closeEmailDetailedView(); } _unSelectedMailbox(); @@ -1002,13 +992,6 @@ class MailboxDashBoardController extends ReloadableController dispatchAction(StartSearchEmailAction()); } - bool _searchInsideEmailDetailedViewIsActive() { - return PlatformInfo.isWeb - && currentContext != null - && responsiveUtils.isDesktop(currentContext!) - && dashboardRoute.value == DashboardRoutes.emailDetailed; - } - bool _searchInsideThreadDetailViewIsActive() { return PlatformInfo.isWeb && currentContext != null @@ -2824,10 +2807,6 @@ class MailboxDashBoardController extends ReloadableController void redirectToInboxAction() { log('MailboxDashBoardController::redirectToInboxAction:'); - if (dashboardRoute.value == DashboardRoutes.emailDetailed) { - dispatchEmailUIAction(CloseEmailDetailedViewToRedirectToTheInboxAction()); - } - final inboxId = getMailboxIdByRole(PresentationMailbox.roleInbox); if (inboxId == null) return; @@ -2908,9 +2887,7 @@ class MailboxDashBoardController extends ReloadableController FocusManager.instance.primaryFocus?.unfocus(); clearFilterMessageOption(); searchController.clearFilterSuggestion(); - if (_searchInsideEmailDetailedViewIsActive()) { - _closeEmailDetailedView(); - } else if (_searchInsideThreadDetailViewIsActive()) { + if (_searchInsideThreadDetailViewIsActive()) { _closeEmailDetailedView(); } _unSelectedMailbox(); @@ -2992,18 +2969,6 @@ class MailboxDashBoardController extends ReloadableController bool _navigateToScreen() { log('MailboxDashBoardController::_navigateToScreen: dashboardRoute: $dashboardRoute'); switch(dashboardRoute.value) { - case DashboardRoutes.emailDetailed: - if (PlatformInfo.isMobile) { - if (currentContext != null && canBack(currentContext!)) { - return false; - } else { - dispatchEmailUIAction(CloseEmailDetailedViewAction()); - return true; - } - } else { - dispatchEmailUIAction(CloseEmailDetailedViewAction()); - return true; - } case DashboardRoutes.thread: if (PlatformInfo.isMobile) { if (currentContext != null && canBack(currentContext!)) { diff --git a/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view.dart b/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view.dart index b0be5ccd7..52826e414 100644 --- a/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view.dart +++ b/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view.dart @@ -3,7 +3,6 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:focus_detector_v2/focus_detector_v2.dart'; import 'package:get/get.dart'; -import 'package:tmail_ui_user/features/email/presentation/email_view.dart'; import 'package:tmail_ui_user/features/email/presentation/widgets/email_view_empty_widget.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/base_mailbox_dashboard_view.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/dashboard_routes.dart'; @@ -43,15 +42,6 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView { mobile: buildScaffoldHaveDrawer(body: ThreadView()), ); - case DashboardRoutes.emailDetailed: - return controller.searchController.isSearchEmailRunning - ? const EmailView() - : buildResponsiveWithDrawer( - left: ThreadView(), - right: const EmailView(), - mobile: const EmailView(), - ); - case DashboardRoutes.threadDetailed: return controller.searchController.isSearchEmailRunning ? const ThreadDetailView() diff --git a/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view_web.dart b/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view_web.dart index 588a3ee75..456998f1f 100644 --- a/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view_web.dart +++ b/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view_web.dart @@ -12,8 +12,8 @@ import 'package:tmail_ui_user/features/base/widget/popup_menu/popup_menu_item_ac import 'package:tmail_ui_user/features/base/widget/report_message_banner.dart'; import 'package:tmail_ui_user/features/base/widget/scrollbar_list_view.dart'; import 'package:tmail_ui_user/features/composer/presentation/view/web/composer_overlay_view.dart'; -import 'package:tmail_ui_user/features/email/presentation/email_view.dart'; import 'package:tmail_ui_user/features/email/presentation/model/composer_arguments.dart'; +import 'package:tmail_ui_user/features/email/presentation/widgets/email_view_empty_widget.dart'; import 'package:tmail_ui_user/features/home/domain/extensions/session_extensions.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/mailbox_view_web.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/model/spam_report_state.dart'; @@ -279,8 +279,6 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView { switch(controller.dashboardRoute.value) { case DashboardRoutes.thread: return _buildThreadViewForWebDesktop(context); - case DashboardRoutes.emailDetailed: - return const EmailView(); case DashboardRoutes.threadDetailed: return const ThreadDetailView(); default: @@ -307,11 +305,11 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView { ); default: return controller.searchController.isSearchEmailRunning - ? const EmailView() + ? const ThreadDetailView() : buildResponsiveWithDrawer( left: ThreadView(), - right: const EmailView(), - mobile: const EmailView(), + right: const EmailViewEmptyWidget(), + mobile: ThreadView(), ); } }), @@ -321,8 +319,6 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView { return buildScaffoldHaveDrawer(body: ThreadView()); case DashboardRoutes.threadDetailed: return const ThreadDetailView(); - case DashboardRoutes.emailDetailed: - return const EmailView(); case DashboardRoutes.searchEmail: return SearchEmailView(); default: diff --git a/lib/features/mailbox_dashboard/presentation/model/dashboard_routes.dart b/lib/features/mailbox_dashboard/presentation/model/dashboard_routes.dart index 375eae627..d272287cf 100644 --- a/lib/features/mailbox_dashboard/presentation/model/dashboard_routes.dart +++ b/lib/features/mailbox_dashboard/presentation/model/dashboard_routes.dart @@ -1,7 +1,6 @@ enum DashboardRoutes { thread, - emailDetailed, threadDetailed, searchEmail, waiting, diff --git a/test/features/email/presentation/controller/single_email_controller_test.dart b/test/features/email/presentation/controller/single_email_controller_test.dart index c929aa83b..d6e4f1202 100644 --- a/test/features/email/presentation/controller/single_email_controller_test.dart +++ b/test/features/email/presentation/controller/single_email_controller_test.dart @@ -28,24 +28,23 @@ import 'package:tmail_ui_user/features/email/domain/model/event_action.dart'; import 'package:tmail_ui_user/features/email/domain/state/get_email_content_state.dart'; import 'package:tmail_ui_user/features/email/domain/state/parse_calendar_event_state.dart'; import 'package:tmail_ui_user/features/email/domain/usecases/calendar_event_accept_interactor.dart'; -import 'package:tmail_ui_user/features/email/domain/usecases/download_all_attachments_for_web_interactor.dart'; -import 'package:tmail_ui_user/features/email/domain/usecases/export_all_attachments_interactor.dart'; -import 'package:tmail_ui_user/features/email/domain/usecases/get_html_content_from_attachment_interactor.dart'; -import 'package:tmail_ui_user/features/email/domain/usecases/maybe_calendar_event_interactor.dart'; import 'package:tmail_ui_user/features/email/domain/usecases/calendar_event_reject_interactor.dart'; +import 'package:tmail_ui_user/features/email/domain/usecases/download_all_attachments_for_web_interactor.dart'; import 'package:tmail_ui_user/features/email/domain/usecases/download_attachment_for_web_interactor.dart'; import 'package:tmail_ui_user/features/email/domain/usecases/download_attachments_interactor.dart'; +import 'package:tmail_ui_user/features/email/domain/usecases/export_all_attachments_interactor.dart'; import 'package:tmail_ui_user/features/email/domain/usecases/export_attachment_interactor.dart'; import 'package:tmail_ui_user/features/email/domain/usecases/get_email_content_interactor.dart'; +import 'package:tmail_ui_user/features/email/domain/usecases/get_html_content_from_attachment_interactor.dart'; import 'package:tmail_ui_user/features/email/domain/usecases/mark_as_email_read_interactor.dart'; import 'package:tmail_ui_user/features/email/domain/usecases/mark_as_star_email_interactor.dart'; +import 'package:tmail_ui_user/features/email/domain/usecases/maybe_calendar_event_interactor.dart'; import 'package:tmail_ui_user/features/email/domain/usecases/parse_calendar_event_interactor.dart'; import 'package:tmail_ui_user/features/email/domain/usecases/parse_email_by_blob_id_interactor.dart'; import 'package:tmail_ui_user/features/email/domain/usecases/preview_email_from_eml_file_interactor.dart'; import 'package:tmail_ui_user/features/email/domain/usecases/print_email_interactor.dart'; import 'package:tmail_ui_user/features/email/domain/usecases/store_opened_email_interactor.dart'; import 'package:tmail_ui_user/features/email/presentation/action/email_ui_action.dart'; -import 'package:tmail_ui_user/features/email/presentation/controller/email_supervisor_controller.dart'; import 'package:tmail_ui_user/features/email/presentation/controller/single_email_controller.dart'; import 'package:tmail_ui_user/features/email/presentation/model/blob_calendar_event.dart'; import 'package:tmail_ui_user/features/login/data/network/interceptors/authorization_interceptors.dart'; @@ -85,7 +84,6 @@ const fallbackGenerators = { MockSpec(), MockSpec(), MockSpec(fallbackGenerators: fallbackGenerators), - MockSpec(fallbackGenerators: fallbackGenerators), MockSpec(fallbackGenerators: fallbackGenerators), MockSpec(fallbackGenerators: fallbackGenerators), MockSpec(fallbackGenerators: fallbackGenerators), @@ -129,7 +127,6 @@ void main() { final getAllIdentitiesInteractor = MockGetAllIdentitiesInteractor(); final storeOpenedEmailInteractor = MockStoreOpenedEmailInteractor(); final mailboxDashboardController = MockMailboxDashBoardController(); - final emailSupervisorController = MockEmailSupervisorController(); final downloadManager = MockDownloadManager(); final cachingManager = MockCachingManager(); final languageCacheManager = MockLanguageCacheManager(); @@ -168,7 +165,6 @@ void main() { setUpAll(() { Get.put(mailboxDashboardController); - Get.put(emailSupervisorController); Get.put(downloadManager); Get.put(cachingManager); Get.put(languageCacheManager); @@ -368,7 +364,6 @@ void main() { when(mailboxDashboardController.emailUIAction).thenReturn(Rxn(EmailUIAction())); when(mailboxDashboardController.viewState).thenReturn(Rx(Right(UIState.idle))); when(mailboxDashboardController.accountId).thenReturn(Rxn(AccountFixtures.aliceAccountId)); - when(emailSupervisorController.scrollPhysicsPageView).thenReturn(Rxn()); singleEmailController.onInit(); mailboxDashboardController.accountId.refresh(); @@ -427,7 +422,6 @@ void main() { when(mailboxDashboardController.emailUIAction).thenReturn(Rxn(EmailUIAction())); when(mailboxDashboardController.viewState).thenReturn(Rx(Right(UIState.idle))); when(mailboxDashboardController.accountId).thenReturn(Rxn(AccountFixtures.aliceAccountId)); - when(emailSupervisorController.scrollPhysicsPageView).thenReturn(Rxn()); singleEmailController.onInit(); mailboxDashboardController.accountId.refresh();