TF-1813 Display SendingQueue mailbox
(cherry picked from commit 3e3667777075ba4029d66302009d81eadf18b6d2)
This commit is contained in:
@@ -48,6 +48,7 @@ import 'package:tmail_ui_user/features/composer/presentation/extensions/email_ac
|
||||
import 'package:tmail_ui_user/features/composer/presentation/model/image_source.dart';
|
||||
import 'package:tmail_ui_user/features/composer/presentation/model/inline_image.dart';
|
||||
import 'package:tmail_ui_user/features/composer/presentation/model/screen_display_mode.dart';
|
||||
import 'package:tmail_ui_user/features/composer/presentation/model/sending_email_arguments.dart';
|
||||
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';
|
||||
@@ -390,7 +391,9 @@ class ComposerController extends BaseController {
|
||||
}
|
||||
|
||||
void _initEmail() {
|
||||
final arguments = kIsWeb ? mailboxDashBoardController.routerArguments : Get.arguments;
|
||||
final arguments = PlatformInfo.isWeb
|
||||
? mailboxDashBoardController.composerArguments
|
||||
: Get.arguments;
|
||||
if (arguments is ComposerArguments) {
|
||||
composerArguments.value = arguments;
|
||||
injectAutoCompleteBindings(
|
||||
@@ -809,14 +812,25 @@ class ComposerController extends BaseController {
|
||||
? CreateNewMailboxRequest(Id(_uuid.v1()), PresentationMailbox.outboxMailboxName)
|
||||
: null;
|
||||
|
||||
mailboxDashBoardController.handleSendEmailAction(session, accountId, emailRequest, mailboxRequest);
|
||||
final sendingEmailArguments = SendingEmailArguments(
|
||||
session,
|
||||
accountId,
|
||||
emailRequest,
|
||||
mailboxRequest
|
||||
);
|
||||
uploadController.clearInlineFileUploaded();
|
||||
}
|
||||
|
||||
if (BuildUtils.isWeb) {
|
||||
closeComposerWeb();
|
||||
if (PlatformInfo.isWeb) {
|
||||
closeComposerWeb(result: sendingEmailArguments);
|
||||
} else {
|
||||
popBack(result: sendingEmailArguments);
|
||||
}
|
||||
} else {
|
||||
popBack();
|
||||
if (PlatformInfo.isWeb) {
|
||||
closeComposerWeb();
|
||||
} else {
|
||||
popBack();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1170,9 +1184,9 @@ class ComposerController extends BaseController {
|
||||
FocusManager.instance.primaryFocus?.unfocus();
|
||||
}
|
||||
|
||||
void closeComposerWeb() {
|
||||
void closeComposerWeb({dynamic result}) {
|
||||
FocusManager.instance.primaryFocus?.unfocus();
|
||||
mailboxDashBoardController.closeComposerOverlay();
|
||||
mailboxDashBoardController.closeComposerOverlay(result: result);
|
||||
}
|
||||
|
||||
void displayScreenTypeComposerAction(ScreenDisplayMode displayMode) {
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/session/session.dart';
|
||||
import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_request.dart';
|
||||
import 'package:tmail_ui_user/main/routes/router_arguments.dart';
|
||||
|
||||
class SendingEmailArguments extends RouterArguments {
|
||||
final Session session;
|
||||
final AccountId accountId;
|
||||
final EmailRequest emailRequest;
|
||||
final CreateNewMailboxRequest? mailboxRequest;
|
||||
|
||||
SendingEmailArguments(this.session, this.accountId, this.emailRequest, this.mailboxRequest);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [session, accountId, emailRequest, mailboxRequest];
|
||||
}
|
||||
@@ -137,7 +137,9 @@ class EmailView extends GetWidget<SingleEmailController> {
|
||||
if (BuildUtils.isWeb) {
|
||||
return responsiveUtils.isTabletLarge(context);
|
||||
} else {
|
||||
return responsiveUtils.isLandscapeTablet(context) || responsiveUtils.isDesktop(context);
|
||||
return responsiveUtils.isLandscapeTablet(context) ||
|
||||
responsiveUtils.isDesktop(context) ||
|
||||
responsiveUtils.isTabletLarge(context);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -200,7 +200,7 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
|
||||
|
||||
void _registerObxStreamListener() {
|
||||
ever(mailboxDashBoardController.accountId, (accountId) {
|
||||
if (accountId is AccountId) {
|
||||
if (accountId != null && mailboxDashBoardController.sessionCurrent != null) {
|
||||
getAllMailbox(mailboxDashBoardController.sessionCurrent!, accountId);
|
||||
}
|
||||
});
|
||||
@@ -441,23 +441,17 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
|
||||
BuildContext context,
|
||||
PresentationMailbox presentationMailboxSelected
|
||||
) {
|
||||
log('MailboxController::_handleOpenMailbox(): ');
|
||||
log('MailboxController::_handleOpenMailbox():MailboxName: ${presentationMailboxSelected.name}');
|
||||
KeyboardUtils.hideKeyboard(context);
|
||||
|
||||
mailboxDashBoardController.setSelectedMailbox(presentationMailboxSelected);
|
||||
mailboxDashBoardController.clearSelectedEmail();
|
||||
if (presentationMailboxSelected.id != mailboxDashBoardController.selectedMailbox.value?.id) {
|
||||
mailboxDashBoardController.clearFilterMessageOption();
|
||||
}
|
||||
_disableAllSearchEmail();
|
||||
|
||||
mailboxDashBoardController.setSelectedMailbox(presentationMailboxSelected);
|
||||
_updateSelectedMailboxRouteOnBrowser();
|
||||
|
||||
if (mailboxDashBoardController.isDrawerOpen) {
|
||||
mailboxDashBoardController.closeMailboxMenuDrawer();
|
||||
} else {
|
||||
mailboxDashBoardController.dispatchRoute(DashboardRoutes.thread);
|
||||
}
|
||||
mailboxDashBoardController.closeMailboxMenuDrawer();
|
||||
mailboxDashBoardController.dispatchRoute(DashboardRoutes.thread);
|
||||
}
|
||||
|
||||
void _disableAllSearchEmail() {
|
||||
@@ -1176,4 +1170,14 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
|
||||
bool get activeScrollTop => _activeScrollTop.value;
|
||||
|
||||
bool get activeScrollBottom => _activeScrollBottom.value;
|
||||
|
||||
void openSendingQueueViewAction(BuildContext context) {
|
||||
KeyboardUtils.hideKeyboard(context);
|
||||
_disableAllSearchEmail();
|
||||
mailboxDashBoardController.clearSelectedEmail();
|
||||
mailboxDashBoardController.clearFilterMessageOption();
|
||||
mailboxDashBoardController.setSelectedMailbox(null);
|
||||
closeMailboxScreen(context);
|
||||
mailboxDashBoardController.dispatchRoute(DashboardRoutes.sendingQueue);
|
||||
}
|
||||
}
|
||||
@@ -11,7 +11,9 @@ import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_catego
|
||||
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_node.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/bottom_bar_selection_mailbox_widget.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/mailbox_folder_tile_builder.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/sending_queue_mailbox_widget.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/user_information_widget_builder.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/dashboard_routes.dart';
|
||||
import 'package:tmail_ui_user/features/quotas/presentation/widget/quotas_footer_widget.dart';
|
||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||
import 'package:tmail_ui_user/main/utils/app_config.dart';
|
||||
@@ -208,6 +210,19 @@ class MailboxView extends GetWidget<MailboxController>
|
||||
return const SizedBox.shrink();
|
||||
}
|
||||
}),
|
||||
Obx(() {
|
||||
if (controller.mailboxDashBoardController.listSendingEmails.isNotEmpty &&
|
||||
PlatformInfo.isMobile &&
|
||||
!controller.isSelectionEnabled()) {
|
||||
return SendingQueueMailboxWidget(
|
||||
listSendingEmails: controller.mailboxDashBoardController.listSendingEmails,
|
||||
onOpenSendingQueueAction: () => controller.openSendingQueueViewAction(context),
|
||||
isSelected: controller.mailboxDashBoardController.dashboardRoute.value == DashboardRoutes.sendingQueue,
|
||||
);
|
||||
} else {
|
||||
return const SizedBox.shrink();
|
||||
}
|
||||
}),
|
||||
const SizedBox(height: 8),
|
||||
const Divider(color: AppColor.colorDividerMailbox, height: 0.5, thickness: 0.2),
|
||||
const SizedBox(height: 12),
|
||||
|
||||
@@ -339,7 +339,6 @@ mixin MailboxWidgetMixin {
|
||||
MailboxCategories.appGrid,
|
||||
controller),
|
||||
AnimatedContainer(
|
||||
padding: const EdgeInsets.only(top: 8),
|
||||
duration: const Duration(milliseconds: 400),
|
||||
child: Obx(() {
|
||||
return controller.mailboxDashBoardController.appGridDashboardController.appDashboardExpandMode.value == ExpandMode.EXPAND
|
||||
@@ -358,27 +357,20 @@ mixin MailboxWidgetMixin {
|
||||
MailboxController controller
|
||||
) {
|
||||
return Padding(
|
||||
padding: EdgeInsets.only(
|
||||
top: 8,
|
||||
left: responsiveUtils.isDesktop(context) ? 0 : 36,
|
||||
right: responsiveUtils.isDesktop(context) ? 0 : 28
|
||||
),
|
||||
padding: const EdgeInsets.only(left: 32, top: 8, bottom: 8, right: 4),
|
||||
child: Row(children: [
|
||||
buildIconWeb(
|
||||
splashRadius: 5,
|
||||
iconPadding: EdgeInsets.zero,
|
||||
minSize: 12,
|
||||
iconSize: 28,
|
||||
icon: SvgPicture.asset(
|
||||
imagePaths.icAppDashboard,
|
||||
colorFilter: AppColor.primaryColor.asFilter(),
|
||||
fit: BoxFit.fill),
|
||||
tooltip: AppLocalizations.of(context).appGridTittle),
|
||||
SvgPicture.asset(
|
||||
imagePaths.icAppDashboard,
|
||||
colorFilter: AppColor.primaryColor.asFilter(),
|
||||
width: 20,
|
||||
height: 20,
|
||||
fit: BoxFit.fill),
|
||||
Expanded(child: Padding(
|
||||
padding: const EdgeInsets.only(left: 12),
|
||||
padding: const EdgeInsets.symmetric(horizontal: 8),
|
||||
child: Text(categories.getTitle(context),
|
||||
maxLines: 1,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
overflow: CommonTextStyle.defaultTextOverFlow,
|
||||
softWrap: CommonTextStyle.defaultSoftWrap,
|
||||
style: const TextStyle(
|
||||
fontSize: 16,
|
||||
color: AppColor.colorTextButton,
|
||||
@@ -391,7 +383,9 @@ mixin MailboxWidgetMixin {
|
||||
controller.mailboxDashBoardController.appGridDashboardController.appDashboardExpandMode.value == ExpandMode.COLLAPSE
|
||||
? imagePaths.icCollapseFolder
|
||||
: imagePaths.icExpandFolder,
|
||||
colorFilter: AppColor.primaryColor.asFilter(),
|
||||
colorFilter: controller.mailboxDashBoardController.appGridDashboardController.appDashboardExpandMode.value == ExpandMode.COLLAPSE
|
||||
? AppColor.colorIconUnSubscribedMailbox.asFilter()
|
||||
: AppColor.primaryColor.asFilter(),
|
||||
fit: BoxFit.fill
|
||||
)),
|
||||
tooltip: AppLocalizations.of(context).appGridTittle,
|
||||
@@ -408,7 +402,7 @@ mixin MailboxWidgetMixin {
|
||||
return ListView.builder(
|
||||
shrinkWrap: true,
|
||||
primary: false,
|
||||
padding: const EdgeInsets.symmetric(horizontal: 16),
|
||||
padding: const EdgeInsets.only(left: 16, right: 16, bottom: 8),
|
||||
itemCount: linagoraApps.apps.length,
|
||||
itemBuilder: (context, index) {
|
||||
return AppListDashboardItem(linagoraApps.apps[index]);
|
||||
|
||||
@@ -0,0 +1,107 @@
|
||||
import 'package:core/presentation/extensions/color_extension.dart';
|
||||
import 'package:core/presentation/resources/image_paths.dart';
|
||||
import 'package:core/presentation/utils/responsive_utils.dart';
|
||||
import 'package:core/presentation/utils/style_utils.dart';
|
||||
import 'package:core/utils/platform_info.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:tmail_ui_user/features/composer/domain/model/sending_email.dart';
|
||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||
import 'package:tmail_ui_user/main/utils/app_utils.dart';
|
||||
|
||||
class SendingQueueMailboxWidget extends StatelessWidget {
|
||||
|
||||
final List<SendingEmail> listSendingEmails;
|
||||
final bool isSelected;
|
||||
final VoidCallback? onOpenSendingQueueAction;
|
||||
|
||||
const SendingQueueMailboxWidget({
|
||||
super.key,
|
||||
required this.listSendingEmails,
|
||||
this.isSelected = false,
|
||||
this.onOpenSendingQueueAction
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final imagePath = Get.find<ImagePaths>();
|
||||
final responsiveUtils = Get.find<ResponsiveUtils>();
|
||||
|
||||
return Padding(
|
||||
padding: const EdgeInsets.only(left: 20, right: 16),
|
||||
child: Material(
|
||||
color: Colors.transparent,
|
||||
child: InkWell(
|
||||
onTap: onOpenSendingQueueAction,
|
||||
borderRadius: const BorderRadius.all(Radius.circular(8)),
|
||||
child: Container(
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(8),
|
||||
color: isSelected ? AppColor.colorBgMailboxSelected : Colors.transparent),
|
||||
padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 12),
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: [
|
||||
SizedBox(width: responsiveUtils.isLandscapeMobile(context) ? 20 : 28),
|
||||
SvgPicture.asset(
|
||||
imagePath.icMailboxSendingQueue,
|
||||
width: PlatformInfo.isWeb ? 20 : 24,
|
||||
height: PlatformInfo.isWeb ? 20 : 24,
|
||||
colorFilter: AppColor.primaryColor.asFilter(),
|
||||
fit: BoxFit.fill),
|
||||
const SizedBox(width: 12),
|
||||
Expanded(child: Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.end,
|
||||
children: [
|
||||
Expanded(
|
||||
child: Text(
|
||||
AppLocalizations.of(context).sendingQueue,
|
||||
maxLines: 1,
|
||||
softWrap: CommonTextStyle.defaultSoftWrap,
|
||||
overflow: CommonTextStyle.defaultTextOverFlow,
|
||||
style: const TextStyle(
|
||||
fontSize: 15,
|
||||
color: AppColor.colorNameEmail,
|
||||
fontWeight: FontWeight.normal),
|
||||
),
|
||||
),
|
||||
Padding(
|
||||
padding: EdgeInsets.only(
|
||||
right: AppUtils.isDirectionRTL(context) ? 0 : 12,
|
||||
left: AppUtils.isDirectionRTL(context) ? 12 : 0,
|
||||
),
|
||||
child: Text(
|
||||
_getCountSendingEmails(),
|
||||
maxLines: 1,
|
||||
overflow: CommonTextStyle.defaultTextOverFlow,
|
||||
style: const TextStyle(
|
||||
fontSize: 13,
|
||||
color: Colors.black,
|
||||
fontWeight: FontWeight.normal
|
||||
)
|
||||
),
|
||||
)
|
||||
],
|
||||
))
|
||||
]
|
||||
),
|
||||
]
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
String _getCountSendingEmails() {
|
||||
if (listSendingEmails.isEmpty) {
|
||||
return '';
|
||||
}
|
||||
return listSendingEmails.length <= 999 ? '${listSendingEmails.length}' : '999+';
|
||||
}
|
||||
}
|
||||
+10
-1
@@ -1,3 +1,4 @@
|
||||
import 'package:core/core.dart';
|
||||
import 'package:core/data/model/source_type/data_source_type.dart';
|
||||
import 'package:core/data/network/dio_client.dart';
|
||||
import 'package:core/utils/config/app_config_loader.dart';
|
||||
@@ -103,6 +104,10 @@ import 'package:tmail_ui_user/features/offline_mode/manager/sending_email_cache_
|
||||
import 'package:tmail_ui_user/features/quotas/presentation/quotas_controller_bindings.dart';
|
||||
import 'package:tmail_ui_user/features/search/email/domain/usecases/refresh_changes_search_email_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/search/email/presentation/search_email_bindings.dart';
|
||||
import 'package:tmail_ui_user/features/sending_queue/domain/usecases/get_all_sending_email_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/sending_queue/presentation/bindings/sending_queue_bindings.dart';
|
||||
import 'package:tmail_ui_user/features/sending_queue/presentation/bindings/sending_queue_interactor_bindings.dart';
|
||||
import 'package:tmail_ui_user/features/sending_queue/presentation/sending_queue_controller.dart';
|
||||
import 'package:tmail_ui_user/features/thread/data/datasource/thread_datasource.dart';
|
||||
import 'package:tmail_ui_user/features/thread/data/datasource_impl/local_thread_datasource_impl.dart';
|
||||
import 'package:tmail_ui_user/features/thread/data/datasource_impl/thread_datasource_impl.dart';
|
||||
@@ -128,6 +133,7 @@ class MailboxDashBoardBindings extends BaseBindings {
|
||||
@override
|
||||
void dependencies() {
|
||||
super.dependencies();
|
||||
SendingQueueBindings().dependencies();
|
||||
MailboxBindings().dependencies();
|
||||
ThreadBindings().dependencies();
|
||||
EmailBindings().dependencies();
|
||||
@@ -170,7 +176,8 @@ class MailboxDashBoardBindings extends BaseBindings {
|
||||
Get.find<DeleteMultipleEmailsPermanentlyInteractor>(),
|
||||
Get.find<GetEmailByIdInteractor>(),
|
||||
Get.find<SendEmailInteractor>(),
|
||||
Get.find<StoreSendingEmailInteractor>()
|
||||
Get.find<StoreSendingEmailInteractor>(),
|
||||
Get.find<GetAllSendingEmailInteractor>()
|
||||
));
|
||||
Get.put(AdvancedFilterController());
|
||||
}
|
||||
@@ -324,6 +331,7 @@ class MailboxDashBoardBindings extends BaseBindings {
|
||||
Get.find<MailboxRepository>()
|
||||
));
|
||||
Get.lazyPut(() => StoreSendingEmailInteractor(Get.find<EmailRepository>()));
|
||||
SendingQueueInteractorBindings().dependencies();
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -382,5 +390,6 @@ class MailboxDashBoardBindings extends BaseBindings {
|
||||
Get.delete<SingleEmailController>();
|
||||
Get.delete<EmailSupervisorController>();
|
||||
Get.delete<DownloadController>();
|
||||
Get.delete<SendingQueueController>();
|
||||
}
|
||||
}
|
||||
+117
-25
@@ -32,6 +32,7 @@ import 'package:tmail_ui_user/features/composer/domain/state/save_email_as_draft
|
||||
import 'package:tmail_ui_user/features/composer/domain/state/send_email_state.dart';
|
||||
import 'package:tmail_ui_user/features/composer/domain/state/update_email_drafts_state.dart';
|
||||
import 'package:tmail_ui_user/features/composer/domain/usecases/send_email_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/composer/presentation/model/sending_email_arguments.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/state/store_sending_email_state.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/usecases/store_sending_email_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/composer/presentation/composer_bindings.dart';
|
||||
@@ -98,6 +99,8 @@ import 'package:tmail_ui_user/features/push_notification/domain/usecases/get_ema
|
||||
import 'package:tmail_ui_user/features/push_notification/domain/usecases/get_mailbox_state_to_refresh_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/push_notification/presentation/notification/local_notification_manager.dart';
|
||||
import 'package:tmail_ui_user/features/push_notification/presentation/services/fcm_service.dart';
|
||||
import 'package:tmail_ui_user/features/sending_queue/domain/state/get_all_sending_email_state.dart';
|
||||
import 'package:tmail_ui_user/features/sending_queue/domain/usecases/get_all_sending_email_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/thread/domain/constants/thread_constants.dart';
|
||||
import 'package:tmail_ui_user/features/thread/domain/model/filter_message_option.dart';
|
||||
import 'package:tmail_ui_user/features/thread/domain/model/search_query.dart';
|
||||
@@ -117,7 +120,6 @@ 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_utils.dart';
|
||||
import 'package:tmail_ui_user/main/routes/router_arguments.dart';
|
||||
import 'package:tmail_ui_user/main/utils/email_receive_manager.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/state.dart' as jmap;
|
||||
import 'package:uuid/uuid.dart';
|
||||
@@ -152,6 +154,7 @@ class MailboxDashBoardController extends ReloadableController {
|
||||
final GetEmailByIdInteractor _getEmailByIdInteractor;
|
||||
final SendEmailInteractor _sendEmailInteractor;
|
||||
final StoreSendingEmailInteractor _storeSendingEmailInteractor;
|
||||
final GetAllSendingEmailInteractor _getAllSendingEmailInteractor;
|
||||
|
||||
GetAllVacationInteractor? _getAllVacationInteractor;
|
||||
UpdateVacationInteractor? _updateVacationInteractor;
|
||||
@@ -179,13 +182,15 @@ class MailboxDashBoardController extends ReloadableController {
|
||||
final routerParameters = Rxn<Map<String, String?>>();
|
||||
final _isDraggingMailbox = RxBool(false);
|
||||
final searchMailboxActivated = RxBool(false);
|
||||
final listSendingEmails = RxList<SendingEmail>();
|
||||
|
||||
Session? sessionCurrent;
|
||||
Map<Role, MailboxId> mapDefaultMailboxIdByRole = {};
|
||||
Map<MailboxId, PresentationMailbox> mapMailboxById = {};
|
||||
final emailsInCurrentMailbox = <PresentationEmail>[].obs;
|
||||
final listResultSearch = RxList<PresentationEmail>();
|
||||
PresentationMailbox? outboxMailbox;
|
||||
RouterArguments? routerArguments;
|
||||
ComposerArguments? composerArguments;
|
||||
NavigationRouter? navigationRouter;
|
||||
|
||||
late StreamSubscription _emailReceiveManagerStreamSubscription;
|
||||
@@ -220,6 +225,7 @@ class MailboxDashBoardController extends ReloadableController {
|
||||
this._getEmailByIdInteractor,
|
||||
this._sendEmailInteractor,
|
||||
this._storeSendingEmailInteractor,
|
||||
this._getAllSendingEmailInteractor,
|
||||
) : super(
|
||||
getAuthenticatedAccountInteractor,
|
||||
updateAuthenticationAccountInteractor
|
||||
@@ -324,6 +330,8 @@ class MailboxDashBoardController extends ReloadableController {
|
||||
_moveToEmailDetailedView(success);
|
||||
} else if (success is StoreSendingEmailSuccess) {
|
||||
_handleStoreSendingEmailSuccess(success);
|
||||
} else if (success is GetAllSendingEmailSuccess) {
|
||||
_handleGetAllSendingEmailsSuccess(success);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -434,7 +442,9 @@ class MailboxDashBoardController extends ReloadableController {
|
||||
injectFCMBindings(sessionCurrent, accountId.value);
|
||||
_getVacationResponse();
|
||||
spamReportController.getSpamReportStateAction();
|
||||
|
||||
if (PlatformInfo.isMobile) {
|
||||
_getAllSendingEmails();
|
||||
}
|
||||
if (!BuildUtils.isWeb && !_notificationManager.isNotificationClickedOnTerminate) {
|
||||
_handleClickLocalNotificationOnTerminated();
|
||||
} else {
|
||||
@@ -532,7 +542,9 @@ class MailboxDashBoardController extends ReloadableController {
|
||||
}
|
||||
|
||||
void closeMailboxMenuDrawer() {
|
||||
scaffoldKey.currentState?.openEndDrawer();
|
||||
if (isDrawerOpen) {
|
||||
scaffoldKey.currentState?.openEndDrawer();
|
||||
}
|
||||
}
|
||||
|
||||
void hideMailboxMenuWhenScreenSizeChange(BuildContext context) {
|
||||
@@ -1168,16 +1180,25 @@ class MailboxDashBoardController extends ReloadableController {
|
||||
emailUIAction.value = newAction;
|
||||
}
|
||||
|
||||
void openComposerOverlay(RouterArguments? arguments) {
|
||||
routerArguments = arguments;
|
||||
void openComposerOverlay(ComposerArguments? arguments) {
|
||||
composerArguments = arguments;
|
||||
ComposerBindings().dependencies();
|
||||
composerOverlayState.value = ComposerOverlayState.active;
|
||||
}
|
||||
|
||||
void closeComposerOverlay() {
|
||||
routerArguments = null;
|
||||
void closeComposerOverlay({dynamic result}) {
|
||||
composerArguments = null;
|
||||
ComposerBindings().dispose();
|
||||
composerOverlayState.value = ComposerOverlayState.inActive;
|
||||
|
||||
if (result is SendingEmailArguments) {
|
||||
handleSendEmailAction(
|
||||
result.session,
|
||||
result.accountId,
|
||||
result.emailRequest,
|
||||
result.mailboxRequest
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
void dispatchRoute(DashboardRoutes route) {
|
||||
@@ -1203,6 +1224,9 @@ class MailboxDashBoardController extends ReloadableController {
|
||||
injectVacationBindings(sessionCurrent, accountId.value);
|
||||
_getVacationResponse();
|
||||
spamReportController.getSpamReportStateAction();
|
||||
if (PlatformInfo.isMobile) {
|
||||
_getAllSendingEmails();
|
||||
}
|
||||
}
|
||||
|
||||
void _getRouteParameters() {
|
||||
@@ -1281,13 +1305,21 @@ class MailboxDashBoardController extends ReloadableController {
|
||||
viewStateMarkAsReadMailbox.value = Right(UIState.idle);
|
||||
}
|
||||
|
||||
void goToComposer(ComposerArguments arguments) {
|
||||
if (BuildUtils.isWeb) {
|
||||
void goToComposer(ComposerArguments arguments) async {
|
||||
if (PlatformInfo.isWeb) {
|
||||
if (composerOverlayState.value == ComposerOverlayState.inActive) {
|
||||
openComposerOverlay(arguments);
|
||||
}
|
||||
} else {
|
||||
push(AppRoutes.composer, arguments: arguments);
|
||||
final result = await push(AppRoutes.composer, arguments: arguments);
|
||||
if (result is SendingEmailArguments) {
|
||||
handleSendEmailAction(
|
||||
result.session,
|
||||
result.accountId,
|
||||
result.emailRequest,
|
||||
result.mailboxRequest
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1304,9 +1336,7 @@ class MailboxDashBoardController extends ReloadableController {
|
||||
}
|
||||
|
||||
void goToSettings() async {
|
||||
if (isDrawerOpen) {
|
||||
closeMailboxMenuDrawer();
|
||||
}
|
||||
closeMailboxMenuDrawer();
|
||||
final result = await push(
|
||||
AppRoutes.settings,
|
||||
arguments: ManageAccountArguments(sessionCurrent)
|
||||
@@ -1722,14 +1752,7 @@ class MailboxDashBoardController extends ReloadableController {
|
||||
EmailRequest emailRequest,
|
||||
CreateNewMailboxRequest? mailboxRequest
|
||||
) {
|
||||
if (PlatformInfo.isWeb) {
|
||||
consumeState(_sendEmailInteractor.execute(
|
||||
session,
|
||||
accountId,
|
||||
emailRequest,
|
||||
mailboxRequest: mailboxRequest
|
||||
));
|
||||
} else {
|
||||
if (PlatformInfo.isMobile) {
|
||||
if (networkConnectionController.isNetworkConnectionAvailable()) {
|
||||
consumeState(_sendEmailInteractor.execute(
|
||||
session,
|
||||
@@ -1738,9 +1761,57 @@ class MailboxDashBoardController extends ReloadableController {
|
||||
mailboxRequest: mailboxRequest
|
||||
));
|
||||
} else {
|
||||
final sendingEmail = emailRequest.toSendingEmail(_uuid.v1(), mailboxRequest: mailboxRequest);
|
||||
_storeSendingEmail(accountId, session.username, sendingEmail);
|
||||
if (currentContext != null) {
|
||||
showConfirmDialogAction(
|
||||
currentContext!,
|
||||
'',
|
||||
AppLocalizations.of(currentContext!).proceed,
|
||||
onConfirmAction: () {
|
||||
final sendingEmail = emailRequest.toSendingEmail(
|
||||
_uuid.v1(),
|
||||
mailboxRequest: mailboxRequest
|
||||
);
|
||||
_storeSendingEmail(accountId, session.username, sendingEmail);
|
||||
},
|
||||
title: AppLocalizations.of(currentContext!).youAreInOfflineMode,
|
||||
icon: SvgPicture.asset(_imagePaths.icDialogOfflineMode),
|
||||
alignCenter: true,
|
||||
messageStyle: const TextStyle(
|
||||
color: AppColor.colorTitleSendingItem,
|
||||
fontSize: 15,
|
||||
fontWeight: FontWeight.normal
|
||||
),
|
||||
listTextSpan: [
|
||||
TextSpan(text: AppLocalizations.of(currentContext!).messageDialogWhenStoreSendingEmailFirst),
|
||||
TextSpan(
|
||||
text: AppLocalizations.of(currentContext!).messageDialogWhenStoreSendingEmailSecond,
|
||||
style: const TextStyle(
|
||||
color: AppColor.colorTitleSendingItem,
|
||||
fontSize: 15,
|
||||
fontWeight: FontWeight.w600
|
||||
),
|
||||
),
|
||||
TextSpan(text: AppLocalizations.of(currentContext!).messageDialogWhenStoreSendingEmailThird),
|
||||
TextSpan(
|
||||
text: AppLocalizations.of(currentContext!).sendingQueue,
|
||||
style: const TextStyle(
|
||||
color: AppColor.colorTitleSendingItem,
|
||||
fontSize: 15,
|
||||
fontWeight: FontWeight.w600
|
||||
),
|
||||
),
|
||||
TextSpan(text: AppLocalizations.of(currentContext!).messageDialogWhenStoreSendingEmailTail)
|
||||
]
|
||||
);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
consumeState(_sendEmailInteractor.execute(
|
||||
session,
|
||||
accountId,
|
||||
emailRequest,
|
||||
mailboxRequest: mailboxRequest
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1759,6 +1830,7 @@ class MailboxDashBoardController extends ReloadableController {
|
||||
}
|
||||
|
||||
_addSendingEmailToSendingQueue(success.sendingEmail);
|
||||
_getAllSendingEmails();
|
||||
}
|
||||
|
||||
void _addSendingEmailToSendingQueue(SendingEmail sendingEmail) async {
|
||||
@@ -1773,7 +1845,27 @@ class MailboxDashBoardController extends ReloadableController {
|
||||
initialDelay: const Duration(milliseconds: WorkManagerConstants.initialDelayTime),
|
||||
constraints: work_manager.Constraints(networkType: work_manager.NetworkType.connected)
|
||||
);
|
||||
await WorkSchedulerController().enqueue(workRequest);
|
||||
|
||||
try {
|
||||
await WorkSchedulerController().enqueue(workRequest);
|
||||
} catch (e) {
|
||||
logError('MailboxDashBoardController::_addSendingEmailToSendingQueue(): EXCEPTION: $e');
|
||||
}
|
||||
}
|
||||
|
||||
void _getAllSendingEmails() {
|
||||
if (accountId.value != null && sessionCurrent != null) {
|
||||
log('MailboxDashBoardController::_getAllSendingEmails():accountId: ${accountId.value} | userName: ${sessionCurrent?.username}');
|
||||
consumeState(_getAllSendingEmailInteractor.execute(
|
||||
accountId.value!,
|
||||
sessionCurrent!.username
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
void _handleGetAllSendingEmailsSuccess(GetAllSendingEmailSuccess success) {
|
||||
log('MailboxDashBoardController::_handleGetAllSendingEmailsSuccess():COUNT: ${success.sendingEmails.length}');
|
||||
listSendingEmails.value = success.sendingEmails;
|
||||
}
|
||||
|
||||
@override
|
||||
|
||||
+1
-1
@@ -25,7 +25,7 @@ class DeleteIdentityDialogBuilder extends StatelessWidget {
|
||||
final deleteDialogBuilder = ResponsiveWidget(
|
||||
responsiveUtils: responsiveUtils,
|
||||
mobile: (_buildDeleteDialog(context)
|
||||
..aligment(Alignment.bottomCenter)
|
||||
..alignment(Alignment.bottomCenter)
|
||||
..outsideDialogPadding(const EdgeInsets.only(left: 0, right: 0, bottom: BuildUtils.isWeb ? 42 : 16))
|
||||
..widthDialog(MediaQuery.of(context).size.width - 16)
|
||||
..heightDialog(280))
|
||||
|
||||
@@ -6,6 +6,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/base/mixin/compose_floating_button_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/email/presentation/widgets/email_action_cupertino_action_sheet_action_builder.dart';
|
||||
@@ -32,7 +33,8 @@ import 'package:tmail_ui_user/main/utils/app_utils.dart';
|
||||
class ThreadView extends GetWidget<ThreadController>
|
||||
with AppLoaderMixin,
|
||||
FilterEmailPopupMenuMixin,
|
||||
PopupMenuWidgetMixin {
|
||||
PopupMenuWidgetMixin,
|
||||
ComposeFloatingButtonMixin {
|
||||
|
||||
final _responsiveUtils = Get.find<ResponsiveUtils>();
|
||||
final _imagePaths = Get.find<ImagePaths>();
|
||||
@@ -88,7 +90,9 @@ class ThreadView extends GetWidget<ThreadController>
|
||||
if (BuildUtils.isWeb) {
|
||||
return _responsiveUtils.isTabletLarge(context);
|
||||
} else {
|
||||
return _responsiveUtils.isDesktop(context) || _responsiveUtils.isTabletLarge(context);
|
||||
return _responsiveUtils.isDesktop(context) ||
|
||||
_responsiveUtils.isTabletLarge(context) ||
|
||||
_responsiveUtils.isLandscapeTablet(context);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -181,33 +185,12 @@ class ThreadView extends GetWidget<ThreadController>
|
||||
if (controller.isAllSearchInActive) {
|
||||
return Container(
|
||||
padding: BuildUtils.isWeb
|
||||
? EdgeInsets.zero
|
||||
: controller.listEmailSelected.isNotEmpty ? const EdgeInsets.only(bottom: 70) : EdgeInsets.zero,
|
||||
child: Align(
|
||||
alignment: AppUtils.isDirectionRTL(context)
|
||||
? Alignment.bottomLeft
|
||||
: Alignment.bottomRight,
|
||||
child: ScrollingFloatingButtonAnimated(
|
||||
icon: SvgPicture.asset(_imagePaths.icCompose, width: 20, height: 20, fit: BoxFit.fill),
|
||||
text: Padding(
|
||||
padding: EdgeInsets.only(
|
||||
right: AppUtils.isDirectionRTL(context) ? 0 : 16,
|
||||
left: AppUtils.isDirectionRTL(context) ? 16 : 0,
|
||||
),
|
||||
child: Text(AppLocalizations.of(context).compose,
|
||||
overflow: CommonTextStyle.defaultTextOverFlow,
|
||||
softWrap: CommonTextStyle.defaultSoftWrap,
|
||||
style: const TextStyle(
|
||||
color: AppColor.colorTextButton,
|
||||
fontSize: 15.0,
|
||||
fontWeight: FontWeight.w500))),
|
||||
onPress: () => controller.mailboxDashBoardController.goToComposer(ComposerArguments()),
|
||||
scrollController: controller.listEmailController,
|
||||
color: Colors.white,
|
||||
elevation: 4.0,
|
||||
width: 140,
|
||||
animateIcon: false
|
||||
)
|
||||
? EdgeInsets.zero
|
||||
: controller.listEmailSelected.isNotEmpty ? const EdgeInsets.only(bottom: 70) : EdgeInsets.zero,
|
||||
child: buildComposeFloatingButton(
|
||||
context,
|
||||
controller.listEmailController,
|
||||
onTap: () => controller.mailboxDashBoardController.goToComposer(ComposerArguments())
|
||||
),
|
||||
);
|
||||
} else {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"@@last_modified": "2023-05-24T15:03:16.377036",
|
||||
"@@last_modified": "2023-06-01T13:42:51.121212",
|
||||
"initializing_data": "Initializing data...",
|
||||
"@initializing_data": {
|
||||
"type": "text",
|
||||
@@ -2799,5 +2799,69 @@
|
||||
"type": "text",
|
||||
"placeholders_order": [],
|
||||
"placeholders": {}
|
||||
},
|
||||
"sendingQueue": "Sending queue",
|
||||
"@sendingQueue": {
|
||||
"type": "text",
|
||||
"placeholders_order": [],
|
||||
"placeholders": {}
|
||||
},
|
||||
"bannerMessageSendingQueueView": "Messages in Sending queue mailbox will be sent or scheduled when online.",
|
||||
"@bannerMessageSendingQueueView": {
|
||||
"type": "text",
|
||||
"placeholders_order": [],
|
||||
"placeholders": {}
|
||||
},
|
||||
"proceed": "Proceed",
|
||||
"@proceed": {
|
||||
"type": "text",
|
||||
"placeholders_order": [],
|
||||
"placeholders": {}
|
||||
},
|
||||
"youAreInOfflineMode": "You're in offline mode",
|
||||
"@youAreInOfflineMode": {
|
||||
"type": "text",
|
||||
"placeholders_order": [],
|
||||
"placeholders": {}
|
||||
},
|
||||
"messageDialogWhenStoreSendingEmailFirst": "Fortunately, you can still",
|
||||
"@messageDialogWhenStoreSendingEmailFirst": {
|
||||
"type": "text",
|
||||
"placeholders_order": [],
|
||||
"placeholders": {}
|
||||
},
|
||||
"messageDialogWhenStoreSendingEmailSecond": " send, reply, or forward ",
|
||||
"@messageDialogWhenStoreSendingEmailSecond": {
|
||||
"type": "text",
|
||||
"placeholders_order": [],
|
||||
"placeholders": {}
|
||||
},
|
||||
"messageDialogWhenStoreSendingEmailThird": "emails. They will be delivered when you connect to the internet. To edit these emails before sending, go to the ",
|
||||
"@messageDialogWhenStoreSendingEmailThird": {
|
||||
"type": "text",
|
||||
"placeholders_order": [],
|
||||
"placeholders": {}
|
||||
},
|
||||
"messageDialogWhenStoreSendingEmailTail": " mailbox.",
|
||||
"@messageDialogWhenStoreSendingEmailTail": {
|
||||
"type": "text",
|
||||
"placeholders_order": [],
|
||||
"placeholders": {}
|
||||
},
|
||||
"titleRecipientSendingEmail": "To: {recipients}",
|
||||
"@titleRecipientSendingEmail": {
|
||||
"type": "text",
|
||||
"placeholders_order": [
|
||||
"recipients"
|
||||
],
|
||||
"placeholders": {
|
||||
"recipients": {}
|
||||
}
|
||||
},
|
||||
"openMailboxMenu": "Open mailbox menu",
|
||||
"@openMailboxMenu": {
|
||||
"type": "text",
|
||||
"placeholders_order": [],
|
||||
"placeholders": {}
|
||||
}
|
||||
}
|
||||
@@ -2876,4 +2876,74 @@ class AppLocalizations {
|
||||
name: 'messageHasBeenSavedToTheSendingQueue',
|
||||
);
|
||||
}
|
||||
|
||||
String get sendingQueue {
|
||||
return Intl.message(
|
||||
'Sending queue',
|
||||
name: 'sendingQueue'
|
||||
);
|
||||
}
|
||||
|
||||
String get bannerMessageSendingQueueView {
|
||||
return Intl.message(
|
||||
'Messages in Sending queue mailbox will be sent or scheduled when online.',
|
||||
name: 'bannerMessageSendingQueueView'
|
||||
);
|
||||
}
|
||||
|
||||
String get proceed {
|
||||
return Intl.message(
|
||||
'Proceed',
|
||||
name: 'proceed'
|
||||
);
|
||||
}
|
||||
|
||||
String get youAreInOfflineMode {
|
||||
return Intl.message(
|
||||
'You\'re in offline mode',
|
||||
name: 'youAreInOfflineMode'
|
||||
);
|
||||
}
|
||||
|
||||
String get messageDialogWhenStoreSendingEmailFirst {
|
||||
return Intl.message(
|
||||
'Fortunately, you can still',
|
||||
name: 'messageDialogWhenStoreSendingEmailFirst'
|
||||
);
|
||||
}
|
||||
|
||||
String get messageDialogWhenStoreSendingEmailSecond {
|
||||
return Intl.message(
|
||||
' send, reply, or forward ',
|
||||
name: 'messageDialogWhenStoreSendingEmailSecond'
|
||||
);
|
||||
}
|
||||
|
||||
String get messageDialogWhenStoreSendingEmailThird {
|
||||
return Intl.message(
|
||||
'emails. They will be delivered when you connect to the internet. To edit these emails before sending, go to the ',
|
||||
name: 'messageDialogWhenStoreSendingEmailThird'
|
||||
);
|
||||
}
|
||||
|
||||
String get messageDialogWhenStoreSendingEmailTail {
|
||||
return Intl.message(
|
||||
' mailbox.',
|
||||
name: 'messageDialogWhenStoreSendingEmailTail'
|
||||
);
|
||||
}
|
||||
|
||||
String titleRecipientSendingEmail(String recipients) {
|
||||
return Intl.message(
|
||||
'To: $recipients',
|
||||
name: 'titleRecipientSendingEmail',
|
||||
args: [recipients]);
|
||||
}
|
||||
|
||||
String get openMailboxMenu {
|
||||
return Intl.message(
|
||||
'Open mailbox menu',
|
||||
name: 'openMailboxMenu'
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user