TF-2189 Keep composer available before click on proceed
(cherry picked from commit a818b91fc6faa395c9935cd411676b914c237b1f)
This commit is contained in:
@@ -51,6 +51,7 @@ import 'package:tmail_ui_user/features/composer/presentation/controller/rich_tex
|
||||
import 'package:tmail_ui_user/features/composer/presentation/extensions/email_action_type_extension.dart';
|
||||
import 'package:tmail_ui_user/features/composer/presentation/extensions/file_upload_extension.dart';
|
||||
import 'package:tmail_ui_user/features/composer/presentation/extensions/list_identities_extension.dart';
|
||||
import 'package:tmail_ui_user/features/composer/presentation/model/compose_action_mode.dart';
|
||||
import 'package:tmail_ui_user/features/composer/presentation/model/draggable_email_address.dart';
|
||||
import 'package:tmail_ui_user/features/composer/presentation/model/image_source.dart';
|
||||
import 'package:tmail_ui_user/features/composer/presentation/model/inline_image.dart';
|
||||
@@ -872,31 +873,101 @@ class ComposerController extends BaseController {
|
||||
? CreateNewMailboxRequest(Id(_uuid.v1()), PresentationMailbox.outboxMailboxName)
|
||||
: null;
|
||||
|
||||
final sendingEmailArguments = SendingEmailArguments(
|
||||
session,
|
||||
accountId,
|
||||
emailRequest,
|
||||
mailboxRequest,
|
||||
sendingEmailActionType: arguments.sendingEmail != null
|
||||
? SendingEmailActionType.edit
|
||||
: SendingEmailActionType.create,
|
||||
);
|
||||
uploadController.clearInlineFileUploaded();
|
||||
|
||||
if (PlatformInfo.isWeb) {
|
||||
closeComposerWeb(result: sendingEmailArguments);
|
||||
if (PlatformInfo.isMobile && !networkConnectionController.isNetworkConnectionAvailable()) {
|
||||
switch(arguments.sendingEmailActionType) {
|
||||
case SendingEmailActionType.create:
|
||||
_showConfirmDialogStoreSendingEmail(
|
||||
SendingEmailArguments(
|
||||
session,
|
||||
accountId,
|
||||
emailRequest,
|
||||
mailboxRequest,
|
||||
actionMode: ComposeActionMode.pushQueue
|
||||
)
|
||||
);
|
||||
break;
|
||||
case SendingEmailActionType.edit:
|
||||
uploadController.clearInlineFileUploaded();
|
||||
_closeComposerAction(
|
||||
result: SendingEmailArguments(
|
||||
session,
|
||||
accountId,
|
||||
emailRequest,
|
||||
mailboxRequest,
|
||||
actionMode: ComposeActionMode.editQueue
|
||||
)
|
||||
);
|
||||
break;
|
||||
default:
|
||||
uploadController.clearInlineFileUploaded();
|
||||
_closeComposerAction(
|
||||
result: SendingEmailArguments(
|
||||
session,
|
||||
accountId,
|
||||
emailRequest,
|
||||
mailboxRequest,
|
||||
)
|
||||
);
|
||||
}
|
||||
} else {
|
||||
popBack(result: sendingEmailArguments);
|
||||
uploadController.clearInlineFileUploaded();
|
||||
_closeComposerAction(
|
||||
result: SendingEmailArguments(
|
||||
session,
|
||||
accountId,
|
||||
emailRequest,
|
||||
mailboxRequest,
|
||||
)
|
||||
);
|
||||
}
|
||||
} else {
|
||||
if (PlatformInfo.isWeb) {
|
||||
closeComposerWeb();
|
||||
} else {
|
||||
popBack();
|
||||
}
|
||||
logError('ComposerController::_handleSendMessages: arguments/accountId/userProfile/session is NULL');
|
||||
uploadController.clearInlineFileUploaded();
|
||||
_closeComposerAction();
|
||||
}
|
||||
}
|
||||
|
||||
void _showConfirmDialogStoreSendingEmail(SendingEmailArguments sendingEmailArguments) {
|
||||
showConfirmDialogAction(
|
||||
currentContext!,
|
||||
'',
|
||||
AppLocalizations.of(currentContext!).proceed,
|
||||
onConfirmAction: () {
|
||||
uploadController.clearInlineFileUploaded();
|
||||
_closeComposerAction(result: sendingEmailArguments);
|
||||
},
|
||||
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)
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
void _checkContactPermission() async {
|
||||
final permissionStatus = await Permission.contacts.status;
|
||||
if (permissionStatus.isGranted) {
|
||||
@@ -1369,7 +1440,15 @@ class ComposerController extends BaseController {
|
||||
FocusScope.of(context).unfocus();
|
||||
}
|
||||
|
||||
void closeComposerWeb({dynamic result}) {
|
||||
void _closeComposerAction({dynamic result}) {
|
||||
if (PlatformInfo.isWeb) {
|
||||
_closeComposerWeb(result: result);
|
||||
} else {
|
||||
popBack(result: result);
|
||||
}
|
||||
}
|
||||
|
||||
void _closeComposerWeb({dynamic result}) {
|
||||
FocusManager.instance.primaryFocus?.unfocus();
|
||||
mailboxDashBoardController.closeComposerOverlay(result: result);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
|
||||
enum ComposeActionMode {
|
||||
pushQueue,
|
||||
editQueue,
|
||||
sent
|
||||
}
|
||||
@@ -5,6 +5,7 @@ import 'package:model/model.dart';
|
||||
import 'package:receive_sharing_intent/receive_sharing_intent.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/data/model/composer_cache.dart';
|
||||
import 'package:tmail_ui_user/features/sending_queue/domain/model/sending_email.dart';
|
||||
import 'package:tmail_ui_user/features/sending_queue/presentation/model/sending_email_action_type.dart';
|
||||
import 'package:tmail_ui_user/main/routes/router_arguments.dart';
|
||||
|
||||
class ComposerArguments extends RouterArguments {
|
||||
@@ -131,6 +132,10 @@ class ComposerArguments extends RouterArguments {
|
||||
references: references,
|
||||
);
|
||||
|
||||
SendingEmailActionType get sendingEmailActionType => sendingEmail != null
|
||||
? SendingEmailActionType.edit
|
||||
: SendingEmailActionType.create;
|
||||
|
||||
@override
|
||||
List<Object?> get props => [
|
||||
emailActionType,
|
||||
|
||||
+42
-107
@@ -29,6 +29,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/compose_action_mode.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/mark_read_action.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/state/mark_as_email_read_state.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/state/store_sending_email_state.dart';
|
||||
@@ -104,7 +105,6 @@ import 'package:tmail_ui_user/features/sending_queue/domain/state/update_sending
|
||||
import 'package:tmail_ui_user/features/sending_queue/domain/usecases/get_all_sending_email_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/sending_queue/domain/usecases/store_sending_email_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/sending_queue/domain/usecases/update_sending_email_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/sending_queue/presentation/model/sending_email_action_type.dart';
|
||||
import 'package:tmail_ui_user/features/sending_queue/presentation/model/sending_email_arguments.dart';
|
||||
import 'package:tmail_ui_user/features/session/domain/usecases/store_session_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/thread/domain/model/filter_message_option.dart';
|
||||
@@ -368,13 +368,21 @@ class MailboxDashBoardController extends ReloadableController {
|
||||
if (PlatformInfo.isMobile &&
|
||||
failure is SendEmailFailure &&
|
||||
exception is NoNetworkError) {
|
||||
_handleSendingEmailWhenNoNetwork(
|
||||
failure.session,
|
||||
failure.accountId,
|
||||
failure.emailRequest,
|
||||
failure.mailboxRequest,
|
||||
failure.sendingEmailActionType
|
||||
);
|
||||
if (failure.emailRequest.storedSendingId != null) {
|
||||
_handleStoreSendingEmail(
|
||||
failure.session,
|
||||
failure.accountId,
|
||||
failure.emailRequest,
|
||||
failure.mailboxRequest
|
||||
);
|
||||
} else {
|
||||
_handleUpdateSendingEmail(
|
||||
failure.session,
|
||||
failure.accountId,
|
||||
failure.emailRequest,
|
||||
failure.mailboxRequest
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1243,13 +1251,7 @@ class MailboxDashBoardController extends ReloadableController {
|
||||
composerOverlayState.value = ComposerOverlayState.inActive;
|
||||
|
||||
if (result is SendingEmailArguments) {
|
||||
handleSendEmailAction(
|
||||
result.session,
|
||||
result.accountId,
|
||||
result.emailRequest,
|
||||
result.mailboxRequest,
|
||||
result.sendingEmailActionType
|
||||
);
|
||||
handleSendEmailAction(result);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1361,13 +1363,7 @@ class MailboxDashBoardController extends ReloadableController {
|
||||
} else {
|
||||
final result = await push(AppRoutes.composer, arguments: arguments);
|
||||
if (result is SendingEmailArguments) {
|
||||
handleSendEmailAction(
|
||||
result.session,
|
||||
result.accountId,
|
||||
result.emailRequest,
|
||||
result.mailboxRequest,
|
||||
result.sendingEmailActionType
|
||||
);
|
||||
handleSendEmailAction(result);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1806,47 +1802,31 @@ class MailboxDashBoardController extends ReloadableController {
|
||||
clearState();
|
||||
}
|
||||
|
||||
void handleSendEmailAction(
|
||||
Session session,
|
||||
AccountId accountId,
|
||||
EmailRequest emailRequest,
|
||||
CreateNewMailboxRequest? mailboxRequest,
|
||||
SendingEmailActionType sendingEmailActionType
|
||||
) {
|
||||
if (PlatformInfo.isWeb ||
|
||||
(PlatformInfo.isMobile && networkConnectionController.isNetworkConnectionAvailable())) {
|
||||
consumeState(_sendEmailInteractor.execute(
|
||||
session,
|
||||
accountId,
|
||||
emailRequest,
|
||||
mailboxRequest: mailboxRequest
|
||||
));
|
||||
} else {
|
||||
_handleSendingEmailWhenNoNetwork(
|
||||
session,
|
||||
accountId,
|
||||
emailRequest,
|
||||
mailboxRequest,
|
||||
sendingEmailActionType
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
void _handleSendingEmailWhenNoNetwork(
|
||||
Session session,
|
||||
AccountId accountId,
|
||||
EmailRequest emailRequest,
|
||||
CreateNewMailboxRequest? mailboxRequest,
|
||||
SendingEmailActionType? sendingEmailActionType
|
||||
) {
|
||||
switch(sendingEmailActionType) {
|
||||
case SendingEmailActionType.create:
|
||||
_showConfirmDialogStoreSendingEmail(session, accountId, emailRequest, mailboxRequest);
|
||||
void handleSendEmailAction(SendingEmailArguments arguments) {
|
||||
switch(arguments.actionMode) {
|
||||
case ComposeActionMode.pushQueue:
|
||||
_handleStoreSendingEmail(
|
||||
arguments.session,
|
||||
arguments.accountId,
|
||||
arguments.emailRequest,
|
||||
arguments.mailboxRequest
|
||||
);
|
||||
break;
|
||||
case SendingEmailActionType.edit:
|
||||
_handleUpdateSendingEmail(session, accountId, emailRequest, mailboxRequest);
|
||||
case ComposeActionMode.editQueue:
|
||||
_handleUpdateSendingEmail(
|
||||
arguments.session,
|
||||
arguments.accountId,
|
||||
arguments.emailRequest,
|
||||
arguments.mailboxRequest
|
||||
);
|
||||
break;
|
||||
default:
|
||||
case ComposeActionMode.sent:
|
||||
consumeState(_sendEmailInteractor.execute(
|
||||
arguments.session,
|
||||
arguments.accountId,
|
||||
arguments.emailRequest,
|
||||
mailboxRequest: arguments.mailboxRequest
|
||||
));
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -1884,51 +1864,6 @@ class MailboxDashBoardController extends ReloadableController {
|
||||
}
|
||||
}
|
||||
|
||||
void _showConfirmDialogStoreSendingEmail(
|
||||
Session session,
|
||||
AccountId accountId,
|
||||
EmailRequest emailRequest,
|
||||
CreateNewMailboxRequest? mailboxRequest
|
||||
) {
|
||||
showConfirmDialogAction(
|
||||
currentContext!,
|
||||
'',
|
||||
AppLocalizations.of(currentContext!).proceed,
|
||||
onConfirmAction: () {
|
||||
_handleStoreSendingEmail(session, accountId, emailRequest, mailboxRequest);
|
||||
},
|
||||
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)
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
void _handleStoreSendingEmailSuccess(StoreSendingEmailSuccess success) {
|
||||
addSendingEmailToSendingQueue(success.sendingEmail);
|
||||
getAllSendingEmails();
|
||||
@@ -2124,7 +2059,7 @@ class MailboxDashBoardController extends ReloadableController {
|
||||
void disableDraggableApp() {
|
||||
draggableAppState.value = DraggableAppState.inActive;
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
void onClose() {
|
||||
_emailReceiveManager.closeEmailReceiveManagerStream();
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
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/composer/presentation/model/compose_action_mode.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_request.dart';
|
||||
import 'package:tmail_ui_user/features/sending_queue/presentation/model/sending_email_action_type.dart';
|
||||
import 'package:tmail_ui_user/main/routes/router_arguments.dart';
|
||||
|
||||
class SendingEmailArguments extends RouterArguments {
|
||||
@@ -10,7 +10,7 @@ class SendingEmailArguments extends RouterArguments {
|
||||
final AccountId accountId;
|
||||
final EmailRequest emailRequest;
|
||||
final CreateNewMailboxRequest? mailboxRequest;
|
||||
final SendingEmailActionType sendingEmailActionType;
|
||||
final ComposeActionMode actionMode;
|
||||
|
||||
SendingEmailArguments(
|
||||
this.session,
|
||||
@@ -18,7 +18,7 @@ class SendingEmailArguments extends RouterArguments {
|
||||
this.emailRequest,
|
||||
this.mailboxRequest,
|
||||
{
|
||||
this.sendingEmailActionType = SendingEmailActionType.create
|
||||
this.actionMode = ComposeActionMode.sent
|
||||
}
|
||||
);
|
||||
|
||||
@@ -28,6 +28,6 @@ class SendingEmailArguments extends RouterArguments {
|
||||
accountId,
|
||||
emailRequest,
|
||||
mailboxRequest,
|
||||
sendingEmailActionType
|
||||
actionMode
|
||||
];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user