TF-1074 Handle go to path /rules_filter_creator
This commit is contained in:
@@ -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(),
|
||||||
|
|||||||
+1
-1
@@ -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(),
|
|
||||||
]
|
]
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-1
@@ -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>();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
+80
-69
@@ -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,
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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';
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user