TF-1074 Handle go to path /rules_filter_creator

This commit is contained in:
dab246
2022-10-25 10:47:23 +07:00
committed by Dat H. Pham
parent 950a0363bf
commit 5925bf0077
12 changed files with 200 additions and 125 deletions
@@ -1,5 +1,4 @@
import 'package:core/utils/app_logger.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:jmap_dart_client/jmap/mail/email/email_address.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';
@@ -16,6 +15,9 @@ import 'package:tmail_ui_user/features/mailbox_creator/presentation/mailbox_crea
import 'package:tmail_ui_user/features/mailbox_creator/presentation/mailbox_creator_view.dart'; import 'package:tmail_ui_user/features/mailbox_creator/presentation/mailbox_creator_view.dart';
import 'package:tmail_ui_user/features/mailbox_creator/presentation/model/mailbox_creator_arguments.dart'; import 'package:tmail_ui_user/features/mailbox_creator/presentation/model/mailbox_creator_arguments.dart';
import 'package:tmail_ui_user/features/mailbox_creator/presentation/model/new_mailbox_arguments.dart'; import 'package:tmail_ui_user/features/mailbox_creator/presentation/model/new_mailbox_arguments.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/rules_filter_creator_bindings.dart';
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/rules_filter_creator_view.dart';
import 'package:tmail_ui_user/main/routes/route_navigation.dart'; import 'package:tmail_ui_user/main/routes/route_navigation.dart';
mixin ViewAsDialogActionMixin { mixin ViewAsDialogActionMixin {
@@ -113,7 +115,6 @@ mixin ViewAsDialogActionMixin {
required IdentityCreatorArguments arguments, required IdentityCreatorArguments arguments,
required Function(dynamic) onCreatedIdentity required Function(dynamic) onCreatedIdentity
}) { }) {
log('ViewAsDialogActionMixin::showDialogIdentityCreator(): ');
IdentityCreatorBindings().dependencies(); IdentityCreatorBindings().dependencies();
showGeneralDialog( showGeneralDialog(
@@ -136,4 +137,32 @@ mixin ViewAsDialogActionMixin {
}); });
}); });
} }
void showDialogRuleFilterCreator({
required BuildContext context,
required RulesFilterCreatorArguments arguments,
required Function(dynamic) onCreatedRuleFilter
}) {
RulesFilterCreatorBindings().dependencies();
showGeneralDialog(
context: context,
barrierDismissible: true,
barrierLabel: '',
barrierColor: Colors.black.withAlpha(24),
pageBuilder: (context, animation, secondaryAnimation) {
return RuleFilterCreatorView.fromArguments(
arguments,
onDismissCallback: () {
RulesFilterCreatorBindings().dispose();
popBack();
},
onCreatedRuleFilterCallback: (args) {
RulesFilterCreatorBindings().dispose();
popBack();
onCreatedRuleFilter.call(args);
});
});
}
} }
@@ -4,8 +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:flutter/foundation.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';
import 'package:get/get.dart'; import 'package:get/get.dart';
@@ -28,7 +27,6 @@ import 'package:tmail_ui_user/features/manage_account/presentation/email_rules/w
import 'package:tmail_ui_user/features/manage_account/presentation/manage_account_dashboard_controller.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/manage_account_dashboard_controller.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/rules_filter_creator_arguments.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/rules_filter_creator_bindings.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
import 'package:tmail_ui_user/main/routes/route_navigation.dart'; import 'package:tmail_ui_user/main/routes/route_navigation.dart';
import 'package:tmail_ui_user/main/routes/app_routes.dart'; import 'package:tmail_ui_user/main/routes/app_routes.dart';
@@ -47,8 +45,6 @@ class EmailRulesController extends BaseController {
final listEmailRule = <TMailRule>[].obs; final listEmailRule = <TMailRule>[].obs;
final rulesFilterCreatorArguments = Rxn<RulesFilterCreatorArguments>();
EmailRulesController( EmailRulesController(
this._getAllRulesInteractor, this._getAllRulesInteractor,
this._deleteEmailRuleInteractor, this._deleteEmailRuleInteractor,
@@ -82,21 +78,35 @@ class EmailRulesController extends BaseController {
super.onInit(); super.onInit();
} }
void goToCreateNewRule() async { void goToCreateNewRule(BuildContext context) async {
final accountId = _accountDashBoardController.accountId.value; final accountId = _accountDashBoardController.accountId.value;
if (accountId != null) { if (accountId != null) {
rulesFilterCreatorArguments.value = RulesFilterCreatorArguments(accountId); final arguments = RulesFilterCreatorArguments(
if(kIsWeb) { accountId,
_openRulesFilterCreatorOverlay(); listEmailRule: listEmailRule);
if (BuildUtils.isWeb) {
showDialogRuleFilterCreator(
context: context,
arguments: arguments,
onCreatedRuleFilter: (arguments) {
if (arguments is CreateNewEmailRuleFilterRequest) {
_createNewRuleFilterAction(accountId, arguments);
}
});
} else { } else {
push( final newRuleFilterRequest = await push(
AppRoutes.rulesFilterCreator, AppRoutes.rulesFilterCreator,
); arguments: arguments);
if (newRuleFilterRequest is CreateNewEmailRuleFilterRequest) {
_createNewRuleFilterAction(accountId, newRuleFilterRequest);
}
} }
} }
} }
void createNewRuleFilterAction( void _createNewRuleFilterAction(
AccountId accountId, AccountId accountId,
CreateNewEmailRuleFilterRequest ruleFilterRequest CreateNewEmailRuleFilterRequest ruleFilterRequest
) async { ) async {
@@ -113,31 +123,42 @@ class EmailRulesController extends BaseController {
message: AppLocalizations.of(currentContext!).newFilterWasCreated, message: AppLocalizations.of(currentContext!).newFilterWasCreated,
icon: _imagePaths.icSelected); icon: _imagePaths.icSelected);
} }
log('EmailRulesController::_createNewRuleFilterSuccess(): ${success.newListRules}');
listEmailRule.value = success.newListRules; listEmailRule.value = success.newListRules;
listEmailRule.refresh(); listEmailRule.refresh();
} }
} }
void editEmailRule(TMailRule rule) async { void editEmailRule(BuildContext context, TMailRule rule) async {
final accountId = _accountDashBoardController.accountId.value; final accountId = _accountDashBoardController.accountId.value;
if (accountId != null) { if (accountId != null) {
rulesFilterCreatorArguments.value = RulesFilterCreatorArguments( final arguments = RulesFilterCreatorArguments(
accountId, accountId,
actionType: CreatorActionType.edit, actionType: CreatorActionType.edit,
tMailRule: rule, tMailRule: rule,
); listEmailRule: listEmailRule);
if(kIsWeb) {
_openRulesFilterCreatorOverlay(); if (BuildUtils.isWeb) {
showDialogRuleFilterCreator(
context: context,
arguments: arguments,
onCreatedRuleFilter: (arguments) {
if (arguments is EditEmailRuleFilterRequest) {
_editEmailRuleFilterAction(accountId, arguments);
}
});
} else { } else {
push( final newRuleFilterRequest = await push(
AppRoutes.rulesFilterCreator, AppRoutes.rulesFilterCreator,
); arguments: arguments);
if (newRuleFilterRequest is EditEmailRuleFilterRequest) {
_editEmailRuleFilterAction(accountId, newRuleFilterRequest);
}
} }
} }
} }
void editEmailRuleFilterAction( void _editEmailRuleFilterAction(
AccountId accountId, AccountId accountId,
EditEmailRuleFilterRequest ruleFilterRequest EditEmailRuleFilterRequest ruleFilterRequest
) { ) {
@@ -152,7 +173,6 @@ class EmailRulesController extends BaseController {
message: AppLocalizations.of(currentContext!).yourFilterHasBeenUpdated, message: AppLocalizations.of(currentContext!).yourFilterHasBeenUpdated,
icon: _imagePaths.icSelected); icon: _imagePaths.icSelected);
} }
log('EmailRulesController::_editEmailRuleFilterSuccess(): ${success.listRulesUpdated}');
listEmailRule.value = success.listRulesUpdated; listEmailRule.value = success.listRulesUpdated;
listEmailRule.refresh(); listEmailRule.refresh();
} }
@@ -225,11 +245,6 @@ class EmailRulesController extends BaseController {
consumeState(_getAllRulesInteractor.execute(_accountDashBoardController.accountId.value!)); consumeState(_getAllRulesInteractor.execute(_accountDashBoardController.accountId.value!));
} }
void _openRulesFilterCreatorOverlay() {
RulesFilterCreatorBindings().dependencies();
_accountDashBoardController.rulesFilterCreatorIsActive.toggle();
}
void openEditRuleMenuAction(BuildContext context, TMailRule rule) { void openEditRuleMenuAction(BuildContext context, TMailRule rule) {
openContextMenuAction( openContextMenuAction(
context, context,
@@ -267,7 +282,7 @@ class EmailRulesController extends BaseController {
iconRightPadding: const EdgeInsets.only(right: 12)) iconRightPadding: const EdgeInsets.only(right: 12))
..onActionClick((rule) { ..onActionClick((rule) {
popBack(); popBack();
editEmailRule(rule); editEmailRule(context, rule);
})) }))
.build(); .build();
} }
@@ -30,7 +30,7 @@ class EmailRulesView extends GetWidget<EmailRulesController> with AppLoaderMixin
EmailRulesHeaderWidget( EmailRulesHeaderWidget(
imagePaths: _imagePaths, imagePaths: _imagePaths,
responsiveUtils: _responsiveUtils, responsiveUtils: _responsiveUtils,
createRule: () => controller.goToCreateNewRule(), createRule: () => controller.goToCreateNewRule(context),
), ),
SizedBox(height: _responsiveUtils.isWebDesktop(context) ? 24 : 16), SizedBox(height: _responsiveUtils.isWebDesktop(context) ? 24 : 16),
_buildLoadingView(), _buildLoadingView(),
@@ -41,7 +41,7 @@ class EmailRulesItemWidget extends StatelessWidget {
fit: BoxFit.fill, fit: BoxFit.fill,
), ),
onTap: () { onTap: () {
_emailRuleController.editEmailRule(rule); _emailRuleController.editEmailRule(context, rule);
}), }),
if (!_responsiveUtils.isMobile(context)) if (!_responsiveUtils.isMobile(context))
buildIconWeb( buildIconWeb(
@@ -53,7 +53,6 @@ class ManageAccountDashBoardController extends ReloadableController {
final vacationResponse = Rxn<VacationResponse>(); final vacationResponse = Rxn<VacationResponse>();
final emailsForwardCreatorIsActive = false.obs; final emailsForwardCreatorIsActive = false.obs;
final rulesFilterCreatorIsActive = false.obs;
ManageAccountDashBoardController( ManageAccountDashBoardController(
LogoutOidcInteractor logoutOidcInteractor, LogoutOidcInteractor logoutOidcInteractor,
@@ -15,7 +15,6 @@ import 'package:tmail_ui_user/features/manage_account/presentation/menu/settings
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';
import 'package:tmail_ui_user/features/manage_account/presentation/profiles/profiles_view.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/profiles/profiles_view.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/vacation/vacation_view.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/vacation/vacation_view.dart';
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/rules_filter_creator_view.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
import 'package:tmail_ui_user/main/routes/route_navigation.dart'; import 'package:tmail_ui_user/main/routes/route_navigation.dart';
@@ -128,8 +127,6 @@ class ManageAccountDashBoardView extends GetWidget<ManageAccountDashBoardControl
), ),
if(controller.emailsForwardCreatorIsActive.isTrue) if(controller.emailsForwardCreatorIsActive.isTrue)
EmailsForwardCreatorView(), EmailsForwardCreatorView(),
if(controller.rulesFilterCreatorIsActive.isTrue)
RuleFilterCreatorView(),
] ]
)); ));
} }
@@ -8,10 +8,12 @@ class RulesFilterCreatorArguments with EquatableMixin {
final AccountId accountId; final AccountId accountId;
final CreatorActionType actionType; final CreatorActionType actionType;
final TMailRule? tMailRule; final TMailRule? tMailRule;
final List<TMailRule>? listEmailRule;
RulesFilterCreatorArguments(this.accountId, { RulesFilterCreatorArguments(this.accountId, {
this.actionType = CreatorActionType.create, this.actionType = CreatorActionType.create,
this.tMailRule this.tMailRule,
this.listEmailRule
}); });
@override @override
@@ -72,4 +72,8 @@ class RulesFilterCreatorBindings extends BaseBindings {
Get.find<StateDataSource>(), Get.find<StateDataSource>(),
)); ));
} }
void dispose() {
Get.delete<RulesFilterCreatorController>();
}
} }
@@ -1,10 +1,14 @@
import 'package:core/core.dart'; import 'package:core/presentation/extensions/color_extension.dart';
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:core/presentation/utils/app_toast.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:flutter/foundation.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:model/model.dart'; import 'package:jmap_dart_client/jmap/account_id.dart';
import 'package:model/mailbox/presentation_mailbox.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;
@@ -21,14 +25,15 @@ 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/presentation/email_rules/email_rules_controller.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/manage_account_dashboard_controller.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/main/localizations/app_localizations.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
import 'package:tmail_ui_user/main/routes/app_routes.dart'; import 'package:tmail_ui_user/main/routes/app_routes.dart';
import 'package:tmail_ui_user/main/routes/route_navigation.dart'; import 'package:tmail_ui_user/main/routes/route_navigation.dart';
typedef OnCreatedRuleFilterCallback = Function(dynamic arguments);
class RulesFilterCreatorController extends BaseMailboxController { class RulesFilterCreatorController extends BaseMailboxController {
final _appToast = Get.find<AppToast>(); final _appToast = Get.find<AppToast>();
@@ -43,54 +48,53 @@ class RulesFilterCreatorController extends BaseMailboxController {
final ruleConditionComparatorSelected = Rxn<rule_condition.Comparator>(); final ruleConditionComparatorSelected = Rxn<rule_condition.Comparator>();
final emailRuleFilterActionSelected = Rxn<EmailRuleFilterAction>(); final emailRuleFilterActionSelected = Rxn<EmailRuleFilterAction>();
final mailboxSelected = Rxn<PresentationMailbox>(); final mailboxSelected = Rxn<PresentationMailbox>();
final actionType = CreatorActionType.create.obs;
final inputRuleNameController = TextEditingController(); TextEditingController? inputRuleNameController;
final inputConditionValueController = TextEditingController(); TextEditingController? inputConditionValueController;
final inputRuleNameFocusNode = FocusNode(); FocusNode? inputRuleNameFocusNode;
final inputRuleConditionFocusNode = FocusNode(); FocusNode? inputRuleConditionFocusNode;
final _accountDashBoardController = Get.find<ManageAccountDashBoardController>();
final _emailRulesController = Get.find<EmailRulesController>();
late Worker rulesFilterCreatorIsActiveWorker;
get actionType => _emailRulesController.rulesFilterCreatorArguments.value!.actionType;
get _accountId => _emailRulesController.rulesFilterCreatorArguments.value!.accountId;
get _currentTMailRule => _emailRulesController.rulesFilterCreatorArguments.value!.tMailRule;
String? _newRuleName; String? _newRuleName;
String? _newRuleConditionValue; String? _newRuleConditionValue;
RulesFilterCreatorArguments? arguments;
OnCreatedRuleFilterCallback? onCreatedRuleFilterCallback;
VoidCallback? onDismissRuleFilterCreator;
AccountId? _accountId;
TMailRule? _currentTMailRule;
List<TMailRule>? _listEmailRule;
RulesFilterCreatorController( RulesFilterCreatorController(
this._verifyNameInteractor, this._verifyNameInteractor,
this._getAllMailboxInteractor, this._getAllMailboxInteractor,
treeBuilder treeBuilder
) : super(treeBuilder); ) : super(treeBuilder);
void _initWorker() { @override
rulesFilterCreatorIsActiveWorker = ever(_accountDashBoardController.rulesFilterCreatorIsActive, (rulesFilterCreatorIsActive) { void onInit() {
if (rulesFilterCreatorIsActive == true) { super.onInit();
_setUpDefaultValueRuleFilter(); inputRuleNameController = TextEditingController();
} inputConditionValueController = TextEditingController();
}); inputRuleNameFocusNode = FocusNode();
inputRuleConditionFocusNode = FocusNode();
} }
@override @override
void onReady() { void onReady() {
_initWorker();
_setUpDefaultValueRuleFilter();
super.onReady(); super.onReady();
if (arguments != null) {
_accountId = arguments!.accountId;
_currentTMailRule = arguments!.tMailRule;
_listEmailRule = arguments!.listEmailRule;
actionType.value = arguments!.actionType;
_setUpDefaultValueRuleFilter();
}
} }
@override @override
void onClose() { void onClose() {
inputRuleNameFocusNode.dispose(); _disposeWidget();
inputRuleConditionFocusNode.dispose();
inputRuleNameController.dispose();
inputConditionValueController.dispose();
rulesFilterCreatorIsActiveWorker.dispose();
super.onClose(); super.onClose();
} }
@@ -114,7 +118,7 @@ class RulesFilterCreatorController extends BaseMailboxController {
void onError(error) {} void onError(error) {}
void _setUpDefaultValueRuleFilter() { void _setUpDefaultValueRuleFilter() {
switch(actionType) { 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;
@@ -133,11 +137,11 @@ class RulesFilterCreatorController extends BaseMailboxController {
} }
break; break;
} }
inputRuleNameFocusNode.requestFocus(); inputRuleNameFocusNode?.requestFocus();
} }
void _setValueInputField(TextEditingController controller, String value) { void _setValueInputField(TextEditingController? controller, String value) {
controller.value = controller.value.copyWith( controller?.value = controller.value.copyWith(
text: value, text: value,
selection: TextSelection.collapsed(offset: value.length)); selection: TextSelection.collapsed(offset: value.length));
} }
@@ -227,23 +231,20 @@ class RulesFilterCreatorController extends BaseMailboxController {
final errorName = _getErrorStringByInputValue(context, _newRuleName); final errorName = _getErrorStringByInputValue(context, _newRuleName);
if (errorName?.isNotEmpty == true) { if (errorName?.isNotEmpty == true) {
log('RulesFilterCreatorController::createNewRuleFilter(): errorName: $errorName');
errorRuleName.value = errorName; errorRuleName.value = errorName;
inputRuleNameFocusNode.requestFocus(); inputRuleNameFocusNode?.requestFocus();
return; return;
} }
final errorCondition = _getErrorStringByInputValue(context, _newRuleConditionValue); final errorCondition = _getErrorStringByInputValue(context, _newRuleConditionValue);
if (errorCondition?.isNotEmpty == true) { if (errorCondition?.isNotEmpty == true) {
log('RulesFilterCreatorController::createNewRuleFilter(): errorCondition: $errorCondition');
errorRuleConditionValue.value = errorCondition; errorRuleConditionValue.value = errorCondition;
inputRuleConditionFocusNode.requestFocus(); inputRuleConditionFocusNode?.requestFocus();
return; return;
} }
final errorAction = _getErrorStringByInputValue(context, mailboxSelected.value?.name?.name); final errorAction = _getErrorStringByInputValue(context, mailboxSelected.value?.name?.name);
if (errorAction?.isNotEmpty == true) { if (errorAction?.isNotEmpty == true) {
log('RulesFilterCreatorController::createNewRuleFilter(): errorAction: $errorAction');
errorRuleActionValue.value = errorAction; errorRuleActionValue.value = errorAction;
_appToast.showToastWithIcon( _appToast.showToastWithIcon(
currentOverlayContext!, currentOverlayContext!,
@@ -276,44 +277,54 @@ class RulesFilterCreatorController extends BaseMailboxController {
value: _newRuleConditionValue! value: _newRuleConditionValue!
)); ));
log('RulesFilterCreatorController::newTMailRule(): $newTMailRule'); if (actionType.value == CreatorActionType.create) {
final ruleFilterRequest = CreateNewEmailRuleFilterRequest(
_listEmailRule ?? [],
newTMailRule);
if(actionType == CreatorActionType.create) { if (BuildUtils.isWeb) {
_emailRulesController.createNewRuleFilterAction( _disposeWidget();
_accountId, onCreatedRuleFilterCallback?.call(ruleFilterRequest);
CreateNewEmailRuleFilterRequest( } else {
_emailRulesController.listEmailRule, popBack(result: ruleFilterRequest);
newTMailRule, }
),
);
} else { } else {
_emailRulesController.editEmailRuleFilterAction( final ruleFilterRequest = EditEmailRuleFilterRequest(
_accountId, _listEmailRule?.withIds ?? [],
EditEmailRuleFilterRequest( newTMailRule);
_emailRulesController.listEmailRule.withIds,
newTMailRule,
),
);
}
_clearAll(); if (BuildUtils.isWeb) {
if(kIsWeb) { _disposeWidget();
_accountDashBoardController.rulesFilterCreatorIsActive.toggle(); onCreatedRuleFilterCallback?.call(ruleFilterRequest);
} else { } else {
popBack(); popBack(result: ruleFilterRequest);
}
} }
} }
void _clearAll() { void _clearAll() {
inputRuleNameController.clear(); inputRuleNameController?.clear();
inputConditionValueController.clear(); inputConditionValueController?.clear();
}
void _disposeWidget() {
inputRuleNameFocusNode?.dispose();
inputRuleNameFocusNode = null;
inputRuleConditionFocusNode?.dispose();
inputRuleConditionFocusNode = null;
inputRuleNameController?.dispose();
inputRuleNameController = null;
inputConditionValueController?.dispose();
inputConditionValueController = null;
} }
void closeView(BuildContext context) { void closeView(BuildContext context) {
_clearAll();
FocusScope.of(context).unfocus(); FocusScope.of(context).unfocus();
if(kIsWeb) {
_clearAll(); if (BuildUtils.isWeb) {
_accountDashBoardController.rulesFilterCreatorIsActive.toggle(); _disposeWidget();
onDismissRuleFilterCreator?.call();
} else { } else {
popBack(); popBack();
} }
@@ -7,6 +7,7 @@ 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';
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/rules_filter_creator_controller.dart'; import 'package:tmail_ui_user/features/rules_filter_creator/presentation/rules_filter_creator_controller.dart';
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/widgets/rule_action_bottom_sheet_action_tile_builder.dart'; import 'package:tmail_ui_user/features/rules_filter_creator/presentation/widgets/rule_action_bottom_sheet_action_tile_builder.dart';
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/widgets/rule_condition_comparator_bottom_sheet_action_tile_builder.dart'; import 'package:tmail_ui_user/features/rules_filter_creator/presentation/widgets/rule_condition_comparator_bottom_sheet_action_tile_builder.dart';
@@ -21,14 +22,32 @@ class RuleFilterCreatorView extends GetWidget<RulesFilterCreatorController> {
final _imagePaths = Get.find<ImagePaths>(); final _imagePaths = Get.find<ImagePaths>();
final _responsiveUtils = Get.find<ResponsiveUtils>(); final _responsiveUtils = Get.find<ResponsiveUtils>();
RuleFilterCreatorView({Key? key}) : super(key: key); @override
final controller = Get.find<RulesFilterCreatorController>();
RuleFilterCreatorView({Key? key}) : super(key: key) {
controller.arguments = Get.arguments;
}
RuleFilterCreatorView.fromArguments(
RulesFilterCreatorArguments arguments, {
Key? key,
OnCreatedRuleFilterCallback? onCreatedRuleFilterCallback,
VoidCallback? onDismissCallback
}) : super(key: key) {
controller.arguments = arguments;
controller.onCreatedRuleFilterCallback = onCreatedRuleFilterCallback;
controller.onDismissRuleFilterCreator = onDismissCallback;
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return ResponsiveWidget( return ResponsiveWidget(
responsiveUtils: _responsiveUtils, responsiveUtils: _responsiveUtils,
mobile: Scaffold( mobile: Scaffold(
backgroundColor: Colors.black38, backgroundColor: BuildUtils.isWeb
? Colors.black.withAlpha(24)
: Colors.black38,
body: GestureDetector( body: GestureDetector(
onTap: () => FocusScope.of(context).unfocus(), onTap: () => FocusScope.of(context).unfocus(),
child: SafeArea( child: SafeArea(
@@ -53,7 +72,7 @@ class RuleFilterCreatorView extends GetWidget<RulesFilterCreatorController> {
) )
), ),
tablet: Scaffold( tablet: Scaffold(
backgroundColor: Colors.black38, backgroundColor: Colors.black.withAlpha(24),
body: GestureDetector( body: GestureDetector(
onTap: () => FocusScope.of(context).unfocus(), onTap: () => FocusScope.of(context).unfocus(),
child: Align(alignment: Alignment.bottomCenter, child: Container( child: Align(alignment: Alignment.bottomCenter, child: Container(
@@ -75,7 +94,7 @@ class RuleFilterCreatorView extends GetWidget<RulesFilterCreatorController> {
) )
), ),
desktop: Scaffold( desktop: Scaffold(
backgroundColor: Colors.black38, backgroundColor: Colors.black.withAlpha(24),
body: GestureDetector( body: GestureDetector(
onTap: () => FocusScope.of(context).unfocus(), onTap: () => FocusScope.of(context).unfocus(),
child: Align(alignment: Alignment.center, child: Card( child: Align(alignment: Alignment.center, child: Card(
@@ -107,7 +126,7 @@ class RuleFilterCreatorView extends GetWidget<RulesFilterCreatorController> {
padding: const EdgeInsets.only(top: 16), padding: const EdgeInsets.only(top: 16),
alignment: Alignment.center, alignment: Alignment.center,
child: Obx(() => Text( child: Obx(() => Text(
controller.actionType.getTitle(context), controller.actionType.value.getTitle(context),
style: const TextStyle( style: const TextStyle(
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
fontSize: 20, fontSize: 20,
@@ -237,7 +256,7 @@ class RuleFilterCreatorView extends GetWidget<RulesFilterCreatorController> {
onTap: () => controller.closeView(context)), onTap: () => controller.closeView(context)),
const SizedBox(width: 12), const SizedBox(width: 12),
Obx(() => buildTextButton( Obx(() => buildTextButton(
controller.actionType.getActionName(context), controller.actionType.value.getActionName(context),
width: 128, width: 128,
height: 44, height: 44,
backgroundColor: AppColor.colorTextButton, backgroundColor: AppColor.colorTextButton,
@@ -266,7 +285,7 @@ class RuleFilterCreatorView extends GetWidget<RulesFilterCreatorController> {
padding: const EdgeInsets.only(top: 16), padding: const EdgeInsets.only(top: 16),
alignment: Alignment.center, alignment: Alignment.center,
child: Obx(() => Text( child: Obx(() => Text(
controller.actionType.getTitle(context), controller.actionType.value.getTitle(context),
style: const TextStyle( style: const TextStyle(
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
fontSize: 20, fontSize: 20,
@@ -396,7 +415,7 @@ class RuleFilterCreatorView extends GetWidget<RulesFilterCreatorController> {
onTap: () => controller.closeView(context))), onTap: () => controller.closeView(context))),
const SizedBox(width: 12), const SizedBox(width: 12),
Expanded(child: Obx(() => buildTextButton( Expanded(child: Obx(() => buildTextButton(
controller.actionType.getActionName(context), controller.actionType.value.getActionName(context),
width: 128, width: 128,
height: 44, height: 44,
backgroundColor: AppColor.colorTextButton, backgroundColor: AppColor.colorTextButton,
@@ -425,7 +444,7 @@ class RuleFilterCreatorView extends GetWidget<RulesFilterCreatorController> {
padding: const EdgeInsets.only(top: 16), padding: const EdgeInsets.only(top: 16),
alignment: Alignment.center, alignment: Alignment.center,
child: Obx(() => Text( child: Obx(() => Text(
controller.actionType.getTitle(context), controller.actionType.value.getTitle(context),
style: const TextStyle( style: const TextStyle(
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
fontSize: 20, fontSize: 20,
@@ -585,7 +604,7 @@ class RuleFilterCreatorView extends GetWidget<RulesFilterCreatorController> {
onTap: () => controller.closeView(context))), onTap: () => controller.closeView(context))),
const SizedBox(width: 12), const SizedBox(width: 12),
Expanded(child: Obx(() => buildTextButton( Expanded(child: Obx(() => buildTextButton(
controller.actionType.getActionName(context), controller.actionType.value.getActionName(context),
width: 128, width: 128,
height: 44, height: 44,
backgroundColor: AppColor.colorTextButton, backgroundColor: AppColor.colorTextButton,
+5 -6
View File
@@ -57,6 +57,11 @@ class AppPages {
opaque: false, opaque: false,
page: () => DeferredWidget(identity_creator.loadLibrary, () => identity_creator.IdentityCreatorView()), page: () => DeferredWidget(identity_creator.loadLibrary, () => identity_creator.IdentityCreatorView()),
binding: IdentityCreatorBindings()), binding: IdentityCreatorBindings()),
GetPage(
name: AppRoutes.rulesFilterCreator,
opaque: false,
page: () => DeferredWidget(rules_filter_creator.loadLibrary, () => rules_filter_creator.RuleFilterCreatorView()),
binding: RulesFilterCreatorBindings()),
]; ];
static final pages = [ static final pages = [
@@ -81,12 +86,6 @@ class AppPages {
page: () => DeferredWidget(manage_account_dashboard.loadLibrary, page: () => DeferredWidget(manage_account_dashboard.loadLibrary,
() => manage_account_dashboard.ManageAccountDashBoardView()), () => manage_account_dashboard.ManageAccountDashBoardView()),
binding: ManageAccountDashBoardBindings()), binding: ManageAccountDashBoardBindings()),
GetPage(
name: AppRoutes.rulesFilterCreator,
opaque: false,
page: () => DeferredWidget(rules_filter_creator.loadLibrary,
() => rules_filter_creator.RuleFilterCreatorView()),
binding: RulesFilterCreatorBindings()),
GetPage( GetPage(
name: AppRoutes.emailsForwardCreator, name: AppRoutes.emailsForwardCreator,
opaque: false, opaque: false,
+1 -1
View File
@@ -10,6 +10,6 @@ abstract class AppRoutes {
static const mailboxCreator = '/mailbox_creator'; static const mailboxCreator = '/mailbox_creator';
static const contact = '/contact'; static const contact = '/contact';
static const identityCreator = '/identity_creator'; static const identityCreator = '/identity_creator';
static const rulesFilterCreator = '$settings/rules_filter_creator'; static const rulesFilterCreator = '/rules_filter_creator';
static const emailsForwardCreator = '$settings/emails_forward_creator'; static const emailsForwardCreator = '$settings/emails_forward_creator';
} }