TF-2667 Add cancel button in progress saving message to drafts dialog

This commit is contained in:
dab246
2024-03-12 13:43:14 +07:00
committed by Dat H. Pham
parent f2b70aec48
commit c013e0306c
14 changed files with 297 additions and 94 deletions
@@ -1129,10 +1129,11 @@ class ComposerController extends BaseController with DragDropFileMixin {
}
final emailContent = await _getContentInEditor();
final cancelToken = CancelToken();
final resultState = await _showSavingMessageToDraftsDialog(
emailContent: emailContent,
draftEmailId: _emailIdEditing
draftEmailId: _emailIdEditing,
cancelToken: cancelToken
);
if (resultState is SaveEmailAsDraftsSuccess) {
@@ -1143,6 +1144,9 @@ class ComposerController extends BaseController with DragDropFileMixin {
_saveToDraftButtonState = ButtonState.enabled;
_emailIdEditing = resultState.emailId;
mailboxDashBoardController.consumeState(Stream.value(Right<Failure, Success>(resultState)));
} else if ((resultState is SaveEmailAsDraftsFailure && resultState.exception is SavingEmailToDraftsCanceledException) ||
(resultState is UpdateEmailDraftsFailure && resultState.exception is SavingEmailToDraftsCanceledException)) {
_saveToDraftButtonState = ButtonState.enabled;
} else if ((resultState is SaveEmailAsDraftsFailure ||
resultState is UpdateEmailDraftsFailure ||
resultState is GenerateEmailFailure) &&
@@ -2035,14 +2039,20 @@ class ComposerController extends BaseController with DragDropFileMixin {
final emailContent = await _getContentInEditor();
final draftEmailId = _getDraftEmailId();
log('ComposerController::_handleSaveMessageToDraft: draftEmailId = $draftEmailId');
final cancelToken = CancelToken();
final resultState = await _showSavingMessageToDraftsDialog(
emailContent: emailContent,
draftEmailId: draftEmailId
draftEmailId: draftEmailId,
cancelToken: cancelToken
);
if (resultState is SaveEmailAsDraftsSuccess || resultState is UpdateEmailDraftsSuccess) {
_closeComposerButtonState = ButtonState.enabled;
_closeComposerAction(result: resultState);
} else if ((resultState is SaveEmailAsDraftsFailure && resultState.exception is SavingEmailToDraftsCanceledException) ||
(resultState is UpdateEmailDraftsFailure && resultState.exception is SavingEmailToDraftsCanceledException)) {
_closeComposerButtonState = ButtonState.enabled;
_closeComposerAction();
} else if ((resultState is SaveEmailAsDraftsFailure ||
resultState is UpdateEmailDraftsFailure ||
resultState is GenerateEmailFailure) &&
@@ -2071,6 +2081,7 @@ class ComposerController extends BaseController with DragDropFileMixin {
Future<dynamic> _showSavingMessageToDraftsDialog({
required String emailContent,
EmailId? draftEmailId,
CancelToken? cancelToken,
}) {
return Get.dialog(
PointerInterceptor(
@@ -2098,13 +2109,19 @@ class ComposerController extends BaseController with DragDropFileMixin {
references: composerArguments.value!.references,
emailSendingQueue: composerArguments.value!.sendingEmail
),
createNewAndSaveEmailToDraftsInteractor: _createNewAndSaveEmailToDraftsInteractor
createNewAndSaveEmailToDraftsInteractor: _createNewAndSaveEmailToDraftsInteractor,
onCancelSavingEmailToDraftsAction: _handleCancelSavingMessageToDrafts,
cancelToken: cancelToken,
),
),
barrierColor: AppColor.colorDefaultCupertinoActionSheet,
);
}
void _handleCancelSavingMessageToDrafts({CancelToken? cancelToken}) {
cancelToken?.cancel([SavingEmailToDraftsCanceledException()]);
}
void _showConfirmDialogWhenSaveMessageToDraftsFailure({
required BuildContext context,
required FeatureFailure failure,