diff --git a/lib/features/composer/presentation/composer_controller.dart b/lib/features/composer/presentation/composer_controller.dart index 298b967d4..1af147337 100644 --- a/lib/features/composer/presentation/composer_controller.dart +++ b/lib/features/composer/presentation/composer_controller.dart @@ -41,7 +41,6 @@ import 'package:tmail_ui_user/features/composer/presentation/model/screen_displa import 'package:tmail_ui_user/features/email/domain/state/get_email_content_state.dart'; import 'package:tmail_ui_user/features/email/domain/usecases/get_email_content_interactor.dart'; import 'package:tmail_ui_user/features/email/presentation/model/composer_arguments.dart'; -import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/action/dashboard_action.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/mailbox_dashboard_controller.dart'; import 'package:tmail_ui_user/features/manage_account/domain/state/get_all_identities_state.dart'; import 'package:tmail_ui_user/features/manage_account/domain/usecases/get_all_identities_interactor.dart'; @@ -800,7 +799,7 @@ class ComposerController extends BaseController { } if (BuildUtils.isWeb) { - mailboxDashBoardController.dispatchAction(CloseComposeEmailAction()); + mailboxDashBoardController.closeComposerOverlay(); } else { if (canPop) popBack(); } @@ -851,7 +850,7 @@ class ComposerController extends BaseController { void closeComposerWeb() { FocusManager.instance.primaryFocus?.unfocus(); - mailboxDashBoardController.dispatchAction(CloseComposeEmailAction()); + mailboxDashBoardController.closeComposerOverlay(); } void displayScreenTypeComposerAction(ScreenDisplayMode displayMode) { @@ -867,7 +866,7 @@ class ComposerController extends BaseController { void deleteComposer() { FocusManager.instance.primaryFocus?.unfocus(); - mailboxDashBoardController.dispatchAction(CloseComposeEmailAction()); + mailboxDashBoardController.closeComposerOverlay(); } void toggleDisplayAttachments() { diff --git a/lib/features/email/presentation/email_controller.dart b/lib/features/email/presentation/email_controller.dart index 6b9917212..088384e3b 100644 --- a/lib/features/email/presentation/email_controller.dart +++ b/lib/features/email/presentation/email_controller.dart @@ -40,7 +40,6 @@ import 'package:tmail_ui_user/features/email/presentation/model/composer_argumen import 'package:tmail_ui_user/features/email/presentation/widgets/email_address_bottom_sheet_builder.dart'; import 'package:tmail_ui_user/features/email/presentation/widgets/email_address_dialog_builder.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_actions.dart'; -import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/action/dashboard_action.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/mailbox_dashboard_controller.dart'; import 'package:tmail_ui_user/features/thread/presentation/model/delete_action_type.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; @@ -583,13 +582,8 @@ class EmailController extends BaseController { emailActionType: EmailActionType.composeFromEmailAddress, emailAddress: emailAddress, mailboxRole: mailboxDashBoardController.selectedMailbox.value?.role); - if (kIsWeb) { - if (mailboxDashBoardController.dashBoardAction.value is! ComposeEmailAction) { - mailboxDashBoardController.dispatchAction(ComposeEmailAction(arguments: arguments)); - } - } else { - push(AppRoutes.COMPOSER, arguments: arguments); - } + + mailboxDashBoardController.goToComposer(arguments); } void openMailToLink(Uri? uri) { @@ -602,15 +596,11 @@ class EmailController extends BaseController { emailActionType: EmailActionType.composeFromEmailAddress, emailAddress: emailAddress, mailboxRole: mailboxDashBoardController.selectedMailbox.value?.role); - if (kIsWeb) { - if (mailboxDashBoardController.dashBoardAction.value is! ComposeEmailAction) { - mailboxDashBoardController.dispatchAction(ComposeEmailAction(arguments: arguments)); - } - if (Get.currentRoute == AppRoutes.EMAIL) { - popBack(); - } - } else { - push(AppRoutes.COMPOSER, arguments: arguments); + + mailboxDashBoardController.goToComposer(arguments); + + if (BuildUtils.isWeb && Get.currentRoute == AppRoutes.EMAIL) { + popBack(); } } } @@ -657,7 +647,10 @@ class EmailController extends BaseController { void pressEmailAction(EmailActionType emailActionType) { if (emailActionType == EmailActionType.compose) { - composeEmailAction(); + mailboxDashBoardController.goToComposer(ComposerArguments()); + if (BuildUtils.isWeb && Get.currentRoute == AppRoutes.EMAIL) { + popBack(); + } } else { final arguments = ComposerArguments( emailActionType: emailActionType, @@ -666,29 +659,10 @@ class EmailController extends BaseController { attachments: emailActionType == EmailActionType.forward ? attachments : null, mailboxRole: mailboxDashBoardController.selectedMailbox.value?.role); - if (kIsWeb) { - if (mailboxDashBoardController.dashBoardAction.value is! ComposeEmailAction) { - mailboxDashBoardController.dispatchAction(ComposeEmailAction(arguments: arguments)); - } - if (Get.currentRoute == AppRoutes.EMAIL) { - popBack(); - } - } else { - push(AppRoutes.COMPOSER, arguments: arguments); - } - } - } - - void composeEmailAction() { - if (kIsWeb) { - if (mailboxDashBoardController.dashBoardAction.value is! ComposeEmailAction) { - mailboxDashBoardController.dispatchAction(ComposeEmailAction(arguments: ComposerArguments())); - } - if (Get.currentRoute == AppRoutes.EMAIL) { + mailboxDashBoardController.goToComposer(arguments); + if (BuildUtils.isWeb && Get.currentRoute == AppRoutes.EMAIL) { popBack(); } - } else { - push(AppRoutes.COMPOSER, arguments: ComposerArguments()); } } } \ No newline at end of file diff --git a/lib/features/mailbox/presentation/mailbox_view_web.dart b/lib/features/mailbox/presentation/mailbox_view_web.dart index 82261d626..b757d8835 100644 --- a/lib/features/mailbox/presentation/mailbox_view_web.dart +++ b/lib/features/mailbox/presentation/mailbox_view_web.dart @@ -6,6 +6,7 @@ import 'package:model/model.dart'; import 'package:package_info_plus/package_info_plus.dart'; import 'package:tmail_ui_user/features/base/mixin/app_loader_mixin.dart'; import 'package:tmail_ui_user/features/base/mixin/popup_menu_widget_mixin.dart'; +import 'package:tmail_ui_user/features/email/presentation/model/composer_arguments.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/mailbox_controller.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_actions.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_categories.dart'; @@ -121,7 +122,7 @@ class MailboxView extends GetWidget with AppLoaderMixin, Popu ..radiusSplash(10) ..padding(const EdgeInsets.symmetric(vertical: 8)) ..textStyle(const TextStyle(fontSize: 15, color: Colors.white, fontWeight: FontWeight.w500)) - ..onPressActionClick(() => controller.mailboxDashBoardController.composeEmailAction()) + ..onPressActionClick(() => controller.mailboxDashBoardController.goToComposer(ComposerArguments())) ..text(AppLocalizations.of(context).compose, isVertical: false)) .build()); } diff --git a/lib/features/mailbox_dashboard/presentation/action/dashboard_action.dart b/lib/features/mailbox_dashboard/presentation/action/dashboard_action.dart index bcc9c6dce..e1c7bfb82 100644 --- a/lib/features/mailbox_dashboard/presentation/action/dashboard_action.dart +++ b/lib/features/mailbox_dashboard/presentation/action/dashboard_action.dart @@ -4,7 +4,6 @@ import 'package:model/email/email_action_type.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/thread/domain/model/filter_message_option.dart'; -import 'package:tmail_ui_user/main/routes/router_arguments.dart'; class DashBoardAction extends UIAction { static final idle = DashBoardAction(); @@ -15,24 +14,6 @@ class DashBoardAction extends UIAction { List get props => []; } -class ComposeEmailAction extends DashBoardAction { - - final RouterArguments? arguments; - - ComposeEmailAction({this.arguments}); - - @override - List get props => [arguments]; -} - -class CloseComposeEmailAction extends DashBoardAction { - - CloseComposeEmailAction(); - - @override - List get props => []; -} - class RefreshAllEmailAction extends DashBoardAction { RefreshAllEmailAction(); diff --git a/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_controller.dart b/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_controller.dart index e84e2df3a..dcaf1f762 100644 --- a/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_controller.dart @@ -48,6 +48,7 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/quick_s import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_email_drafts_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/save_recent_search_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/action/dashboard_action.dart'; +import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/composer_overlay_state.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/email_receive_time_type.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/quick_search_filter.dart'; import 'package:tmail_ui_user/features/manage_account/domain/usecases/log_out_oidc_interactor.dart'; @@ -94,6 +95,7 @@ class MailboxDashBoardController extends ReloadableController { final listEmailSelected = [].obs; final listFilterQuickSearch = RxList(); final emailReceiveTimeType = Rxn(); + final composerOverlayState = ComposerOverlayState.inActive.obs; SearchQuery? searchQuery; Session? sessionCurrent; @@ -398,16 +400,21 @@ class MailboxDashBoardController extends ReloadableController { void dispatchAction(UIAction action) { log('MailboxDashBoardController::dispatchAction(): ${action.runtimeType}'); - if (action is ComposeEmailAction) { - routerArguments = action.arguments; - ComposerBindings().dependencies(); - } else if (action is CloseComposeEmailAction) { - routerArguments = null; - Get.delete(); - } dashBoardAction.value = action; } + void openComposerOverlay(RouterArguments? arguments) { + routerArguments = arguments; + ComposerBindings().dependencies(); + composerOverlayState.value = ComposerOverlayState.active; + } + + void closeComposerOverlay() { + routerArguments = null; + Get.delete(); + composerOverlayState.value = ComposerOverlayState.inActive; + } + void dispatchRoute(String route) { routePath.value = route; log('MailboxDashBoardController::dispatchRoute(): $route'); @@ -543,20 +550,10 @@ class MailboxDashBoardController extends ReloadableController { } } - void composeEmailAction() { - if (kIsWeb) { - if (dashBoardAction.value is! ComposeEmailAction) { - dispatchAction(ComposeEmailAction(arguments: ComposerArguments())); - } - } else { - push(AppRoutes.COMPOSER, arguments: ComposerArguments()); - } - } - void goToComposer(ComposerArguments arguments) { - if (kIsWeb) { - if (dashBoardAction.value is! ComposeEmailAction) { - dispatchAction(ComposeEmailAction(arguments: arguments)); + if (BuildUtils.isWeb) { + if (composerOverlayState.value == ComposerOverlayState.inActive) { + openComposerOverlay(arguments); } } else { push(AppRoutes.COMPOSER, arguments: arguments); diff --git a/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view.dart b/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view.dart index e634f79f2..700b269aa 100644 --- a/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view.dart +++ b/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view.dart @@ -5,8 +5,8 @@ import 'package:tmail_ui_user/features/base/mixin/network_connection_mixin.dart' import 'package:tmail_ui_user/features/composer/presentation/composer_view.dart'; import 'package:tmail_ui_user/features/email/presentation/email_view.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/mailbox_view.dart'; -import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/action/dashboard_action.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/mailbox_dashboard_controller.dart'; +import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/composer_overlay_state.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/model/app_setting.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/model/reading_pane.dart'; import 'package:tmail_ui_user/features/thread/presentation/thread_view.dart'; @@ -42,7 +42,7 @@ class MailboxDashBoardView extends GetWidget with Ne landscapeMobile: ThreadView(), mobile: ThreadView(), ), - Obx(() => controller.dashBoardAction.value is ComposeEmailAction + Obx(() => controller.composerOverlayState.value == ComposerOverlayState.active ? ComposerView() : const SizedBox.shrink()), Obx(() => controller.isNetworkConnectionAvailable() @@ -90,7 +90,7 @@ class MailboxDashBoardView extends GetWidget with Ne Widget _buildLargeScreenView(BuildContext context) { if (controller.isDrawerOpen && (_responsiveUtils.isDesktop(context) || _responsiveUtils.isTabletLarge(context))) { - WidgetsBinding.instance?.addPostFrameCallback((_) { + WidgetsBinding.instance.addPostFrameCallback((_) { controller.closeMailboxMenuDrawer(); }); } 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 71fdf8eda..c0a8cbc29 100644 --- a/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view_web.dart +++ b/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view_web.dart @@ -9,6 +9,7 @@ import 'package:tmail_ui_user/features/mailbox/presentation/mailbox_view_web.dar import 'package:tmail_ui_user/features/mailbox_dashboard/domain/model/recent_search.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/action/dashboard_action.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/composer_overlay_state.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/quick_search_filter.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/email_quick_search_item_tile_widget.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/recent_search_item_tile_widget.dart'; @@ -97,7 +98,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView { tablet: ThreadView(), mobile: ThreadView(), ), - Obx(() => controller.dashBoardAction.value is ComposeEmailAction + Obx(() => controller.composerOverlayState.value == ComposerOverlayState.active ? ComposerView() : const SizedBox.shrink()), Obx(() => controller.isNetworkConnectionAvailable() diff --git a/lib/features/mailbox_dashboard/presentation/model/composer_overlay_state.dart b/lib/features/mailbox_dashboard/presentation/model/composer_overlay_state.dart new file mode 100644 index 000000000..ecef007f3 --- /dev/null +++ b/lib/features/mailbox_dashboard/presentation/model/composer_overlay_state.dart @@ -0,0 +1,4 @@ + +enum ComposerOverlayState { + active, inActive +} \ No newline at end of file diff --git a/lib/features/thread/presentation/thread_controller.dart b/lib/features/thread/presentation/thread_controller.dart index 704522325..407894164 100644 --- a/lib/features/thread/presentation/thread_controller.dart +++ b/lib/features/thread/presentation/thread_controller.dart @@ -1275,14 +1275,6 @@ class ThreadController extends BaseController { presentationEmail: presentationEmail, mailboxRole: mailboxDashBoardController.selectedMailbox.value?.role); - if (kIsWeb) { - mailboxDashBoardController.dispatchAction(ComposeEmailAction(arguments: arguments)); - } else { - push(AppRoutes.COMPOSER, arguments: arguments); - } - } - - void composeEmailAction() { - mailboxDashBoardController.composeEmailAction(); + mailboxDashBoardController.goToComposer(arguments); } } \ No newline at end of file diff --git a/lib/features/thread/presentation/thread_view.dart b/lib/features/thread/presentation/thread_view.dart index d65bb2c54..e0a37e1ae 100644 --- a/lib/features/thread/presentation/thread_view.dart +++ b/lib/features/thread/presentation/thread_view.dart @@ -4,6 +4,7 @@ import 'package:flutter_svg/flutter_svg.dart'; import 'package:get/get.dart'; import 'package:model/model.dart'; import 'package:tmail_ui_user/features/base/mixin/app_loader_mixin.dart'; +import 'package:tmail_ui_user/features/email/presentation/model/composer_arguments.dart'; import 'package:tmail_ui_user/features/email/presentation/widgets/email_action_cupertino_action_sheet_action_builder.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/model/recent_search.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/mixin/filter_email_popup_menu_mixin.dart'; @@ -379,7 +380,7 @@ class ThreadView extends GetWidget with AppLoaderMixin, text: Padding(padding: const EdgeInsets.only(right: 10), child: Text(AppLocalizations.of(context).compose, style: const TextStyle(color: AppColor.colorTextButton, fontSize: 15.0, fontWeight: FontWeight.w500))), - onPress: () => controller.composeEmailAction(), + onPress: () => controller.mailboxDashBoardController.goToComposer(ComposerArguments()), scrollController: controller.listEmailController, color: Colors.white, elevation: 4.0,