From 91fa55fbaaffc2ef867eb4116c1868c5823beae7 Mon Sep 17 00:00:00 2001 From: hieubt Date: Thu, 21 Dec 2023 16:51:56 +0700 Subject: [PATCH] TF-2101 Update `email_recovery` controller to handle restore (cherry picked from commit 1e6834686534f108e8e09704d047aaf8c1986408) --- .../email_recovery_controller.dart | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/lib/features/email_recovery/presentation/email_recovery_controller.dart b/lib/features/email_recovery/presentation/email_recovery_controller.dart index 7a472508d..97ac13b79 100644 --- a/lib/features/email_recovery/presentation/email_recovery_controller.dart +++ b/lib/features/email_recovery/presentation/email_recovery_controller.dart @@ -1,12 +1,15 @@ import 'package:core/presentation/utils/keyboard_utils.dart'; import 'package:core/utils/app_logger.dart'; import 'package:core/utils/platform_info.dart'; +import 'package:email_recovery/email_recovery/email_recovery_action.dart'; import 'package:flutter/widgets.dart'; import 'package:get/get.dart'; import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:jmap_dart_client/jmap/core/session/session.dart'; +import 'package:jmap_dart_client/jmap/core/utc_date.dart'; import 'package:jmap_dart_client/jmap/mail/email/email_address.dart'; import 'package:model/autocomplete/auto_complete_pattern.dart'; +import 'package:model/extensions/email_address_extension.dart'; import 'package:model/mailbox/expand_mode.dart'; import 'package:permission_handler/permission_handler.dart'; import 'package:super_tag_editor/tag_editor.dart'; @@ -22,6 +25,7 @@ import 'package:tmail_ui_user/features/email_recovery/presentation/controller/in import 'package:tmail_ui_user/features/email_recovery/presentation/model/email_recovery_arguments.dart'; import 'package:tmail_ui_user/features/email_recovery/presentation/model/email_recovery_field.dart'; import 'package:tmail_ui_user/features/email_recovery/presentation/model/email_recovery_time_type.dart'; +import 'package:tmail_ui_user/features/manage_account/presentation/extensions/datetime_extension.dart'; import 'package:tmail_ui_user/main/routes/route_navigation.dart'; class EmailRecoveryController extends BaseController with DateRangePickerMixin { @@ -35,6 +39,7 @@ class EmailRecoveryController extends BaseController with DateRangePickerMixin { final endDeletionDate = Rxn(); final startReceptionDate = Rxn(); final endReceptionDate = Rxn(); + final hasAttachment = false.obs; final recipientsExpandMode = ExpandMode.EXPAND.obs; final senderExpandMode = ExpandMode.EXPAND.obs; @@ -210,6 +215,10 @@ class EmailRecoveryController extends BaseController with DateRangePickerMixin { } } + void onChangeHasAttachment(bool? value) { + hasAttachment.value = value ?? false; + } + Future> getAutoCompleteSuggestion(String word) async { log('EmailRecoveryController::getAutoCompleteSuggestion(): $word | $_contactSuggestionSource'); _getAllAutoCompleteInteractor = getBinding(); @@ -285,6 +294,45 @@ class EmailRecoveryController extends BaseController with DateRangePickerMixin { } } + void onRestore(BuildContext context) { + KeyboardUtils.hideKeyboard(context); + + final UTCDate? deletedBefore; + final UTCDate? deletedAfter; + final UTCDate? receivedBefore; + final UTCDate? receivedAfter; + if (deletionDateFieldSelected.value == EmailRecoveryTimeType.customRange) { + deletedBefore = endDeletionDate.value?.toUTCDate(); + deletedAfter = startDeletionDate.value?.toUTCDate(); + receivedBefore = endReceptionDate.value?.toUTCDate(); + receivedAfter = startReceptionDate.value?.toUTCDate(); + } else { + deletedBefore = DateTime.now().toUTCDate(); + deletedAfter = deletionDateFieldSelected.value.toOldestUTCDate(); + receivedBefore = DateTime.now().toUTCDate(); + receivedAfter = receptionDateFieldSelected.value.toOldestUTCDate(); + } + + final emailRecoveryAction = EmailRecoveryAction( + deletedBefore: deletedBefore, + deletedAfter: deletedAfter, + receivedBefore: receivedBefore, + receivedAfter: receivedAfter, + hasAttachment: hasAttachment.value, + subject: subjectFieldInputController.text, + recipients: listRecipients.isNotEmpty ? + listRecipients.map((emailAddress) => emailAddress.emailAddress).toList() + : null, + sender: listSenders.isNotEmpty ? + listSenders.first.emailAddress + : null + ); + + log('EmailRecoveryController::onRestore(): emailRecoveryAction: $emailRecoveryAction'); + + popBack(result: emailRecoveryAction); + } + void closeView(BuildContext context) { KeyboardUtils.hideKeyboard(context); popBack();