TF-898 Implement quick creating rule in email view
This commit is contained in:
@@ -0,0 +1,4 @@
|
|||||||
|
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M11.593 10.2064C11.3622 10.4757 10.9536 10.4988 10.694 10.2572L10.3915 9.97571L9.98438 10.3758C9.7207 10.6346 9.45947 10.825 9.20068 10.9471C8.94189 11.0643 8.67578 11.1229 8.40234 11.1229C8.12891 11.1229 7.86035 11.0643 7.59668 10.9471C7.33301 10.825 7.07178 10.6346 6.81299 10.3758L6.40586 9.9757L2.19424 14.1478C2.30684 14.1771 2.43285 14.1917 2.57227 14.1917H13.6699C14.0461 14.1917 14.3511 14.4967 14.3511 14.8729C14.3511 15.249 14.0461 15.554 13.6699 15.554H2.57227C1.78125 15.554 1.18311 15.3514 0.777832 14.9461C0.372559 14.5457 0.169922 13.9549 0.169922 13.1736V5.07305C0.169922 4.29668 0.362793 3.7083 0.748535 3.30791C1.13916 2.90264 1.68604 2.7 2.38916 2.7H14.2031C14.9941 2.7 15.5923 2.90264 15.9976 3.30791C16.4028 3.7083 16.6055 4.29668 16.6055 5.07305V7.02617C16.6055 7.39832 16.3038 7.7 15.9316 7.7C15.5595 7.7 15.2578 7.39832 15.2578 7.02617V5.19406L11.2819 9.10087L11.5427 9.34186C11.7892 9.56963 11.8114 9.95158 11.593 10.2064ZM5.51557 9.10081L1.51758 13.0613V5.17201L5.51557 9.10081ZM2.57227 4.06231C2.4411 4.06231 2.3218 4.07561 2.21436 4.10221L7.56006 9.38701C7.71143 9.5335 7.85303 9.64336 7.98486 9.7166C8.12158 9.78496 8.26074 9.81914 8.40234 9.81914C8.53418 9.81914 8.66602 9.78496 8.79785 9.7166C8.93457 9.64824 9.08105 9.53838 9.2373 9.38701L14.583 4.1092C14.4699 4.07794 14.3433 4.06231 14.2031 4.06231H2.57227Z" fill="#007AFF"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.8838 10.8623C12.0858 10.0644 12.651 8.7 13.7795 8.7H18.5605C19.689 8.7 20.2541 10.0644 19.4562 10.8623L16.77 13.5485V16.7C16.77 17.0314 16.5014 17.3 16.17 17.3C15.8386 17.3 15.57 17.0314 15.57 16.7V13.5485L12.8838 10.8623ZM16.17 12.4515L18.6077 10.0138C18.6241 9.99734 18.6267 9.98654 18.6278 9.98066C18.6293 9.9715 18.6288 9.95728 18.6221 9.94116C18.6154 9.92503 18.6058 9.91458 18.5982 9.90922C18.5933 9.90578 18.5838 9.9 18.5605 9.9H13.7795C13.7562 9.9 13.7467 9.90578 13.7418 9.90922C13.7342 9.91458 13.7245 9.92503 13.7179 9.94116C13.7112 9.95728 13.7106 9.9715 13.7122 9.98065C13.7132 9.98654 13.7158 9.99734 13.7323 10.0138L16.17 12.4515Z" fill="#007AFF"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.2 KiB |
@@ -175,6 +175,7 @@ class ImagePaths {
|
|||||||
String get icQuotas => _getImagePath('ic_quotas.svg');
|
String get icQuotas => _getImagePath('ic_quotas.svg');
|
||||||
String get icQuotasWarning => _getImagePath('ic_quotas_warning.svg');
|
String get icQuotasWarning => _getImagePath('ic_quotas_warning.svg');
|
||||||
String get icQuotasOutOfStorage => _getImagePath('ic_quotas_out_of_storage.svg');
|
String get icQuotasOutOfStorage => _getImagePath('ic_quotas_out_of_storage.svg');
|
||||||
|
String get icQuickCreatingRule => _getImagePath('ic_quick_creating_rule.svg');
|
||||||
|
|
||||||
String _getImagePath(String imageName) {
|
String _getImagePath(String imageName) {
|
||||||
return AssetsPaths.images + imageName;
|
return AssetsPaths.images + imageName;
|
||||||
|
|||||||
@@ -8,12 +8,14 @@ import 'package:get/get.dart';
|
|||||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||||
import 'package:jmap_dart_client/jmap/core/capability/capability_identifier.dart';
|
import 'package:jmap_dart_client/jmap/core/capability/capability_identifier.dart';
|
||||||
import 'package:jmap_dart_client/jmap/core/session/session.dart';
|
import 'package:jmap_dart_client/jmap/core/session/session.dart';
|
||||||
|
import 'package:rule_filter/rule_filter/capability_rule_filter.dart';
|
||||||
import 'package:tmail_ui_user/features/base/mixin/message_dialog_action_mixin.dart';
|
import 'package:tmail_ui_user/features/base/mixin/message_dialog_action_mixin.dart';
|
||||||
import 'package:tmail_ui_user/features/base/mixin/popup_context_menu_action_mixin.dart';
|
import 'package:tmail_ui_user/features/base/mixin/popup_context_menu_action_mixin.dart';
|
||||||
import 'package:tmail_ui_user/features/base/mixin/view_as_dialog_action_mixin.dart';
|
import 'package:tmail_ui_user/features/base/mixin/view_as_dialog_action_mixin.dart';
|
||||||
import 'package:tmail_ui_user/features/email/presentation/mdn_interactor_bindings.dart';
|
import 'package:tmail_ui_user/features/email/presentation/mdn_interactor_bindings.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/bindings/contact_autocomplete_bindings.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/bindings/contact_autocomplete_bindings.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/bindings/tmail_autocomplete_bindings.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/bindings/tmail_autocomplete_bindings.dart';
|
||||||
|
import 'package:tmail_ui_user/features/manage_account/presentation/email_rules/bindings/email_rules_interactor_bindings.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/forward/bindings/forwarding_interactors_bindings.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/forward/bindings/forwarding_interactors_bindings.dart';
|
||||||
import 'package:tmail_ui_user/main/error/capability_validator.dart';
|
import 'package:tmail_ui_user/main/error/capability_validator.dart';
|
||||||
import 'package:tmail_ui_user/main/exceptions/remote_exception.dart';
|
import 'package:tmail_ui_user/main/exceptions/remote_exception.dart';
|
||||||
@@ -129,4 +131,13 @@ abstract class BaseController extends GetxController
|
|||||||
logError('ReloadableController::injectForwardBindings(): exception: $e');
|
logError('ReloadableController::injectForwardBindings(): exception: $e');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void injectRuleFilterBindings(Session? session, AccountId? accountId) {
|
||||||
|
try {
|
||||||
|
requireCapability(session!, accountId!, [capabilityRuleFilter]);
|
||||||
|
EmailRulesInteractorBindings().dependencies();
|
||||||
|
} catch(e) {
|
||||||
|
logError('ReloadableController::injectRuleFilterBindings(): exception: $e');
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -55,9 +55,13 @@ import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_action
|
|||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/dashboard_routes.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/dashboard_routes.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/download/download_task_state.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/download/download_task_state.dart';
|
||||||
|
import 'package:tmail_ui_user/features/manage_account/domain/model/create_new_email_rule_filter_request.dart';
|
||||||
|
import 'package:tmail_ui_user/features/manage_account/domain/state/create_new_rule_filter_state.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/domain/state/get_all_identities_state.dart';
|
import 'package:tmail_ui_user/features/manage_account/domain/state/get_all_identities_state.dart';
|
||||||
|
import 'package:tmail_ui_user/features/manage_account/domain/usecases/create_new_email_rule_filter_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/domain/usecases/get_all_identities_interactor.dart';
|
import 'package:tmail_ui_user/features/manage_account/domain/usecases/get_all_identities_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/datetime_extension.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/datetime_extension.dart';
|
||||||
|
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/model/rules_filter_creator_arguments.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/domain/constants/thread_constants.dart';
|
import 'package:tmail_ui_user/features/thread/domain/constants/thread_constants.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/presentation/model/delete_action_type.dart';
|
import 'package:tmail_ui_user/features/thread/presentation/model/delete_action_type.dart';
|
||||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
@@ -85,6 +89,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
|
|||||||
final DownloadAttachmentForWebInteractor _downloadAttachmentForWebInteractor;
|
final DownloadAttachmentForWebInteractor _downloadAttachmentForWebInteractor;
|
||||||
final GetAllIdentitiesInteractor _getAllIdentitiesInteractor;
|
final GetAllIdentitiesInteractor _getAllIdentitiesInteractor;
|
||||||
|
|
||||||
|
CreateNewEmailRuleFilterInteractor? _createNewEmailRuleFilterInteractor;
|
||||||
SendReceiptToSenderInteractor? _sendReceiptToSenderInteractor;
|
SendReceiptToSenderInteractor? _sendReceiptToSenderInteractor;
|
||||||
|
|
||||||
final emailAddressExpandMode = ExpandMode.COLLAPSE.obs;
|
final emailAddressExpandMode = ExpandMode.COLLAPSE.obs;
|
||||||
@@ -126,6 +131,14 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
|
|||||||
_initializeDebounceTimeIndexPageViewChange();
|
_initializeDebounceTimeIndexPageViewChange();
|
||||||
_initWorker();
|
_initWorker();
|
||||||
_listenDownloadAttachmentProgressState();
|
_listenDownloadAttachmentProgressState();
|
||||||
|
injectRuleFilterBindings(
|
||||||
|
emailSupervisorController.sessionCurrent,
|
||||||
|
emailSupervisorController.accountId);
|
||||||
|
try {
|
||||||
|
_createNewEmailRuleFilterInteractor = Get.find<CreateNewEmailRuleFilterInteractor>();
|
||||||
|
} catch (e) {
|
||||||
|
logError('SingleEmailController::onInit(): ${e.toString()}');
|
||||||
|
}
|
||||||
super.onInit();
|
super.onInit();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -138,7 +151,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
|
|||||||
try {
|
try {
|
||||||
_sendReceiptToSenderInteractor = Get.find<SendReceiptToSenderInteractor>();
|
_sendReceiptToSenderInteractor = Get.find<SendReceiptToSenderInteractor>();
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
logError('EmailController::onReady(): SendReceiptToSenderInteractor not registered');
|
logError('SingleEmailController::onReady(): SendReceiptToSenderInteractor not registered');
|
||||||
}
|
}
|
||||||
super.onReady();
|
super.onReady();
|
||||||
}
|
}
|
||||||
@@ -161,7 +174,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
|
|||||||
|
|
||||||
void _initWorker() {
|
void _initWorker() {
|
||||||
emailWorker = ever(emailSupervisorController.selectedEmail, (presentationEmail) {
|
emailWorker = ever(emailSupervisorController.selectedEmail, (presentationEmail) {
|
||||||
log('EmailController::_initWorker(): $presentationEmail');
|
log('SingleEmailController::_initWorker(): $presentationEmail');
|
||||||
if (presentationEmail is PresentationEmail) {
|
if (presentationEmail is PresentationEmail) {
|
||||||
if (_currentEmailId != presentationEmail.id) {
|
if (_currentEmailId != presentationEmail.id) {
|
||||||
_currentEmailId = presentationEmail.id;
|
_currentEmailId = presentationEmail.id;
|
||||||
@@ -185,7 +198,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
|
|||||||
|
|
||||||
void _listenDownloadAttachmentProgressState() {
|
void _listenDownloadAttachmentProgressState() {
|
||||||
downloadProgressState.listen((state) {
|
downloadProgressState.listen((state) {
|
||||||
log('EmailController::_listenDownloadAttachmentProgressState(): $state');
|
log('SingleEmailController::_listenDownloadAttachmentProgressState(): $state');
|
||||||
state.fold(
|
state.fold(
|
||||||
(failure) => null,
|
(failure) => null,
|
||||||
(success) {
|
(success) {
|
||||||
@@ -203,7 +216,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
|
|||||||
}
|
}
|
||||||
} else if (success is DownloadingAttachmentForWeb) {
|
} else if (success is DownloadingAttachmentForWeb) {
|
||||||
final percent = success.progress.round();
|
final percent = success.progress.round();
|
||||||
log('EmailController::DownloadingAttachmentForWeb(): $percent%');
|
log('SingleEmailController::DownloadingAttachmentForWeb(): $percent%');
|
||||||
|
|
||||||
emailSupervisorController.mailboxDashBoardController.updateDownloadTask(
|
emailSupervisorController.mailboxDashBoardController.updateDownloadTask(
|
||||||
success.taskId,
|
success.taskId,
|
||||||
@@ -234,7 +247,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
|
|||||||
.firstWhere((identity) => identity.mayDelete == false);
|
.firstWhere((identity) => identity.mayDelete == false);
|
||||||
_identitySelected = identityDefault;
|
_identitySelected = identityDefault;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
logError('EmailController::_getAllIdentitiesSuccess(): ${e.toString()}');
|
logError('SingleEmailController::_getAllIdentitiesSuccess(): ${e.toString()}');
|
||||||
_identitySelected = success.identities!.first;
|
_identitySelected = success.identities!.first;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -290,6 +303,8 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
|
|||||||
_getAllIdentitiesSuccess(success);
|
_getAllIdentitiesSuccess(success);
|
||||||
} else if (success is SendReceiptToSenderSuccess) {
|
} else if (success is SendReceiptToSenderSuccess) {
|
||||||
_sendReceiptToSenderSuccess(success);
|
_sendReceiptToSenderSuccess(success);
|
||||||
|
} else if (success is CreateNewRuleFilterSuccess) {
|
||||||
|
_createNewRuleFilterSuccess(success);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -479,7 +494,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void _openDownloadedPreviewWorkGroupDocument(DownloadedResponse downloadedResponse) async {
|
void _openDownloadedPreviewWorkGroupDocument(DownloadedResponse downloadedResponse) async {
|
||||||
log('EmailController::_openDownloadedPreviewWorkGroupDocument(): $downloadedResponse');
|
log('SingleEmailController::_openDownloadedPreviewWorkGroupDocument(): $downloadedResponse');
|
||||||
if (downloadedResponse.mediaType == null) {
|
if (downloadedResponse.mediaType == null) {
|
||||||
await share_library.Share.shareFiles([downloadedResponse.filePath]);
|
await share_library.Share.shareFiles([downloadedResponse.filePath]);
|
||||||
}
|
}
|
||||||
@@ -490,7 +505,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
|
|||||||
uti: Platform.isIOS ? downloadedResponse.mediaType!.getDocumentUti().value : null);
|
uti: Platform.isIOS ? downloadedResponse.mediaType!.getDocumentUti().value : null);
|
||||||
|
|
||||||
if (openResult.type != open_file.ResultType.done) {
|
if (openResult.type != open_file.ResultType.done) {
|
||||||
logError('EmailController::_openDownloadedPreviewWorkGroupDocument(): no preview available');
|
logError('SingleEmailController::_openDownloadedPreviewWorkGroupDocument(): no preview available');
|
||||||
if (currentContext != null) {
|
if (currentContext != null) {
|
||||||
_appToast.showErrorToast(AppLocalizations.of(currentContext!).noPreviewAvailable);
|
_appToast.showErrorToast(AppLocalizations.of(currentContext!).noPreviewAvailable);
|
||||||
}
|
}
|
||||||
@@ -516,7 +531,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void _downloadAttachmentForWebSuccessAction(DownloadAttachmentForWebSuccess success) {
|
void _downloadAttachmentForWebSuccessAction(DownloadAttachmentForWebSuccess success) {
|
||||||
log('EmailController::_downloadAttachmentForWebSuccessAction():');
|
log('SingleEmailController::_downloadAttachmentForWebSuccessAction():');
|
||||||
mailboxDashBoardController.deleteDownloadTask(success.taskId);
|
mailboxDashBoardController.deleteDownloadTask(success.taskId);
|
||||||
|
|
||||||
_downloadManager.createAnchorElementDownloadFileWeb(
|
_downloadManager.createAnchorElementDownloadFileWeb(
|
||||||
@@ -525,7 +540,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void _downloadAttachmentForWebFailureAction(DownloadAttachmentForWebFailure failure) {
|
void _downloadAttachmentForWebFailureAction(DownloadAttachmentForWebFailure failure) {
|
||||||
log('EmailController::_downloadAttachmentForWebFailureAction(): $failure');
|
log('SingleEmailController::_downloadAttachmentForWebFailureAction(): $failure');
|
||||||
mailboxDashBoardController.deleteDownloadTask(failure.taskId);
|
mailboxDashBoardController.deleteDownloadTask(failure.taskId);
|
||||||
|
|
||||||
if (currentOverlayContext != null && currentContext != null) {
|
if (currentOverlayContext != null && currentContext != null) {
|
||||||
@@ -772,22 +787,25 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
|
|||||||
void openEmailAddressDialog(BuildContext context, EmailAddress emailAddress) {
|
void openEmailAddressDialog(BuildContext context, EmailAddress emailAddress) {
|
||||||
if (responsiveUtils.isScreenWithShortestSide(context)) {
|
if (responsiveUtils.isScreenWithShortestSide(context)) {
|
||||||
(EmailAddressBottomSheetBuilder(context, imagePaths, emailAddress)
|
(EmailAddressBottomSheetBuilder(context, imagePaths, emailAddress)
|
||||||
..addOnCloseContextMenuAction(() => popBack())
|
..addOnCloseContextMenuAction(() => popBack())
|
||||||
..addOnCopyEmailAddressAction((emailAddress) => copyEmailAddress(context, emailAddress))
|
..addOnCopyEmailAddressAction((emailAddress) => copyEmailAddress(context, emailAddress))
|
||||||
..addOnComposeEmailAction((emailAddress) => composeEmailFromEmailAddress(emailAddress)))
|
..addOnComposeEmailAction((emailAddress) => composeEmailFromEmailAddress(emailAddress))
|
||||||
.show();
|
..addOnQuickCreatingRuleEmailBottomSheetAction((emailAddress) => quickCreatingRule(context, emailAddress))
|
||||||
|
).show();
|
||||||
} else {
|
} else {
|
||||||
showDialog(
|
showDialog(
|
||||||
context: context,
|
context: context,
|
||||||
barrierColor: AppColor.colorDefaultCupertinoActionSheet,
|
barrierColor: AppColor.colorDefaultCupertinoActionSheet,
|
||||||
builder: (BuildContext context) => PointerInterceptor(
|
builder: (BuildContext context) => PointerInterceptor(
|
||||||
child: EmailAddressDialogBuilder(
|
child: EmailAddressDialogBuilder(
|
||||||
emailAddress,
|
emailAddress,
|
||||||
onCloseDialogAction: () => popBack(),
|
onCloseDialogAction: () => popBack(),
|
||||||
onCopyEmailAddressAction: (emailAddress) =>
|
onCopyEmailAddressAction: (emailAddress) => copyEmailAddress(context, emailAddress),
|
||||||
copyEmailAddress(context, emailAddress),
|
onComposeEmailAction: (emailAddress) => composeEmailFromEmailAddress(emailAddress),
|
||||||
onComposeEmailAction: (emailAddress) =>
|
onQuickCreatingRuleEmailDialogAction: (emailAddress) => quickCreatingRule(context, emailAddress)
|
||||||
composeEmailFromEmailAddress(emailAddress))));
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -813,9 +831,9 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void openMailToLink(Uri? uri) {
|
void openMailToLink(Uri? uri) {
|
||||||
log('EmailController::openMailToLink(): ${uri.toString()}');
|
log('SingleEmailController::openMailToLink(): ${uri.toString()}');
|
||||||
String address = uri?.path ?? '';
|
String address = uri?.path ?? '';
|
||||||
log('EmailController::openMailToLink(): address: $address');
|
log('SingleEmailController::openMailToLink(): address: $address');
|
||||||
if (address.isNotEmpty) {
|
if (address.isNotEmpty) {
|
||||||
final emailAddress = EmailAddress(null, address);
|
final emailAddress = EmailAddress(null, address);
|
||||||
final arguments = ComposerArguments(
|
final arguments = ComposerArguments(
|
||||||
@@ -920,7 +938,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
|
|||||||
mdn: mdnToSender,
|
mdn: mdnToSender,
|
||||||
identityId: _identitySelected!.id!,
|
identityId: _identitySelected!.id!,
|
||||||
sendId: Id(_uuid.v1()));
|
sendId: Id(_uuid.v1()));
|
||||||
log('EmailController::_handleSendReceiptToSenderAction(): sendReceiptRequest: $sendReceiptRequest');
|
log('SingleEmailController::_handleSendReceiptToSenderAction(): sendReceiptRequest: $sendReceiptRequest');
|
||||||
|
|
||||||
consumeState(_sendReceiptToSenderInteractor!.execute(accountId, sendReceiptRequest));
|
consumeState(_sendReceiptToSenderInteractor!.execute(accountId, sendReceiptRequest));
|
||||||
}
|
}
|
||||||
@@ -948,7 +966,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void _sendReceiptToSenderSuccess(SendReceiptToSenderSuccess success) {
|
void _sendReceiptToSenderSuccess(SendReceiptToSenderSuccess success) {
|
||||||
log('EmailController::_sendReceiptToSenderSuccess(): ${success.mdn.toString()}');
|
log('SingleEmailController::_sendReceiptToSenderSuccess(): ${success.mdn.toString()}');
|
||||||
if (currentContext != null) {
|
if (currentContext != null) {
|
||||||
_appToast.showBottomToast(
|
_appToast.showBottomToast(
|
||||||
currentOverlayContext!,
|
currentOverlayContext!,
|
||||||
@@ -997,4 +1015,63 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
|
|||||||
mailboxDashBoardController.goToComposer(arguments);
|
mailboxDashBoardController.goToComposer(arguments);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void quickCreatingRule(BuildContext context, EmailAddress emailAddress) async {
|
||||||
|
popBack();
|
||||||
|
|
||||||
|
final accountId = mailboxDashBoardController.accountId.value;
|
||||||
|
final session = mailboxDashBoardController.sessionCurrent;
|
||||||
|
if (accountId != null && session != null) {
|
||||||
|
final arguments = RulesFilterCreatorArguments(
|
||||||
|
accountId,
|
||||||
|
session,
|
||||||
|
emailAddress: emailAddress);
|
||||||
|
|
||||||
|
if (BuildUtils.isWeb) {
|
||||||
|
showDialogRuleFilterCreator(
|
||||||
|
context: context,
|
||||||
|
arguments: arguments,
|
||||||
|
onCreatedRuleFilter: (arguments) {
|
||||||
|
if (arguments is CreateNewEmailRuleFilterRequest) {
|
||||||
|
_createNewRuleFilterAction(accountId, arguments);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
final newRuleFilterRequest = await push(
|
||||||
|
AppRoutes.rulesFilterCreator,
|
||||||
|
arguments: arguments
|
||||||
|
);
|
||||||
|
|
||||||
|
if (newRuleFilterRequest is CreateNewEmailRuleFilterRequest) {
|
||||||
|
_createNewRuleFilterAction(accountId, newRuleFilterRequest);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void _createNewRuleFilterAction(
|
||||||
|
AccountId accountId,
|
||||||
|
CreateNewEmailRuleFilterRequest ruleFilterRequest
|
||||||
|
) async {
|
||||||
|
try {
|
||||||
|
_createNewEmailRuleFilterInteractor = Get.find<CreateNewEmailRuleFilterInteractor>();
|
||||||
|
} catch (e) {
|
||||||
|
logError('SingleEmailController::onInit(): ${e.toString()}');
|
||||||
|
}
|
||||||
|
if (_createNewEmailRuleFilterInteractor != null) {
|
||||||
|
consumeState(_createNewEmailRuleFilterInteractor!.execute(accountId, ruleFilterRequest));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void _createNewRuleFilterSuccess(CreateNewRuleFilterSuccess success) {
|
||||||
|
if (success.newListRules.isNotEmpty == true) {
|
||||||
|
if (currentOverlayContext != null && currentContext != null) {
|
||||||
|
_appToast.showToastWithIcon(
|
||||||
|
currentOverlayContext!,
|
||||||
|
message: AppLocalizations.of(currentContext!).newFilterWasCreated,
|
||||||
|
icon: imagePaths.icSelected);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -746,21 +746,27 @@ class EmailView extends GetWidget<SingleEmailController> {
|
|||||||
return <Widget>[
|
return <Widget>[
|
||||||
_markAsEmailUnreadAction(context, email),
|
_markAsEmailUnreadAction(context, email),
|
||||||
_markAsEmailSpamOrUnSpamAction(context, email),
|
_markAsEmailSpamOrUnSpamAction(context, email),
|
||||||
|
_quickCreatingRuleAction(context, email),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _markAsEmailUnreadAction(BuildContext context, PresentationEmail email) {
|
Widget _markAsEmailUnreadAction(BuildContext context, PresentationEmail email) {
|
||||||
return (EmailActionCupertinoActionSheetActionBuilder(
|
return (EmailActionCupertinoActionSheetActionBuilder(
|
||||||
const Key('mark_as_unread_action'),
|
const Key('mark_as_unread_action'),
|
||||||
SvgPicture.asset(imagePaths.icUnreadEmail, width: 28, height: 28, fit: BoxFit.fill, color: AppColor.colorTextButton),
|
SvgPicture.asset(
|
||||||
|
imagePaths.icUnreadEmail,
|
||||||
|
width: 24,
|
||||||
|
height: 24,
|
||||||
|
fit: BoxFit.fill,
|
||||||
|
color: AppColor.colorTextButton),
|
||||||
AppLocalizations.of(context).mark_as_unread,
|
AppLocalizations.of(context).mark_as_unread,
|
||||||
email,
|
email,
|
||||||
iconLeftPadding: responsiveUtils.isMobile(context)
|
iconLeftPadding: responsiveUtils.isMobile(context)
|
||||||
? const EdgeInsets.only(left: 12, right: 16)
|
? const EdgeInsets.only(left: 12, right: 16)
|
||||||
: const EdgeInsets.only(right: 12),
|
: const EdgeInsets.only(right: 12),
|
||||||
iconRightPadding: responsiveUtils.isMobile(context)
|
iconRightPadding: responsiveUtils.isMobile(context)
|
||||||
? const EdgeInsets.only(right: 12)
|
? const EdgeInsets.only(right: 12)
|
||||||
: EdgeInsets.zero)
|
: EdgeInsets.zero)
|
||||||
..onActionClick((email) => controller.handleEmailAction(context, email, EmailActionType.markAsUnread)))
|
..onActionClick((email) => controller.handleEmailAction(context, email, EmailActionType.markAsUnread)))
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
@@ -771,100 +777,127 @@ class EmailView extends GetWidget<SingleEmailController> {
|
|||||||
return (EmailActionCupertinoActionSheetActionBuilder(
|
return (EmailActionCupertinoActionSheetActionBuilder(
|
||||||
const Key('mark_as_spam_or_un_spam_action'),
|
const Key('mark_as_spam_or_un_spam_action'),
|
||||||
SvgPicture.asset(
|
SvgPicture.asset(
|
||||||
currentMailbox?.isSpam == true ? imagePaths.icNotSpam : imagePaths.icMailboxSpam,
|
currentMailbox?.isSpam == true ? imagePaths.icNotSpam : imagePaths.icMailboxSpam,
|
||||||
width: 28, height: 28, fit: BoxFit.fill, color: AppColor.colorTextButton),
|
width: 24,
|
||||||
|
height: 24,
|
||||||
|
fit: BoxFit.fill,
|
||||||
|
color: AppColor.colorTextButton),
|
||||||
currentMailbox?.isSpam == true
|
currentMailbox?.isSpam == true
|
||||||
? AppLocalizations.of(context).remove_from_spam
|
? AppLocalizations.of(context).remove_from_spam
|
||||||
: AppLocalizations.of(context).mark_as_spam,
|
: AppLocalizations.of(context).mark_as_spam,
|
||||||
email,
|
email,
|
||||||
iconLeftPadding: responsiveUtils.isMobile(context)
|
iconLeftPadding: responsiveUtils.isMobile(context)
|
||||||
? const EdgeInsets.only(left: 12, right: 16)
|
? const EdgeInsets.only(left: 12, right: 16)
|
||||||
: const EdgeInsets.only(right: 12),
|
: const EdgeInsets.only(right: 12),
|
||||||
iconRightPadding: responsiveUtils.isMobile(context)
|
iconRightPadding: responsiveUtils.isMobile(context)
|
||||||
? const EdgeInsets.only(right: 12)
|
? const EdgeInsets.only(right: 12)
|
||||||
: EdgeInsets.zero)
|
: EdgeInsets.zero)
|
||||||
..onActionClick((email) => controller.handleEmailAction(context, email,
|
..onActionClick((email) => controller.handleEmailAction(context, email,
|
||||||
currentMailbox?.isSpam == true ? EmailActionType.unSpam : EmailActionType.moveToSpam)))
|
currentMailbox?.isSpam == true ? EmailActionType.unSpam : EmailActionType.moveToSpam)))
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Widget _quickCreatingRuleAction(BuildContext context, PresentationEmail email) {
|
||||||
|
return (EmailActionCupertinoActionSheetActionBuilder(
|
||||||
|
const Key('quick_creating_rule_action'),
|
||||||
|
SvgPicture.asset(
|
||||||
|
imagePaths.icQuickCreatingRule,
|
||||||
|
width: 24,
|
||||||
|
height: 24,
|
||||||
|
fit: BoxFit.fill,
|
||||||
|
color: AppColor.colorTextButton),
|
||||||
|
AppLocalizations.of(context).quickCreatingRule,
|
||||||
|
email,
|
||||||
|
iconLeftPadding: responsiveUtils.isMobile(context)
|
||||||
|
? const EdgeInsets.only(left: 12, right: 16)
|
||||||
|
: const EdgeInsets.only(right: 12),
|
||||||
|
iconRightPadding: responsiveUtils.isMobile(context)
|
||||||
|
? const EdgeInsets.only(right: 12)
|
||||||
|
: EdgeInsets.zero)
|
||||||
|
..onActionClick((email) => controller.quickCreatingRule(context, email.from!.first)))
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
List<PopupMenuEntry> _popupMenuEmailActionTile(BuildContext context, PresentationEmail email) {
|
List<PopupMenuEntry> _popupMenuEmailActionTile(BuildContext context, PresentationEmail email) {
|
||||||
return [
|
return [
|
||||||
PopupMenuItem(
|
PopupMenuItem(
|
||||||
padding: EdgeInsets.zero,
|
padding: EdgeInsets.zero,
|
||||||
child: _markAsEmailUnreadPopupItemAction(context, email)),
|
child: _markAsEmailUnreadPopupItemAction(context, email)),
|
||||||
PopupMenuItem(
|
PopupMenuItem(
|
||||||
padding: EdgeInsets.zero,
|
padding: EdgeInsets.zero,
|
||||||
child: _markAsEmailSpamOrUnSpamPopupItemAction(context, email)),
|
child: _markAsEmailSpamOrUnSpamPopupItemAction(context, email)),
|
||||||
|
PopupMenuItem(
|
||||||
|
padding: EdgeInsets.zero,
|
||||||
|
child: _quickCreatingRulePopupItemAction(context, email)),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _markAsEmailUnreadPopupItemAction(BuildContext context, PresentationEmail email) {
|
Widget _markAsEmailUnreadPopupItemAction(BuildContext context, PresentationEmail email) {
|
||||||
return InkWell(
|
return _popupMenuItem(
|
||||||
onTap: () => controller.handleEmailAction(context, email, EmailActionType.markAsUnread),
|
icon: imagePaths.icUnreadEmail,
|
||||||
child: Padding(
|
title: AppLocalizations.of(context).mark_as_unread,
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 16),
|
onTapCallback: () => controller.handleEmailAction(context, email, EmailActionType.markAsUnread)
|
||||||
child: SizedBox(
|
|
||||||
width: 383,
|
|
||||||
height: 56,
|
|
||||||
child: Row(children: [
|
|
||||||
SvgPicture.asset(
|
|
||||||
imagePaths.icUnreadEmail,
|
|
||||||
width: 24,
|
|
||||||
height: 24,
|
|
||||||
color: AppColor.colorTextButton,
|
|
||||||
fit: BoxFit.fill),
|
|
||||||
const SizedBox(width: 12),
|
|
||||||
Expanded(child: Text(
|
|
||||||
AppLocalizations.of(context).mark_as_unread,
|
|
||||||
style: const TextStyle(
|
|
||||||
fontSize: 16,
|
|
||||||
color: Colors.black,
|
|
||||||
fontWeight: FontWeight.w500)
|
|
||||||
)),
|
|
||||||
])
|
|
||||||
),
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _markAsEmailSpamOrUnSpamPopupItemAction(BuildContext context, PresentationEmail email) {
|
Widget _markAsEmailSpamOrUnSpamPopupItemAction(BuildContext context, PresentationEmail email) {
|
||||||
final currentMailbox = controller.getMailboxContain(email);
|
final currentMailbox = controller.getMailboxContain(email);
|
||||||
|
|
||||||
return InkWell(
|
return _popupMenuItem(
|
||||||
onTap: () => controller.handleEmailAction(
|
icon: currentMailbox?.isSpam == true
|
||||||
context,
|
? imagePaths.icNotSpam
|
||||||
email,
|
: imagePaths.icMailboxSpam,
|
||||||
currentMailbox?.isSpam == true
|
title: currentMailbox?.isSpam == true
|
||||||
? EmailActionType.unSpam
|
? AppLocalizations.of(context).remove_from_spam
|
||||||
: EmailActionType.moveToSpam),
|
: AppLocalizations.of(context).mark_as_spam,
|
||||||
|
onTapCallback: () => controller.handleEmailAction(
|
||||||
|
context,
|
||||||
|
email,
|
||||||
|
currentMailbox?.isSpam == true ? EmailActionType.unSpam : EmailActionType.moveToSpam)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget _quickCreatingRulePopupItemAction(BuildContext context, PresentationEmail email) {
|
||||||
|
return _popupMenuItem(
|
||||||
|
icon: imagePaths.icQuickCreatingRule,
|
||||||
|
title: AppLocalizations.of(context).quickCreatingRule,
|
||||||
|
onTapCallback: () => controller.quickCreatingRule(context, email.from!.first)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget _popupMenuItem({
|
||||||
|
required String icon,
|
||||||
|
required String title,
|
||||||
|
Function()? onTapCallback
|
||||||
|
}) {
|
||||||
|
return Material(
|
||||||
|
color: Colors.transparent,
|
||||||
|
child: InkWell(
|
||||||
|
onTap: onTapCallback,
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 16),
|
padding: const EdgeInsets.symmetric(horizontal: 16),
|
||||||
child: SizedBox(
|
child: SizedBox(
|
||||||
width: 383,
|
width: 300,
|
||||||
height: 56,
|
height: 44,
|
||||||
child: Row(children: [
|
child: Row(children: [
|
||||||
SvgPicture.asset(
|
SvgPicture.asset(
|
||||||
currentMailbox?.isSpam == true
|
icon,
|
||||||
? imagePaths.icNotSpam
|
width: 20,
|
||||||
: imagePaths.icMailboxSpam,
|
height: 20,
|
||||||
width: 24,
|
color: AppColor.colorTextButton,
|
||||||
height: 24,
|
fit: BoxFit.fill),
|
||||||
color: AppColor.colorTextButton,
|
const SizedBox(width: 12),
|
||||||
fit: BoxFit.fill),
|
Expanded(child: Text(
|
||||||
const SizedBox(width: 12),
|
title,
|
||||||
Expanded(child: Text(
|
style: const TextStyle(
|
||||||
currentMailbox?.isSpam == true
|
fontSize: 15,
|
||||||
? AppLocalizations.of(context).remove_from_spam
|
color: Colors.black,
|
||||||
: AppLocalizations.of(context).mark_as_spam,
|
fontWeight: FontWeight.normal)
|
||||||
style: const TextStyle(
|
)),
|
||||||
fontSize: 16,
|
])
|
||||||
color: Colors.black,
|
|
||||||
fontWeight: FontWeight.w500)
|
|
||||||
)),
|
|
||||||
])
|
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -11,6 +11,7 @@ import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
|||||||
typedef OnCloseBottomSheetAction = void Function();
|
typedef OnCloseBottomSheetAction = void Function();
|
||||||
typedef OnCopyEmailAddressBottomSheetAction = void Function(EmailAddress);
|
typedef OnCopyEmailAddressBottomSheetAction = void Function(EmailAddress);
|
||||||
typedef OnComposeEmailBottomSheetAction = void Function(EmailAddress);
|
typedef OnComposeEmailBottomSheetAction = void Function(EmailAddress);
|
||||||
|
typedef OnQuickCreatingRuleEmailBottomSheetAction = void Function(EmailAddress);
|
||||||
|
|
||||||
class EmailAddressBottomSheetBuilder {
|
class EmailAddressBottomSheetBuilder {
|
||||||
|
|
||||||
@@ -21,6 +22,7 @@ class EmailAddressBottomSheetBuilder {
|
|||||||
OnCloseBottomSheetAction? _onCloseBottomSheetAction;
|
OnCloseBottomSheetAction? _onCloseBottomSheetAction;
|
||||||
OnCopyEmailAddressBottomSheetAction? _onCopyEmailAddressAction;
|
OnCopyEmailAddressBottomSheetAction? _onCopyEmailAddressAction;
|
||||||
OnComposeEmailBottomSheetAction? _onComposeEmailAction;
|
OnComposeEmailBottomSheetAction? _onComposeEmailAction;
|
||||||
|
OnQuickCreatingRuleEmailBottomSheetAction? _creatingRuleEmailBottomSheetAction;
|
||||||
|
|
||||||
EmailAddressBottomSheetBuilder(
|
EmailAddressBottomSheetBuilder(
|
||||||
this._context,
|
this._context,
|
||||||
@@ -40,6 +42,10 @@ class EmailAddressBottomSheetBuilder {
|
|||||||
_onComposeEmailAction = onComposeEmailAction;
|
_onComposeEmailAction = onComposeEmailAction;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void addOnQuickCreatingRuleEmailBottomSheetAction(OnQuickCreatingRuleEmailBottomSheetAction creatingRuleEmailBottomSheetAction) {
|
||||||
|
_creatingRuleEmailBottomSheetAction = creatingRuleEmailBottomSheetAction;
|
||||||
|
}
|
||||||
|
|
||||||
RoundedRectangleBorder _shape() {
|
RoundedRectangleBorder _shape() {
|
||||||
return const RoundedRectangleBorder(
|
return const RoundedRectangleBorder(
|
||||||
borderRadius: BorderRadius.only(
|
borderRadius: BorderRadius.only(
|
||||||
@@ -132,28 +138,54 @@ class EmailAddressBottomSheetBuilder {
|
|||||||
onPressed: () => _onCopyEmailAddressAction?.call(_emailAddress)
|
onPressed: () => _onCopyEmailAddressAction?.call(_emailAddress)
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
SizedBox(height: _emailAddress.displayName.isNotEmpty ? 100 : 130),
|
const SizedBox(height: 24),
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.only(left: 16, right: 16, bottom: 20),
|
padding: const EdgeInsets.only(left: 24, right: 24, bottom: 12),
|
||||||
|
child: SizedBox(
|
||||||
|
key: const Key('quick_creating_rule_email_button'),
|
||||||
|
width: double.infinity,
|
||||||
|
height: 44,
|
||||||
|
child: TextButton(
|
||||||
|
style: ButtonStyle(
|
||||||
|
foregroundColor: MaterialStateProperty.resolveWith<Color>(
|
||||||
|
(Set<MaterialState> states) => AppColor.colorTextButton),
|
||||||
|
backgroundColor: MaterialStateProperty.resolveWith<Color>(
|
||||||
|
(Set<MaterialState> states) => AppColor.colorItemEmailSelectedDesktop),
|
||||||
|
shape: MaterialStateProperty.all(RoundedRectangleBorder(
|
||||||
|
borderRadius: BorderRadius.circular(8),
|
||||||
|
side: const BorderSide(
|
||||||
|
width: 0,
|
||||||
|
color: AppColor.colorItemEmailSelectedDesktop)))),
|
||||||
|
child: Text(
|
||||||
|
AppLocalizations.of(_context).quickCreatingRule,
|
||||||
|
style: const TextStyle(
|
||||||
|
fontSize: 17,
|
||||||
|
color: AppColor.colorTextButton,
|
||||||
|
fontWeight: FontWeight.w500)),
|
||||||
|
onPressed: () => _creatingRuleEmailBottomSheetAction?.call(_emailAddress)),
|
||||||
|
)
|
||||||
|
),
|
||||||
|
Padding(
|
||||||
|
padding: const EdgeInsets.only(left: 24, right: 24, bottom: 24),
|
||||||
child: SizedBox(
|
child: SizedBox(
|
||||||
key: const Key('compose_email_button'),
|
key: const Key('compose_email_button'),
|
||||||
width: double.infinity,
|
width: double.infinity,
|
||||||
height: 48,
|
height: 44,
|
||||||
child: ElevatedButton(
|
child: TextButton(
|
||||||
style: ButtonStyle(
|
style: ButtonStyle(
|
||||||
foregroundColor: MaterialStateProperty.resolveWith<Color>(
|
foregroundColor: MaterialStateProperty.resolveWith<Color>(
|
||||||
(Set<MaterialState> states) => Colors.white),
|
(Set<MaterialState> states) => Colors.white),
|
||||||
backgroundColor: MaterialStateProperty.resolveWith<Color>(
|
backgroundColor: MaterialStateProperty.resolveWith<Color>(
|
||||||
(Set<MaterialState> states) => AppColor.colorTextButton),
|
(Set<MaterialState> states) => AppColor.colorTextButton),
|
||||||
shape: MaterialStateProperty.all(RoundedRectangleBorder(
|
shape: MaterialStateProperty.all(RoundedRectangleBorder(
|
||||||
borderRadius: BorderRadius.circular(10),
|
borderRadius: BorderRadius.circular(8),
|
||||||
side: const BorderSide(
|
side: const BorderSide(
|
||||||
width: 0,
|
width: 0,
|
||||||
color: AppColor.colorTextButton)))),
|
color: AppColor.colorTextButton)))),
|
||||||
child: Text(
|
child: Text(
|
||||||
AppLocalizations.of(_context).compose_email,
|
AppLocalizations.of(_context).compose_email,
|
||||||
style: const TextStyle(
|
style: const TextStyle(
|
||||||
fontSize: 16,
|
fontSize: 17,
|
||||||
color: Colors.white,
|
color: Colors.white,
|
||||||
fontWeight: FontWeight.w500)),
|
fontWeight: FontWeight.w500)),
|
||||||
onPressed: () => _onComposeEmailAction?.call(_emailAddress)),
|
onPressed: () => _onComposeEmailAction?.call(_emailAddress)),
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
|||||||
typedef OnCloseDialogAction = void Function();
|
typedef OnCloseDialogAction = void Function();
|
||||||
typedef OnCopyEmailAddressDialogAction = void Function(EmailAddress);
|
typedef OnCopyEmailAddressDialogAction = void Function(EmailAddress);
|
||||||
typedef OnComposeEmailDialogAction = void Function(EmailAddress);
|
typedef OnComposeEmailDialogAction = void Function(EmailAddress);
|
||||||
|
typedef OnQuickCreatingRuleEmailDialogAction = void Function(EmailAddress);
|
||||||
|
|
||||||
class EmailAddressDialogBuilder extends StatelessWidget {
|
class EmailAddressDialogBuilder extends StatelessWidget {
|
||||||
|
|
||||||
@@ -17,6 +18,7 @@ class EmailAddressDialogBuilder extends StatelessWidget {
|
|||||||
final OnCloseDialogAction? onCloseDialogAction;
|
final OnCloseDialogAction? onCloseDialogAction;
|
||||||
final OnCopyEmailAddressDialogAction? onCopyEmailAddressAction;
|
final OnCopyEmailAddressDialogAction? onCopyEmailAddressAction;
|
||||||
final OnComposeEmailDialogAction? onComposeEmailAction;
|
final OnComposeEmailDialogAction? onComposeEmailAction;
|
||||||
|
final OnQuickCreatingRuleEmailDialogAction? onQuickCreatingRuleEmailDialogAction;
|
||||||
|
|
||||||
const EmailAddressDialogBuilder(
|
const EmailAddressDialogBuilder(
|
||||||
this._emailAddress, {
|
this._emailAddress, {
|
||||||
@@ -24,6 +26,7 @@ class EmailAddressDialogBuilder extends StatelessWidget {
|
|||||||
this.onCloseDialogAction,
|
this.onCloseDialogAction,
|
||||||
this.onCopyEmailAddressAction,
|
this.onCopyEmailAddressAction,
|
||||||
this.onComposeEmailAction,
|
this.onComposeEmailAction,
|
||||||
|
this.onQuickCreatingRuleEmailDialogAction,
|
||||||
}) : super(key: key);
|
}) : super(key: key);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -43,7 +46,8 @@ class EmailAddressDialogBuilder extends StatelessWidget {
|
|||||||
decoration: const BoxDecoration(
|
decoration: const BoxDecoration(
|
||||||
color: Colors.white,
|
color: Colors.white,
|
||||||
borderRadius: BorderRadius.all(Radius.circular(16))),
|
borderRadius: BorderRadius.all(Radius.circular(16))),
|
||||||
child: Wrap(
|
child: Column(
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
children: [
|
children: [
|
||||||
Align(
|
Align(
|
||||||
alignment: Alignment.centerRight,
|
alignment: Alignment.centerRight,
|
||||||
@@ -115,28 +119,54 @@ class EmailAddressDialogBuilder extends StatelessWidget {
|
|||||||
onPressed: () => onCopyEmailAddressAction?.call(_emailAddress)
|
onPressed: () => onCopyEmailAddressAction?.call(_emailAddress)
|
||||||
)
|
)
|
||||||
))),
|
))),
|
||||||
SizedBox(height: _emailAddress.displayName.isNotEmpty ? 100 : 130),
|
const SizedBox(height: 24),
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.only(left: 16, right: 16, bottom: 20),
|
padding: const EdgeInsets.only(left: 24, right: 24, bottom: 12),
|
||||||
|
child: SizedBox(
|
||||||
|
key: const Key('quick_creating_rule_email_button'),
|
||||||
|
width: double.infinity,
|
||||||
|
height: 44,
|
||||||
|
child: TextButton(
|
||||||
|
style: ButtonStyle(
|
||||||
|
foregroundColor: MaterialStateProperty.resolveWith<Color>(
|
||||||
|
(Set<MaterialState> states) => AppColor.colorTextButton),
|
||||||
|
backgroundColor: MaterialStateProperty.resolveWith<Color>(
|
||||||
|
(Set<MaterialState> states) => AppColor.colorItemEmailSelectedDesktop),
|
||||||
|
shape: MaterialStateProperty.all(RoundedRectangleBorder(
|
||||||
|
borderRadius: BorderRadius.circular(8),
|
||||||
|
side: const BorderSide(
|
||||||
|
width: 0,
|
||||||
|
color: AppColor.colorItemEmailSelectedDesktop)))),
|
||||||
|
child: Text(
|
||||||
|
AppLocalizations.of(context).quickCreatingRule,
|
||||||
|
style: const TextStyle(
|
||||||
|
fontSize: 17,
|
||||||
|
color: AppColor.colorTextButton,
|
||||||
|
fontWeight: FontWeight.w500)),
|
||||||
|
onPressed: () => onQuickCreatingRuleEmailDialogAction?.call(_emailAddress)),
|
||||||
|
)
|
||||||
|
),
|
||||||
|
Padding(
|
||||||
|
padding: const EdgeInsets.only(left: 24, right: 24, bottom: 24),
|
||||||
child: SizedBox(
|
child: SizedBox(
|
||||||
key: const Key('compose_email_button'),
|
key: const Key('compose_email_button'),
|
||||||
width: double.infinity,
|
width: double.infinity,
|
||||||
height: 48,
|
height: 44,
|
||||||
child: ElevatedButton(
|
child: TextButton(
|
||||||
style: ButtonStyle(
|
style: ButtonStyle(
|
||||||
foregroundColor: MaterialStateProperty.resolveWith<Color>(
|
foregroundColor: MaterialStateProperty.resolveWith<Color>(
|
||||||
(Set<MaterialState> states) => Colors.white),
|
(Set<MaterialState> states) => Colors.white),
|
||||||
backgroundColor: MaterialStateProperty.resolveWith<Color>(
|
backgroundColor: MaterialStateProperty.resolveWith<Color>(
|
||||||
(Set<MaterialState> states) => AppColor.colorTextButton),
|
(Set<MaterialState> states) => AppColor.colorTextButton),
|
||||||
shape: MaterialStateProperty.all(RoundedRectangleBorder(
|
shape: MaterialStateProperty.all(RoundedRectangleBorder(
|
||||||
borderRadius: BorderRadius.circular(10),
|
borderRadius: BorderRadius.circular(8),
|
||||||
side: const BorderSide(
|
side: const BorderSide(
|
||||||
width: 0,
|
width: 0,
|
||||||
color: AppColor.colorTextButton)))),
|
color: AppColor.colorTextButton)))),
|
||||||
child: Text(
|
child: Text(
|
||||||
AppLocalizations.of(context).compose_email,
|
AppLocalizations.of(context).compose_email,
|
||||||
style: const TextStyle(
|
style: const TextStyle(
|
||||||
fontSize: 16,
|
fontSize: 17,
|
||||||
color: Colors.white,
|
color: Colors.white,
|
||||||
fontWeight: FontWeight.w500)),
|
fontWeight: FontWeight.w500)),
|
||||||
onPressed: () => onComposeEmailAction?.call(_emailAddress)),
|
onPressed: () => onComposeEmailAction?.call(_emailAddress)),
|
||||||
|
|||||||
+2
@@ -329,6 +329,7 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
accountId.value = sessionCurrent?.accounts.keys.first;
|
accountId.value = sessionCurrent?.accounts.keys.first;
|
||||||
_getUserProfile();
|
_getUserProfile();
|
||||||
injectAutoCompleteBindings(sessionCurrent, accountId.value);
|
injectAutoCompleteBindings(sessionCurrent, accountId.value);
|
||||||
|
injectRuleFilterBindings(sessionCurrent, accountId.value);
|
||||||
injectVacationBindings(sessionCurrent, accountId.value);
|
injectVacationBindings(sessionCurrent, accountId.value);
|
||||||
_getVacationResponse();
|
_getVacationResponse();
|
||||||
} else {
|
} else {
|
||||||
@@ -1021,6 +1022,7 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
_getUserProfile();
|
_getUserProfile();
|
||||||
_handleComposerCache();
|
_handleComposerCache();
|
||||||
injectAutoCompleteBindings(sessionCurrent, accountId.value);
|
injectAutoCompleteBindings(sessionCurrent, accountId.value);
|
||||||
|
injectRuleFilterBindings(sessionCurrent, accountId.value);
|
||||||
injectVacationBindings(sessionCurrent, accountId.value);
|
injectVacationBindings(sessionCurrent, accountId.value);
|
||||||
_getVacationResponse();
|
_getVacationResponse();
|
||||||
}
|
}
|
||||||
|
|||||||
+10
@@ -0,0 +1,10 @@
|
|||||||
|
import 'package:get/get.dart';
|
||||||
|
import 'package:tmail_ui_user/features/manage_account/presentation/email_rules/email_rules_controller.dart';
|
||||||
|
|
||||||
|
class EmailRulesBindings extends Bindings {
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dependencies() {
|
||||||
|
Get.lazyPut(() => EmailRulesController());
|
||||||
|
}
|
||||||
|
}
|
||||||
+45
@@ -0,0 +1,45 @@
|
|||||||
|
import 'package:get/get.dart';
|
||||||
|
import 'package:tmail_ui_user/features/base/interactors_bindings.dart';
|
||||||
|
import 'package:tmail_ui_user/features/manage_account/data/datasource/rule_filter_datasource.dart';
|
||||||
|
import 'package:tmail_ui_user/features/manage_account/data/datasource_impl/rule_filter_datasource_impl.dart';
|
||||||
|
import 'package:tmail_ui_user/features/manage_account/data/network/rule_filter_api.dart';
|
||||||
|
import 'package:tmail_ui_user/features/manage_account/data/repository/rule_filter_repository_impl.dart';
|
||||||
|
import 'package:tmail_ui_user/features/manage_account/domain/repository/rule_filter_repository.dart';
|
||||||
|
import 'package:tmail_ui_user/features/manage_account/domain/usecases/delete_email_rule_interactor.dart';
|
||||||
|
import 'package:tmail_ui_user/features/manage_account/domain/usecases/create_new_email_rule_filter_interactor.dart';
|
||||||
|
import 'package:tmail_ui_user/features/manage_account/domain/usecases/edit_email_rule_filter_interactor.dart';
|
||||||
|
import 'package:tmail_ui_user/features/manage_account/domain/usecases/get_all_rules_interactor.dart';
|
||||||
|
import 'package:tmail_ui_user/main/exceptions/remote_exception_thrower.dart';
|
||||||
|
|
||||||
|
class EmailRulesInteractorBindings extends InteractorsBindings {
|
||||||
|
|
||||||
|
@override
|
||||||
|
void bindingsDataSource() {
|
||||||
|
Get.lazyPut<RuleFilterDataSource>(() => Get.find<RuleFilterDataSourceImpl>());
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void bindingsDataSourceImpl() {
|
||||||
|
Get.lazyPut(() => RuleFilterDataSourceImpl(
|
||||||
|
Get.find<RuleFilterAPI>(),
|
||||||
|
Get.find<RemoteExceptionThrower>()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void bindingsInteractor() {
|
||||||
|
Get.lazyPut(() => GetAllRulesInteractor(Get.find<RuleFilterRepository>()));
|
||||||
|
Get.lazyPut(() => DeleteEmailRuleInteractor(Get.find<RuleFilterRepository>()));
|
||||||
|
Get.lazyPut(() => CreateNewEmailRuleFilterInteractor(Get.find<RuleFilterRepository>()));
|
||||||
|
Get.lazyPut(() => EditEmailRuleFilterInteractor(Get.find<RuleFilterRepository>()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void bindingsRepository() {
|
||||||
|
Get.lazyPut<RuleFilterRepository>(() => Get.find<RuleFilterRepositoryImpl>());
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void bindingsRepositoryImpl() {
|
||||||
|
Get.lazyPut(() => RuleFilterRepositoryImpl(Get.find<RuleFilterDataSource>()));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,41 +0,0 @@
|
|||||||
import 'package:get/get.dart';
|
|
||||||
import 'package:tmail_ui_user/features/base/base_bindings.dart';
|
|
||||||
import 'package:tmail_ui_user/features/manage_account/domain/repository/manage_account_repository.dart';
|
|
||||||
import 'package:tmail_ui_user/features/manage_account/domain/usecases/delete_email_rule_interactor.dart';
|
|
||||||
import 'package:tmail_ui_user/features/manage_account/domain/usecases/create_new_email_rule_filter_interactor.dart';
|
|
||||||
import 'package:tmail_ui_user/features/manage_account/domain/usecases/edit_email_rule_filter_interactor.dart';
|
|
||||||
import 'package:tmail_ui_user/features/manage_account/domain/usecases/get_all_rules_interactor.dart';
|
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/email_rules/email_rules_controller.dart';
|
|
||||||
|
|
||||||
class EmailRulesBindings extends BaseBindings {
|
|
||||||
|
|
||||||
@override
|
|
||||||
void bindingsController() {
|
|
||||||
Get.lazyPut(() => EmailRulesController(
|
|
||||||
Get.find<GetAllRulesInteractor>(),
|
|
||||||
Get.find<DeleteEmailRuleInteractor>(),
|
|
||||||
Get.find<CreateNewEmailRuleFilterInteractor>(),
|
|
||||||
Get.find<EditEmailRuleFilterInteractor>(),
|
|
||||||
));
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
void bindingsDataSource() {}
|
|
||||||
|
|
||||||
@override
|
|
||||||
void bindingsDataSourceImpl() {}
|
|
||||||
|
|
||||||
@override
|
|
||||||
void bindingsInteractor() {
|
|
||||||
Get.lazyPut(() => GetAllRulesInteractor(Get.find<ManageAccountRepository>()));
|
|
||||||
Get.lazyPut(() => DeleteEmailRuleInteractor(Get.find<ManageAccountRepository>()));
|
|
||||||
Get.lazyPut(() => CreateNewEmailRuleFilterInteractor(Get.find<ManageAccountRepository>()));
|
|
||||||
Get.lazyPut(() => EditEmailRuleFilterInteractor(Get.find<ManageAccountRepository>()));
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
void bindingsRepository() {}
|
|
||||||
|
|
||||||
@override
|
|
||||||
void bindingsRepositoryImpl() {}
|
|
||||||
}
|
|
||||||
@@ -4,6 +4,7 @@ import 'package:core/presentation/utils/app_toast.dart';
|
|||||||
import 'package:core/presentation/utils/responsive_utils.dart';
|
import 'package:core/presentation/utils/responsive_utils.dart';
|
||||||
import 'package:core/presentation/views/bottom_popup/confirmation_dialog_action_sheet_builder.dart';
|
import 'package:core/presentation/views/bottom_popup/confirmation_dialog_action_sheet_builder.dart';
|
||||||
import 'package:core/presentation/views/dialog/confirmation_dialog_builder.dart';
|
import 'package:core/presentation/views/dialog/confirmation_dialog_builder.dart';
|
||||||
|
import 'package:core/utils/app_logger.dart';
|
||||||
import 'package:core/utils/build_utils.dart';
|
import 'package:core/utils/build_utils.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_svg/flutter_svg.dart';
|
import 'package:flutter_svg/flutter_svg.dart';
|
||||||
@@ -33,10 +34,10 @@ import 'package:tmail_ui_user/main/routes/app_routes.dart';
|
|||||||
|
|
||||||
class EmailRulesController extends BaseController {
|
class EmailRulesController extends BaseController {
|
||||||
|
|
||||||
final GetAllRulesInteractor _getAllRulesInteractor;
|
GetAllRulesInteractor? _getAllRulesInteractor;
|
||||||
final DeleteEmailRuleInteractor _deleteEmailRuleInteractor;
|
DeleteEmailRuleInteractor? _deleteEmailRuleInteractor;
|
||||||
final CreateNewEmailRuleFilterInteractor _createNewEmailRuleFilterInteractor;
|
CreateNewEmailRuleFilterInteractor? _createNewEmailRuleFilterInteractor;
|
||||||
final EditEmailRuleFilterInteractor _editEmailRuleFilterInteractor;
|
EditEmailRuleFilterInteractor? _editEmailRuleFilterInteractor;
|
||||||
|
|
||||||
final _accountDashBoardController = Get.find<ManageAccountDashBoardController>();
|
final _accountDashBoardController = Get.find<ManageAccountDashBoardController>();
|
||||||
final _imagePaths = Get.find<ImagePaths>();
|
final _imagePaths = Get.find<ImagePaths>();
|
||||||
@@ -45,12 +46,7 @@ class EmailRulesController extends BaseController {
|
|||||||
|
|
||||||
final listEmailRule = <TMailRule>[].obs;
|
final listEmailRule = <TMailRule>[].obs;
|
||||||
|
|
||||||
EmailRulesController(
|
EmailRulesController();
|
||||||
this._getAllRulesInteractor,
|
|
||||||
this._deleteEmailRuleInteractor,
|
|
||||||
this._createNewEmailRuleFilterInteractor,
|
|
||||||
this._editEmailRuleFilterInteractor,
|
|
||||||
);
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void onDone() {
|
void onDone() {
|
||||||
@@ -71,16 +67,28 @@ class EmailRulesController extends BaseController {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
void onInit() {
|
void onInit() {
|
||||||
_getAllRules();
|
|
||||||
super.onInit();
|
super.onInit();
|
||||||
|
try {
|
||||||
|
_getAllRulesInteractor = Get.find<GetAllRulesInteractor>();
|
||||||
|
_deleteEmailRuleInteractor = Get.find<DeleteEmailRuleInteractor>();
|
||||||
|
_createNewEmailRuleFilterInteractor = Get.find<CreateNewEmailRuleFilterInteractor>();
|
||||||
|
_editEmailRuleFilterInteractor = Get.find<EditEmailRuleFilterInteractor>();
|
||||||
|
} catch (e) {
|
||||||
|
logError('EmailRulesController::onInit(): ${e.toString()}');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void onReady() {
|
||||||
|
_getAllRules();
|
||||||
|
super.onReady();
|
||||||
}
|
}
|
||||||
|
|
||||||
void goToCreateNewRule(BuildContext context) async {
|
void goToCreateNewRule(BuildContext context) async {
|
||||||
final accountId = _accountDashBoardController.accountId.value;
|
final accountId = _accountDashBoardController.accountId.value;
|
||||||
if (accountId != null) {
|
final session = _accountDashBoardController.sessionCurrent.value;
|
||||||
final arguments = RulesFilterCreatorArguments(
|
if (accountId != null && session != null) {
|
||||||
accountId,
|
final arguments = RulesFilterCreatorArguments(accountId, session);
|
||||||
listEmailRule: listEmailRule);
|
|
||||||
|
|
||||||
if (BuildUtils.isWeb) {
|
if (BuildUtils.isWeb) {
|
||||||
showDialogRuleFilterCreator(
|
showDialogRuleFilterCreator(
|
||||||
@@ -107,9 +115,9 @@ class EmailRulesController extends BaseController {
|
|||||||
AccountId accountId,
|
AccountId accountId,
|
||||||
CreateNewEmailRuleFilterRequest ruleFilterRequest
|
CreateNewEmailRuleFilterRequest ruleFilterRequest
|
||||||
) async {
|
) async {
|
||||||
consumeState(_createNewEmailRuleFilterInteractor.execute(
|
if (_createNewEmailRuleFilterInteractor != null) {
|
||||||
accountId,
|
consumeState(_createNewEmailRuleFilterInteractor!.execute(accountId, ruleFilterRequest));
|
||||||
ruleFilterRequest));
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void _createNewRuleFilterSuccess(CreateNewRuleFilterSuccess success) {
|
void _createNewRuleFilterSuccess(CreateNewRuleFilterSuccess success) {
|
||||||
@@ -127,12 +135,13 @@ class EmailRulesController extends BaseController {
|
|||||||
|
|
||||||
void editEmailRule(BuildContext context, TMailRule rule) async {
|
void editEmailRule(BuildContext context, TMailRule rule) async {
|
||||||
final accountId = _accountDashBoardController.accountId.value;
|
final accountId = _accountDashBoardController.accountId.value;
|
||||||
if (accountId != null) {
|
final session = _accountDashBoardController.sessionCurrent.value;
|
||||||
|
if (accountId != null && session != null) {
|
||||||
final arguments = RulesFilterCreatorArguments(
|
final arguments = RulesFilterCreatorArguments(
|
||||||
accountId,
|
accountId,
|
||||||
|
session,
|
||||||
actionType: CreatorActionType.edit,
|
actionType: CreatorActionType.edit,
|
||||||
tMailRule: rule,
|
tMailRule: rule);
|
||||||
listEmailRule: listEmailRule);
|
|
||||||
|
|
||||||
if (BuildUtils.isWeb) {
|
if (BuildUtils.isWeb) {
|
||||||
showDialogRuleFilterCreator(
|
showDialogRuleFilterCreator(
|
||||||
@@ -159,7 +168,9 @@ class EmailRulesController extends BaseController {
|
|||||||
AccountId accountId,
|
AccountId accountId,
|
||||||
EditEmailRuleFilterRequest ruleFilterRequest
|
EditEmailRuleFilterRequest ruleFilterRequest
|
||||||
) {
|
) {
|
||||||
consumeState(_editEmailRuleFilterInteractor.execute(accountId, ruleFilterRequest));
|
if (_editEmailRuleFilterInteractor != null) {
|
||||||
|
consumeState(_editEmailRuleFilterInteractor!.execute(accountId, ruleFilterRequest));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void _editEmailRuleFilterSuccess(EditEmailRuleFilterSuccess success) {
|
void _editEmailRuleFilterSuccess(EditEmailRuleFilterSuccess success) {
|
||||||
@@ -214,13 +225,16 @@ class EmailRulesController extends BaseController {
|
|||||||
void _handleDeleteEmailRuleAction(TMailRule emailRule) {
|
void _handleDeleteEmailRuleAction(TMailRule emailRule) {
|
||||||
popBack();
|
popBack();
|
||||||
|
|
||||||
final deleteEmailRuleRequest = DeleteEmailRuleRequest(
|
if (_deleteEmailRuleInteractor != null) {
|
||||||
emailRuleDelete : emailRule,
|
final deleteEmailRuleRequest = DeleteEmailRuleRequest(
|
||||||
currentEmailRules: listEmailRule,
|
emailRuleDelete : emailRule,
|
||||||
);
|
currentEmailRules: listEmailRule,
|
||||||
consumeState(_deleteEmailRuleInteractor.execute(
|
);
|
||||||
|
|
||||||
|
consumeState(_deleteEmailRuleInteractor!.execute(
|
||||||
_accountDashBoardController.accountId.value!,
|
_accountDashBoardController.accountId.value!,
|
||||||
deleteEmailRuleRequest));
|
deleteEmailRuleRequest));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void _handleDeleteEmailRuleSuccess(DeleteEmailRuleSuccess success) {
|
void _handleDeleteEmailRuleSuccess(DeleteEmailRuleSuccess success) {
|
||||||
@@ -239,7 +253,9 @@ class EmailRulesController extends BaseController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void _getAllRules() {
|
void _getAllRules() {
|
||||||
consumeState(_getAllRulesInteractor.execute(_accountDashBoardController.accountId.value!));
|
if (_getAllRulesInteractor != null) {
|
||||||
|
consumeState(_getAllRulesInteractor!.execute(_accountDashBoardController.accountId.value!));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void openEditRuleMenuAction(BuildContext context, TMailRule rule) {
|
void openEditRuleMenuAction(BuildContext context, TMailRule rule) {
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ import 'package:tmail_ui_user/features/login/domain/usecases/get_stored_token_oi
|
|||||||
import 'package:tmail_ui_user/features/manage_account/data/datasource/manage_account_datasource.dart';
|
import 'package:tmail_ui_user/features/manage_account/data/datasource/manage_account_datasource.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/data/datasource_impl/manage_account_datasource_impl.dart';
|
import 'package:tmail_ui_user/features/manage_account/data/datasource_impl/manage_account_datasource_impl.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/data/local/language_cache_manager.dart';
|
import 'package:tmail_ui_user/features/manage_account/data/local/language_cache_manager.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/data/network/manage_account_api.dart';
|
|
||||||
import 'package:tmail_ui_user/features/manage_account/data/repository/manage_account_repository_impl.dart';
|
import 'package:tmail_ui_user/features/manage_account/data/repository/manage_account_repository_impl.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/domain/repository/manage_account_repository.dart';
|
import 'package:tmail_ui_user/features/manage_account/domain/repository/manage_account_repository.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/domain/usecases/log_out_oidc_interactor.dart';
|
import 'package:tmail_ui_user/features/manage_account/domain/usecases/log_out_oidc_interactor.dart';
|
||||||
@@ -73,7 +72,6 @@ class ManageAccountDashBoardBindings extends BaseBindings {
|
|||||||
Get.find<RemoteExceptionThrower>()
|
Get.find<RemoteExceptionThrower>()
|
||||||
));
|
));
|
||||||
Get.lazyPut(() => ManageAccountDataSourceImpl(
|
Get.lazyPut(() => ManageAccountDataSourceImpl(
|
||||||
Get.find<ManageAccountAPI>(),
|
|
||||||
Get.find<LanguageCacheManager>(),
|
Get.find<LanguageCacheManager>(),
|
||||||
Get.find<RemoteExceptionThrower>()));
|
Get.find<RemoteExceptionThrower>()));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ import 'package:tmail_ui_user/features/manage_account/domain/usecases/get_all_va
|
|||||||
import 'package:tmail_ui_user/features/manage_account/domain/usecases/log_out_oidc_interactor.dart';
|
import 'package:tmail_ui_user/features/manage_account/domain/usecases/log_out_oidc_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/domain/usecases/update_vacation_interactor.dart';
|
import 'package:tmail_ui_user/features/manage_account/domain/usecases/update_vacation_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/action/dashboard_setting_action.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/action/dashboard_setting_action.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/email_rules/email_rules_bindings.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/email_rules/bindings/email_rules_bindings.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/vacation_response_extension.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/vacation_response_extension.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/forward/bindings/forward_bindings.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/forward/bindings/forward_bindings.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/model/account_menu_item.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/model/account_menu_item.dart';
|
||||||
@@ -95,6 +95,7 @@ class ManageAccountDashBoardController extends ReloadableController {
|
|||||||
_getUserProfile();
|
_getUserProfile();
|
||||||
injectAutoCompleteBindings(sessionCurrent.value, accountId.value);
|
injectAutoCompleteBindings(sessionCurrent.value, accountId.value);
|
||||||
injectForwardBindings(sessionCurrent.value, accountId.value);
|
injectForwardBindings(sessionCurrent.value, accountId.value);
|
||||||
|
injectRuleFilterBindings(sessionCurrent.value, accountId.value);
|
||||||
injectVacationBindings(sessionCurrent.value, accountId.value);
|
injectVacationBindings(sessionCurrent.value, accountId.value);
|
||||||
_getVacationResponse();
|
_getVacationResponse();
|
||||||
}
|
}
|
||||||
@@ -108,6 +109,7 @@ class ManageAccountDashBoardController extends ReloadableController {
|
|||||||
_getUserProfile();
|
_getUserProfile();
|
||||||
injectAutoCompleteBindings(sessionCurrent.value, accountId.value);
|
injectAutoCompleteBindings(sessionCurrent.value, accountId.value);
|
||||||
injectForwardBindings(sessionCurrent.value, accountId.value);
|
injectForwardBindings(sessionCurrent.value, accountId.value);
|
||||||
|
injectRuleFilterBindings(sessionCurrent.value, accountId.value);
|
||||||
injectVacationBindings(sessionCurrent.value, accountId.value);
|
injectVacationBindings(sessionCurrent.value, accountId.value);
|
||||||
_getVacationResponse();
|
_getVacationResponse();
|
||||||
if (arguments.menuSettingCurrent != null) {
|
if (arguments.menuSettingCurrent != null) {
|
||||||
|
|||||||
+7
-4
@@ -1,21 +1,24 @@
|
|||||||
|
|
||||||
import 'package:equatable/equatable.dart';
|
import 'package:equatable/equatable.dart';
|
||||||
import 'package:jmap_dart_client/jmap/account_id.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/mail/email/email_address.dart';
|
||||||
import 'package:rule_filter/rule_filter/tmail_rule.dart';
|
import 'package:rule_filter/rule_filter/tmail_rule.dart';
|
||||||
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/model/creator_action_type.dart';
|
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/model/creator_action_type.dart';
|
||||||
|
|
||||||
class RulesFilterCreatorArguments with EquatableMixin {
|
class RulesFilterCreatorArguments with EquatableMixin {
|
||||||
final AccountId accountId;
|
final AccountId accountId;
|
||||||
|
final Session session;
|
||||||
final CreatorActionType actionType;
|
final CreatorActionType actionType;
|
||||||
final TMailRule? tMailRule;
|
final TMailRule? tMailRule;
|
||||||
final List<TMailRule>? listEmailRule;
|
final EmailAddress? emailAddress;
|
||||||
|
|
||||||
RulesFilterCreatorArguments(this.accountId, {
|
RulesFilterCreatorArguments(this.accountId, this.session, {
|
||||||
this.actionType = CreatorActionType.create,
|
this.actionType = CreatorActionType.create,
|
||||||
this.tMailRule,
|
this.tMailRule,
|
||||||
this.listEmailRule
|
this.emailAddress
|
||||||
});
|
});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
List<Object?> get props => [accountId, actionType, tMailRule];
|
List<Object?> get props => [accountId, actionType, session, tMailRule, emailAddress];
|
||||||
}
|
}
|
||||||
+40
-2
@@ -3,12 +3,16 @@ import 'package:core/presentation/extensions/color_extension.dart';
|
|||||||
import 'package:core/presentation/state/failure.dart';
|
import 'package:core/presentation/state/failure.dart';
|
||||||
import 'package:core/presentation/state/success.dart';
|
import 'package:core/presentation/state/success.dart';
|
||||||
import 'package:core/presentation/utils/app_toast.dart';
|
import 'package:core/presentation/utils/app_toast.dart';
|
||||||
|
import 'package:core/utils/app_logger.dart';
|
||||||
import 'package:core/utils/build_utils.dart';
|
import 'package:core/utils/build_utils.dart';
|
||||||
import 'package:dartz/dartz.dart';
|
import 'package:dartz/dartz.dart';
|
||||||
import 'package:flutter/cupertino.dart';
|
import 'package:flutter/cupertino.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:jmap_dart_client/jmap/account_id.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/mail/email/email_address.dart';
|
||||||
import 'package:model/mailbox/presentation_mailbox.dart';
|
import 'package:model/mailbox/presentation_mailbox.dart';
|
||||||
|
import 'package:model/model.dart';
|
||||||
import 'package:rule_filter/rule_filter/rule_action.dart';
|
import 'package:rule_filter/rule_filter/rule_action.dart';
|
||||||
import 'package:rule_filter/rule_filter/rule_append_in.dart';
|
import 'package:rule_filter/rule_filter/rule_append_in.dart';
|
||||||
import 'package:rule_filter/rule_filter/rule_condition.dart' as rule_condition;
|
import 'package:rule_filter/rule_filter/rule_condition.dart' as rule_condition;
|
||||||
@@ -25,6 +29,8 @@ import 'package:tmail_ui_user/features/mailbox_creator/presentation/extensions/v
|
|||||||
import 'package:tmail_ui_user/features/manage_account/data/extensions/list_tmail_rule_extensions.dart';
|
import 'package:tmail_ui_user/features/manage_account/data/extensions/list_tmail_rule_extensions.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/domain/model/create_new_email_rule_filter_request.dart';
|
import 'package:tmail_ui_user/features/manage_account/domain/model/create_new_email_rule_filter_request.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/domain/model/edit_email_rule_filter_request.dart';
|
import 'package:tmail_ui_user/features/manage_account/domain/model/edit_email_rule_filter_request.dart';
|
||||||
|
import 'package:tmail_ui_user/features/manage_account/domain/state/get_all_rules_state.dart';
|
||||||
|
import 'package:tmail_ui_user/features/manage_account/domain/usecases/get_all_rules_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/model/creator_action_type.dart';
|
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/model/creator_action_type.dart';
|
||||||
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/model/email_rule_filter_action.dart';
|
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/model/email_rule_filter_action.dart';
|
||||||
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/model/rules_filter_creator_arguments.dart';
|
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/model/rules_filter_creator_arguments.dart';
|
||||||
@@ -41,6 +47,8 @@ class RulesFilterCreatorController extends BaseMailboxController {
|
|||||||
final VerifyNameInteractor _verifyNameInteractor;
|
final VerifyNameInteractor _verifyNameInteractor;
|
||||||
final GetAllMailboxInteractor _getAllMailboxInteractor;
|
final GetAllMailboxInteractor _getAllMailboxInteractor;
|
||||||
|
|
||||||
|
GetAllRulesInteractor? _getAllRulesInteractor;
|
||||||
|
|
||||||
final errorRuleName = Rxn<String>();
|
final errorRuleName = Rxn<String>();
|
||||||
final errorRuleConditionValue = Rxn<String>();
|
final errorRuleConditionValue = Rxn<String>();
|
||||||
final errorRuleActionValue = Rxn<String>();
|
final errorRuleActionValue = Rxn<String>();
|
||||||
@@ -62,7 +70,9 @@ class RulesFilterCreatorController extends BaseMailboxController {
|
|||||||
OnCreatedRuleFilterCallback? onCreatedRuleFilterCallback;
|
OnCreatedRuleFilterCallback? onCreatedRuleFilterCallback;
|
||||||
VoidCallback? onDismissRuleFilterCreator;
|
VoidCallback? onDismissRuleFilterCreator;
|
||||||
AccountId? _accountId;
|
AccountId? _accountId;
|
||||||
|
Session? _session;
|
||||||
TMailRule? _currentTMailRule;
|
TMailRule? _currentTMailRule;
|
||||||
|
EmailAddress? _emailAddress;
|
||||||
List<TMailRule>? _listEmailRule;
|
List<TMailRule>? _listEmailRule;
|
||||||
|
|
||||||
RulesFilterCreatorController(
|
RulesFilterCreatorController(
|
||||||
@@ -78,6 +88,7 @@ class RulesFilterCreatorController extends BaseMailboxController {
|
|||||||
inputConditionValueController = TextEditingController();
|
inputConditionValueController = TextEditingController();
|
||||||
inputRuleNameFocusNode = FocusNode();
|
inputRuleNameFocusNode = FocusNode();
|
||||||
inputRuleConditionFocusNode = FocusNode();
|
inputRuleConditionFocusNode = FocusNode();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -85,10 +96,18 @@ class RulesFilterCreatorController extends BaseMailboxController {
|
|||||||
super.onReady();
|
super.onReady();
|
||||||
if (arguments != null) {
|
if (arguments != null) {
|
||||||
_accountId = arguments!.accountId;
|
_accountId = arguments!.accountId;
|
||||||
|
_session = arguments!.session;
|
||||||
_currentTMailRule = arguments!.tMailRule;
|
_currentTMailRule = arguments!.tMailRule;
|
||||||
_listEmailRule = arguments!.listEmailRule;
|
_emailAddress = arguments!.emailAddress;
|
||||||
actionType.value = arguments!.actionType;
|
actionType.value = arguments!.actionType;
|
||||||
|
injectRuleFilterBindings(_session, _accountId);
|
||||||
|
try {
|
||||||
|
_getAllRulesInteractor = Get.find<GetAllRulesInteractor>();
|
||||||
|
} catch (e) {
|
||||||
|
logError('RulesFilterCreatorController::onInit(): ${e.toString()}');
|
||||||
|
}
|
||||||
_setUpDefaultValueRuleFilter();
|
_setUpDefaultValueRuleFilter();
|
||||||
|
_getAllRules();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -99,7 +118,16 @@ class RulesFilterCreatorController extends BaseMailboxController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void onDone() {}
|
void onDone() {
|
||||||
|
viewState.value.fold((failure) {}, (success) {
|
||||||
|
if (success is GetAllRulesSuccess) {
|
||||||
|
log('RulesFilterCreatorController::onDone():GetAllRulesSuccess: ${success.rules}');
|
||||||
|
if (success.rules?.isNotEmpty == true) {
|
||||||
|
_listEmailRule = success.rules!;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void onData(Either<Failure, Success> newState) {
|
void onData(Either<Failure, Success> newState) {
|
||||||
@@ -114,12 +142,22 @@ class RulesFilterCreatorController extends BaseMailboxController {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void _getAllRules() {
|
||||||
|
if (_accountId != null && _getAllRulesInteractor != null) {
|
||||||
|
consumeState(_getAllRulesInteractor!.execute(_accountId!));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void _setUpDefaultValueRuleFilter() {
|
void _setUpDefaultValueRuleFilter() {
|
||||||
switch(actionType.value) {
|
switch(actionType.value) {
|
||||||
case CreatorActionType.create:
|
case CreatorActionType.create:
|
||||||
ruleConditionFieldSelected.value = rule_condition.Field.from;
|
ruleConditionFieldSelected.value = rule_condition.Field.from;
|
||||||
ruleConditionComparatorSelected.value = rule_condition.Comparator.contains;
|
ruleConditionComparatorSelected.value = rule_condition.Comparator.contains;
|
||||||
emailRuleFilterActionSelected.value = EmailRuleFilterAction.moveMessage;
|
emailRuleFilterActionSelected.value = EmailRuleFilterAction.moveMessage;
|
||||||
|
if (_emailAddress != null) {
|
||||||
|
_newRuleConditionValue = _emailAddress?.email;
|
||||||
|
_setValueInputField(inputConditionValueController, _newRuleConditionValue ?? '');
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case CreatorActionType.edit:
|
case CreatorActionType.edit:
|
||||||
if (_currentTMailRule != null) {
|
if (_currentTMailRule != null) {
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import 'package:flutter/material.dart';
|
|||||||
import 'package:flutter_svg/flutter_svg.dart';
|
import 'package:flutter_svg/flutter_svg.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:model/model.dart';
|
import 'package:model/model.dart';
|
||||||
|
import 'package:pointer_interceptor/pointer_interceptor.dart';
|
||||||
import 'package:rule_filter/rule_filter/rule_condition.dart' as rule_condition;
|
import 'package:rule_filter/rule_filter/rule_condition.dart' as rule_condition;
|
||||||
import 'package:tmail_ui_user/features/base/widget/drop_down_button_widget.dart';
|
import 'package:tmail_ui_user/features/base/widget/drop_down_button_widget.dart';
|
||||||
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/extensions/rule_condition_extensions.dart';
|
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/extensions/rule_condition_extensions.dart';
|
||||||
@@ -42,79 +43,81 @@ class RuleFilterCreatorView extends GetWidget<RulesFilterCreatorController> {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return ResponsiveWidget(
|
return PointerInterceptor(
|
||||||
responsiveUtils: _responsiveUtils,
|
child: ResponsiveWidget(
|
||||||
mobile: Scaffold(
|
responsiveUtils: _responsiveUtils,
|
||||||
backgroundColor: BuildUtils.isWeb
|
mobile: Scaffold(
|
||||||
? Colors.black.withAlpha(24)
|
backgroundColor: BuildUtils.isWeb
|
||||||
: Colors.black38,
|
? Colors.black.withAlpha(24)
|
||||||
body: GestureDetector(
|
: Colors.black38,
|
||||||
onTap: () => FocusScope.of(context).unfocus(),
|
body: GestureDetector(
|
||||||
child: SafeArea(
|
onTap: () => FocusScope.of(context).unfocus(),
|
||||||
bottom: false,
|
child: SafeArea(
|
||||||
left: false,
|
bottom: false,
|
||||||
right: false,
|
left: false,
|
||||||
child: Container(
|
right: false,
|
||||||
decoration: const BoxDecoration(
|
child: Container(
|
||||||
borderRadius: BorderRadius.only(
|
decoration: const BoxDecoration(
|
||||||
topLeft: Radius.circular(16),
|
|
||||||
topRight: Radius.circular(16)),
|
|
||||||
color: Colors.white),
|
|
||||||
margin: const EdgeInsets.only(top: BuildUtils.isWeb ? 70 : 0),
|
|
||||||
child: ClipRRect(
|
|
||||||
borderRadius: const BorderRadius.only(
|
|
||||||
topLeft: Radius.circular(16),
|
|
||||||
topRight: Radius.circular(16)),
|
|
||||||
child: SafeArea(child: _buildRulesFilterFormOnMobile(context))
|
|
||||||
)
|
|
||||||
),
|
|
||||||
),
|
|
||||||
)
|
|
||||||
),
|
|
||||||
tablet: Scaffold(
|
|
||||||
backgroundColor: Colors.black.withAlpha(24),
|
|
||||||
body: GestureDetector(
|
|
||||||
onTap: () => FocusScope.of(context).unfocus(),
|
|
||||||
child: Align(alignment: Alignment.bottomCenter, child: Container(
|
|
||||||
decoration: const BoxDecoration(
|
|
||||||
color: Colors.white,
|
|
||||||
borderRadius: BorderRadius.only(
|
borderRadius: BorderRadius.only(
|
||||||
topLeft: Radius.circular(16),
|
|
||||||
topRight: Radius.circular(16),
|
|
||||||
)),
|
|
||||||
width: double.infinity,
|
|
||||||
height: _responsiveUtils.getSizeScreenHeight(context) * 0.7,
|
|
||||||
child: ClipRRect(
|
|
||||||
borderRadius: const BorderRadius.only(
|
|
||||||
topLeft: Radius.circular(16),
|
topLeft: Radius.circular(16),
|
||||||
topRight: Radius.circular(16)),
|
topRight: Radius.circular(16)),
|
||||||
child: _buildRulesFilterFormOnTablet(context)
|
color: Colors.white),
|
||||||
)
|
margin: const EdgeInsets.only(top: BuildUtils.isWeb ? 70 : 0),
|
||||||
)),
|
child: ClipRRect(
|
||||||
)
|
borderRadius: const BorderRadius.only(
|
||||||
),
|
topLeft: Radius.circular(16),
|
||||||
desktop: Scaffold(
|
topRight: Radius.circular(16)),
|
||||||
backgroundColor: Colors.black.withAlpha(24),
|
child: SafeArea(child: _buildRulesFilterFormOnMobile(context))
|
||||||
body: GestureDetector(
|
)
|
||||||
onTap: () => FocusScope.of(context).unfocus(),
|
),
|
||||||
child: Center(child: Card(
|
),
|
||||||
color: Colors.transparent,
|
)
|
||||||
shape: const RoundedRectangleBorder(
|
),
|
||||||
borderRadius: BorderRadius.all(Radius.circular(16))),
|
tablet: Scaffold(
|
||||||
child: Container(
|
backgroundColor: Colors.black.withAlpha(24),
|
||||||
decoration: const BoxDecoration(
|
body: GestureDetector(
|
||||||
color: Colors.white,
|
onTap: () => FocusScope.of(context).unfocus(),
|
||||||
borderRadius: BorderRadius.all(Radius.circular(16))),
|
child: Align(alignment: Alignment.bottomCenter, child: Container(
|
||||||
width: _responsiveUtils.getSizeScreenWidth(context) * 0.6,
|
decoration: const BoxDecoration(
|
||||||
height: _responsiveUtils.getSizeScreenHeight(context) * 0.7,
|
color: Colors.white,
|
||||||
child: ClipRRect(
|
borderRadius: BorderRadius.only(
|
||||||
borderRadius: const BorderRadius.all(Radius.circular(16)),
|
topLeft: Radius.circular(16),
|
||||||
child: _buildRulesFilterFormOnDesktop(context)
|
topRight: Radius.circular(16),
|
||||||
)
|
)),
|
||||||
)
|
width: double.infinity,
|
||||||
)),
|
height: _responsiveUtils.getSizeScreenHeight(context) * 0.7,
|
||||||
)
|
child: ClipRRect(
|
||||||
)
|
borderRadius: const BorderRadius.only(
|
||||||
|
topLeft: Radius.circular(16),
|
||||||
|
topRight: Radius.circular(16)),
|
||||||
|
child: _buildRulesFilterFormOnTablet(context)
|
||||||
|
)
|
||||||
|
)),
|
||||||
|
)
|
||||||
|
),
|
||||||
|
desktop: Scaffold(
|
||||||
|
backgroundColor: Colors.black.withAlpha(24),
|
||||||
|
body: GestureDetector(
|
||||||
|
onTap: () => FocusScope.of(context).unfocus(),
|
||||||
|
child: Center(child: Card(
|
||||||
|
color: Colors.transparent,
|
||||||
|
shape: const RoundedRectangleBorder(
|
||||||
|
borderRadius: BorderRadius.all(Radius.circular(16))),
|
||||||
|
child: Container(
|
||||||
|
decoration: const BoxDecoration(
|
||||||
|
color: Colors.white,
|
||||||
|
borderRadius: BorderRadius.all(Radius.circular(16))),
|
||||||
|
width: _responsiveUtils.getSizeScreenWidth(context) * 0.6,
|
||||||
|
height: _responsiveUtils.getSizeScreenHeight(context) * 0.7,
|
||||||
|
child: ClipRRect(
|
||||||
|
borderRadius: const BorderRadius.all(Radius.circular(16)),
|
||||||
|
child: _buildRulesFilterFormOnDesktop(context)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"@@last_modified": "2022-11-10T15:16:34.946211",
|
"@@last_modified": "2022-11-11T04:08:42.994169",
|
||||||
"initializing_data": "Initializing data...",
|
"initializing_data": "Initializing data...",
|
||||||
"@initializing_data": {
|
"@initializing_data": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
@@ -2497,5 +2497,11 @@
|
|||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders_order": [],
|
"placeholders_order": [],
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
|
},
|
||||||
|
"quickCreatingRule": "Create a rule with this email",
|
||||||
|
"@quickCreatingRule": {
|
||||||
|
"type": "text",
|
||||||
|
"placeholders_order": [],
|
||||||
|
"placeholders": {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -19,7 +19,7 @@ import 'package:tmail_ui_user/features/login/data/utils/library_platform/app_aut
|
|||||||
import 'package:tmail_ui_user/features/mailbox/data/network/mailbox_api.dart';
|
import 'package:tmail_ui_user/features/mailbox/data/network/mailbox_api.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/data/network/forwarding_api.dart';
|
import 'package:tmail_ui_user/features/manage_account/data/network/forwarding_api.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/data/network/identity_api.dart';
|
import 'package:tmail_ui_user/features/manage_account/data/network/identity_api.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/data/network/manage_account_api.dart';
|
import 'package:tmail_ui_user/features/manage_account/data/network/rule_filter_api.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/data/network/vacation_api.dart';
|
import 'package:tmail_ui_user/features/manage_account/data/network/vacation_api.dart';
|
||||||
import 'package:tmail_ui_user/features/quotas/data/network/quotas_api.dart';
|
import 'package:tmail_ui_user/features/quotas/data/network/quotas_api.dart';
|
||||||
import 'package:tmail_ui_user/features/session/data/network/session_api.dart';
|
import 'package:tmail_ui_user/features/session/data/network/session_api.dart';
|
||||||
@@ -81,7 +81,7 @@ class NetworkBindings extends Bindings {
|
|||||||
Get.find<JmapHttpClient.HttpClient>(),
|
Get.find<JmapHttpClient.HttpClient>(),
|
||||||
Get.find<DownloadManager>(),
|
Get.find<DownloadManager>(),
|
||||||
Get.find<DioClient>()));
|
Get.find<DioClient>()));
|
||||||
Get.put(ManageAccountAPI(Get.find<JmapHttpClient.HttpClient>()));
|
Get.put(RuleFilterAPI(Get.find<JmapHttpClient.HttpClient>()));
|
||||||
Get.put(VacationAPI(Get.find<JmapHttpClient.HttpClient>()));
|
Get.put(VacationAPI(Get.find<JmapHttpClient.HttpClient>()));
|
||||||
Get.put(ContactAPI(Get.find<JmapHttpClient.HttpClient>()));
|
Get.put(ContactAPI(Get.find<JmapHttpClient.HttpClient>()));
|
||||||
Get.put(IdentityAPI(Get.find<JmapHttpClient.HttpClient>()));
|
Get.put(IdentityAPI(Get.find<JmapHttpClient.HttpClient>()));
|
||||||
|
|||||||
@@ -2563,4 +2563,10 @@ class AppLocalizations {
|
|||||||
name: 'textQuotasRunOutOfStorageContent',
|
name: 'textQuotasRunOutOfStorageContent',
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String get quickCreatingRule {
|
||||||
|
return Intl.message(
|
||||||
|
'Create a rule with this email',
|
||||||
|
name: 'quickCreatingRule');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user