TF-2667 Show confirm dialog when send email failed
This commit is contained in:
@@ -37,9 +37,11 @@ import 'package:tmail_ui_user/features/base/state/base_ui_state.dart';
|
|||||||
import 'package:tmail_ui_user/features/base/state/button_state.dart';
|
import 'package:tmail_ui_user/features/base/state/button_state.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/domain/model/contact_suggestion_source.dart';
|
import 'package:tmail_ui_user/features/composer/domain/model/contact_suggestion_source.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/domain/state/download_image_as_base64_state.dart';
|
import 'package:tmail_ui_user/features/composer/domain/state/download_image_as_base64_state.dart';
|
||||||
|
import 'package:tmail_ui_user/features/composer/domain/state/generate_email_state.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/domain/state/get_autocomplete_state.dart';
|
import 'package:tmail_ui_user/features/composer/domain/state/get_autocomplete_state.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/domain/state/get_device_contact_suggestions_state.dart';
|
import 'package:tmail_ui_user/features/composer/domain/state/get_device_contact_suggestions_state.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/domain/state/save_email_as_drafts_state.dart';
|
import 'package:tmail_ui_user/features/composer/domain/state/save_email_as_drafts_state.dart';
|
||||||
|
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/state/update_email_drafts_state.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/domain/usecases/create_new_and_send_email_interactor.dart';
|
import 'package:tmail_ui_user/features/composer/domain/usecases/create_new_and_send_email_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/domain/usecases/download_image_as_base64_interactor.dart';
|
import 'package:tmail_ui_user/features/composer/domain/usecases/download_image_as_base64_interactor.dart';
|
||||||
@@ -855,7 +857,7 @@ class ComposerController extends BaseController with DragDropFileMixin {
|
|||||||
showConfirmDialogAction(context,
|
showConfirmDialogAction(context,
|
||||||
AppLocalizations.of(context).message_dialog_send_email_without_a_subject,
|
AppLocalizations.of(context).message_dialog_send_email_without_a_subject,
|
||||||
AppLocalizations.of(context).send_anyway,
|
AppLocalizations.of(context).send_anyway,
|
||||||
onConfirmAction: _handleSendMessages,
|
onConfirmAction: () => _handleSendMessages(context),
|
||||||
title: AppLocalizations.of(context).empty_subject,
|
title: AppLocalizations.of(context).empty_subject,
|
||||||
showAsBottomSheet: true,
|
showAsBottomSheet: true,
|
||||||
icon: SvgPicture.asset(imagePaths.icEmpty, fit: BoxFit.fill),
|
icon: SvgPicture.asset(imagePaths.icEmpty, fit: BoxFit.fill),
|
||||||
@@ -889,7 +891,7 @@ class ComposerController extends BaseController with DragDropFileMixin {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
_handleSendMessages();
|
_handleSendMessages(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<String> _getContentInEditor() async {
|
Future<String> _getContentInEditor() async {
|
||||||
@@ -903,7 +905,7 @@ class ComposerController extends BaseController with DragDropFileMixin {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void _handleSendMessages() async {
|
void _handleSendMessages(BuildContext context) async {
|
||||||
if (composerArguments.value == null ||
|
if (composerArguments.value == null ||
|
||||||
mailboxDashBoardController.sessionCurrent == null ||
|
mailboxDashBoardController.sessionCurrent == null ||
|
||||||
mailboxDashBoardController.accountId.value == null
|
mailboxDashBoardController.accountId.value == null
|
||||||
@@ -916,7 +918,23 @@ class ComposerController extends BaseController with DragDropFileMixin {
|
|||||||
|
|
||||||
final emailContent = await _getContentInEditor();
|
final emailContent = await _getContentInEditor();
|
||||||
|
|
||||||
final resultState = await Get.dialog(
|
final resultState = await _showSendingMessageDialog(emailContent: emailContent);
|
||||||
|
|
||||||
|
if (resultState is SendEmailSuccess) {
|
||||||
|
_sendButtonState = ButtonState.enabled;
|
||||||
|
_closeComposerAction(result: resultState);
|
||||||
|
} else if ((resultState is SendEmailFailure || resultState is GenerateEmailFailure) && context.mounted) {
|
||||||
|
_showConfirmDialogWhenSendMessageFailure(
|
||||||
|
context: context,
|
||||||
|
failure: resultState
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
_sendButtonState = ButtonState.enabled;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<dynamic> _showSendingMessageDialog({required String emailContent}) {
|
||||||
|
return Get.dialog(
|
||||||
PointerInterceptor(
|
PointerInterceptor(
|
||||||
child: SendingMessageDialogView(
|
child: SendingMessageDialogView(
|
||||||
createEmailRequest: CreateEmailRequest(
|
createEmailRequest: CreateEmailRequest(
|
||||||
@@ -936,8 +954,8 @@ class ComposerController extends BaseController with DragDropFileMixin {
|
|||||||
outboxMailboxId: mailboxDashBoardController.outboxMailbox?.mailboxId,
|
outboxMailboxId: mailboxDashBoardController.outboxMailbox?.mailboxId,
|
||||||
sentMailboxId: mailboxDashBoardController.mapDefaultMailboxIdByRole[PresentationMailbox.roleSent],
|
sentMailboxId: mailboxDashBoardController.mapDefaultMailboxIdByRole[PresentationMailbox.roleSent],
|
||||||
draftsEmailId: composerArguments.value!.emailActionType == EmailActionType.editDraft
|
draftsEmailId: composerArguments.value!.emailActionType == EmailActionType.editDraft
|
||||||
? composerArguments.value!.presentationEmail?.id
|
? composerArguments.value!.presentationEmail?.id
|
||||||
: null,
|
: null,
|
||||||
answerForwardEmailId: composerArguments.value!.presentationEmail?.id,
|
answerForwardEmailId: composerArguments.value!.presentationEmail?.id,
|
||||||
unsubscribeEmailId: composerArguments.value!.previousEmailId,
|
unsubscribeEmailId: composerArguments.value!.previousEmailId,
|
||||||
messageId: composerArguments.value!.messageId,
|
messageId: composerArguments.value!.messageId,
|
||||||
@@ -949,9 +967,50 @@ class ComposerController extends BaseController with DragDropFileMixin {
|
|||||||
),
|
),
|
||||||
barrierColor: AppColor.colorDefaultCupertinoActionSheet,
|
barrierColor: AppColor.colorDefaultCupertinoActionSheet,
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
|
||||||
_sendButtonState = ButtonState.enabled;
|
void _showConfirmDialogWhenSendMessageFailure({
|
||||||
_closeComposerAction(result: resultState);
|
required BuildContext context,
|
||||||
|
required FeatureFailure failure
|
||||||
|
}) {
|
||||||
|
showConfirmDialogAction(
|
||||||
|
context,
|
||||||
|
title: '',
|
||||||
|
AppLocalizations.of(context).warningMessageWhenSendEmailFailure,
|
||||||
|
AppLocalizations.of(context).edit,
|
||||||
|
cancelTitle: AppLocalizations.of(context).closeAnyway,
|
||||||
|
alignCenter: true,
|
||||||
|
onConfirmAction: () {
|
||||||
|
_sendButtonState = ButtonState.enabled;
|
||||||
|
popBack();
|
||||||
|
_autoFocusFieldWhenLauncher();
|
||||||
|
},
|
||||||
|
onCancelAction: () async {
|
||||||
|
_sendButtonState = ButtonState.enabled;
|
||||||
|
await Future.delayed(
|
||||||
|
const Duration(milliseconds: 100),
|
||||||
|
_closeComposerAction
|
||||||
|
);
|
||||||
|
},
|
||||||
|
icon: SvgPicture.asset(
|
||||||
|
imagePaths.icQuotasWarning,
|
||||||
|
width: 40,
|
||||||
|
height: 40,
|
||||||
|
colorFilter: AppColor.colorBackgroundQuotasWarning.asFilter(),
|
||||||
|
),
|
||||||
|
messageStyle: Theme.of(context).textTheme.labelMedium?.copyWith(
|
||||||
|
fontSize: 14,
|
||||||
|
color: AppColor.colorTextBody
|
||||||
|
),
|
||||||
|
actionStyle: Theme.of(context).textTheme.labelMedium?.copyWith(
|
||||||
|
fontSize: 17,
|
||||||
|
color: Colors.white
|
||||||
|
),
|
||||||
|
cancelStyle: Theme.of(context).textTheme.labelMedium?.copyWith(
|
||||||
|
fontSize: 17,
|
||||||
|
color: Colors.black
|
||||||
|
)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
void _checkContactPermission() async {
|
void _checkContactPermission() async {
|
||||||
|
|||||||
@@ -179,7 +179,9 @@ class MailboxView extends BaseMailboxView {
|
|||||||
return const SizedBox.shrink();
|
return const SizedBox.shrink();
|
||||||
}
|
}
|
||||||
return UserInformationWidget(
|
return UserInformationWidget(
|
||||||
userName: controller.mailboxDashBoardController.sessionCurrent?.username,
|
userName: controller.mailboxDashBoardController.accountId.value != null
|
||||||
|
? controller.mailboxDashBoardController.sessionCurrent?.username
|
||||||
|
: null,
|
||||||
subtitle: AppLocalizations.of(context).manage_account,
|
subtitle: AppLocalizations.of(context).manage_account,
|
||||||
onSubtitleClick: controller.mailboxDashBoardController.goToSettings,
|
onSubtitleClick: controller.mailboxDashBoardController.goToSettings,
|
||||||
border: const Border(
|
border: const Border(
|
||||||
|
|||||||
@@ -100,7 +100,9 @@ class MailboxView extends BaseMailboxView {
|
|||||||
child: Column(children: [
|
child: Column(children: [
|
||||||
if (!controller.responsiveUtils.isDesktop(context))
|
if (!controller.responsiveUtils.isDesktop(context))
|
||||||
Obx(() => UserInformationWidget(
|
Obx(() => UserInformationWidget(
|
||||||
userName: controller.mailboxDashBoardController.sessionCurrent?.username,
|
userName: controller.mailboxDashBoardController.accountId.value != null
|
||||||
|
? controller.mailboxDashBoardController.sessionCurrent?.username
|
||||||
|
: null,
|
||||||
subtitle: AppLocalizations.of(context).manage_account,
|
subtitle: AppLocalizations.of(context).manage_account,
|
||||||
onSubtitleClick: controller.mailboxDashBoardController.goToSettings,
|
onSubtitleClick: controller.mailboxDashBoardController.goToSettings,
|
||||||
border: const Border(
|
border: const Border(
|
||||||
|
|||||||
-5
@@ -30,7 +30,6 @@ import 'package:tmail_ui_user/features/base/reloadable/reloadable_controller.dar
|
|||||||
import 'package:tmail_ui_user/features/composer/domain/exceptions/set_method_exception.dart';
|
import 'package:tmail_ui_user/features/composer/domain/exceptions/set_method_exception.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/domain/extensions/email_request_extension.dart';
|
import 'package:tmail_ui_user/features/composer/domain/extensions/email_request_extension.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart';
|
import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/domain/state/generate_email_state.dart';
|
|
||||||
import 'package:tmail_ui_user/features/composer/domain/state/get_autocomplete_state.dart';
|
import 'package:tmail_ui_user/features/composer/domain/state/get_autocomplete_state.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/domain/state/save_email_as_drafts_state.dart';
|
import 'package:tmail_ui_user/features/composer/domain/state/save_email_as_drafts_state.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/domain/state/send_email_state.dart';
|
import 'package:tmail_ui_user/features/composer/domain/state/send_email_state.dart';
|
||||||
@@ -1263,8 +1262,6 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
saveEmailToDraft(arguments: result);
|
saveEmailToDraft(arguments: result);
|
||||||
} else if (result is SendEmailSuccess) {
|
} else if (result is SendEmailSuccess) {
|
||||||
consumeState(Stream.value(Right<Failure, Success>(result)));
|
consumeState(Stream.value(Right<Failure, Success>(result)));
|
||||||
} else if (result is SendEmailFailure || result is GenerateEmailFailure) {
|
|
||||||
consumeState(Stream.value(Left<Failure, Success>(result)));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1400,8 +1397,6 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
saveEmailToDraft(arguments: result);
|
saveEmailToDraft(arguments: result);
|
||||||
} else if (result is SendEmailSuccess) {
|
} else if (result is SendEmailSuccess) {
|
||||||
consumeState(Stream.value(Right<Failure, Success>(result)));
|
consumeState(Stream.value(Right<Failure, Success>(result)));
|
||||||
} else if (result is SendEmailFailure || result is GenerateEmailFailure) {
|
|
||||||
consumeState(Stream.value(Left<Failure, Success>(result)));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-1
@@ -19,7 +19,9 @@ class SettingsFirstLevelView extends GetWidget<SettingsController> {
|
|||||||
controller: PlatformInfo.isMobile ? null : controller.settingScrollController,
|
controller: PlatformInfo.isMobile ? null : controller.settingScrollController,
|
||||||
child: Column(children: [
|
child: Column(children: [
|
||||||
Obx(() => UserInformationWidget(
|
Obx(() => UserInformationWidget(
|
||||||
userName: controller.manageAccountDashboardController.sessionCurrent?.username,
|
userName: controller.manageAccountDashboardController.accountId.value != null
|
||||||
|
? controller.manageAccountDashboardController.sessionCurrent?.username
|
||||||
|
: null,
|
||||||
padding: SettingsUtils.getPaddingInFirstLevel(context, controller.responsiveUtils),
|
padding: SettingsUtils.getPaddingInFirstLevel(context, controller.responsiveUtils),
|
||||||
titlePadding: const EdgeInsetsDirectional.only(start: 16))),
|
titlePadding: const EdgeInsetsDirectional.only(start: 16))),
|
||||||
Divider(
|
Divider(
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"@@last_modified": "2024-03-15T21:34:52.177175",
|
"@@last_modified": "2024-03-06T00:47:30.311599",
|
||||||
"initializing_data": "Initializing data...",
|
"initializing_data": "Initializing data...",
|
||||||
"@initializing_data": {
|
"@initializing_data": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
@@ -3773,5 +3773,35 @@
|
|||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders_order": [],
|
"placeholders_order": [],
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
|
},
|
||||||
|
"status": "Status",
|
||||||
|
"@status": {
|
||||||
|
"type": "text",
|
||||||
|
"placeholders_order": [],
|
||||||
|
"placeholders": {}
|
||||||
|
},
|
||||||
|
"progress": "Progress",
|
||||||
|
"@progress": {
|
||||||
|
"type": "text",
|
||||||
|
"placeholders_order": [],
|
||||||
|
"placeholders": {}
|
||||||
|
},
|
||||||
|
"sendingMessage": "Sending message",
|
||||||
|
"@sendingMessage": {
|
||||||
|
"type": "text",
|
||||||
|
"placeholders_order": [],
|
||||||
|
"placeholders": {}
|
||||||
|
},
|
||||||
|
"warningMessageWhenSendEmailFailure": "Sending of the message failed.\nAn error occurred while sending mail.",
|
||||||
|
"@warningMessageWhenSendEmailFailure": {
|
||||||
|
"type": "text",
|
||||||
|
"placeholders_order": [],
|
||||||
|
"placeholders": {}
|
||||||
|
},
|
||||||
|
"closeAnyway": "Close anyway",
|
||||||
|
"@closeAnyway": {
|
||||||
|
"type": "text",
|
||||||
|
"placeholders_order": [],
|
||||||
|
"placeholders": {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3962,4 +3962,16 @@ class AppLocalizations {
|
|||||||
'Sending message',
|
'Sending message',
|
||||||
name: 'sendingMessage');
|
name: 'sendingMessage');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String get warningMessageWhenSendEmailFailure {
|
||||||
|
return Intl.message(
|
||||||
|
'Sending of the message failed.\nAn error occurred while sending mail.',
|
||||||
|
name: 'warningMessageWhenSendEmailFailure');
|
||||||
|
}
|
||||||
|
|
||||||
|
String get closeAnyway {
|
||||||
|
return Intl.message(
|
||||||
|
'Close anyway',
|
||||||
|
name: 'closeAnyway');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user