TF-611 Handle create new email rule filter

This commit is contained in:
dab246
2022-08-10 17:33:57 +07:00
committed by Dat H. Pham
parent 6d327fd896
commit 5dd2d4132f
8 changed files with 74 additions and 17 deletions
@@ -54,7 +54,7 @@ class AppBarDestinationPickerBuilder extends StatelessWidget {
Widget _buildCancelButton(BuildContext context) {
if (_mailboxAction == MailboxActions.moveEmail ||
_mailboxAction == MailboxActions.move ||
_mailboxAction == MailboxActions.selectFromRuleFilter ||
_mailboxAction == MailboxActions.selectForRuleAction ||
_mailboxAction == MailboxActions.select) {
return Padding(
padding: const EdgeInsets.only(right: 12),
@@ -11,7 +11,7 @@ enum MailboxActions {
rename,
move,
markAsRead,
selectFromRuleFilter,
selectForRuleAction,
}
extension MailboxActionsExtension on MailboxActions {
@@ -24,7 +24,7 @@ extension MailboxActionsExtension on MailboxActions {
case MailboxActions.move:
return AppLocalizations.of(context).moveTo;
case MailboxActions.select:
case MailboxActions.selectFromRuleFilter:
case MailboxActions.selectForRuleAction:
return AppLocalizations.of(context).selectMailbox;
default:
return '';
@@ -84,7 +84,7 @@ extension MailboxActionsExtension on MailboxActions {
case MailboxActions.moveEmail:
case MailboxActions.move:
case MailboxActions.select:
case MailboxActions.selectFromRuleFilter:
case MailboxActions.selectForRuleAction:
return true;
default:
return false;
@@ -107,7 +107,7 @@ extension MailboxActionsExtension on MailboxActions {
case MailboxActions.moveEmail:
case MailboxActions.move:
case MailboxActions.select:
case MailboxActions.selectFromRuleFilter:
case MailboxActions.selectForRuleAction:
return false;
default:
return true;
@@ -2,6 +2,7 @@ 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/get_all_rules_interactor.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/email_rules/email_rules_controller.dart';
@@ -12,6 +13,7 @@ class EmailRulesBindings extends BaseBindings {
Get.lazyPut(() => EmailRulesController(
Get.find<GetAllRulesInteractor>(),
Get.find<DeleteEmailRuleInteractor>(),
Get.find<CreateNewEmailRuleFilterInteractor>(),
));
}
@@ -25,6 +27,7 @@ class EmailRulesBindings extends BaseBindings {
void bindingsInteractor() {
Get.lazyPut(() => GetAllRulesInteractor(Get.find<ManageAccountRepository>()));
Get.lazyPut(() => DeleteEmailRuleInteractor(Get.find<ManageAccountRepository>()));
Get.lazyPut(() => CreateNewEmailRuleFilterInteractor(Get.find<ManageAccountRepository>()));
}
@override
@@ -3,27 +3,40 @@ import 'package:core/presentation/resources/image_paths.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:get/get.dart';
import 'package:jmap_dart_client/jmap/account_id.dart';
import 'package:rule_filter/rule_filter/tmail_rule.dart';
import 'package:tmail_ui_user/features/base/base_controller.dart';
import 'package:tmail_ui_user/features/manage_account/domain/model/delete_email_rule_request.dart';
import 'package:tmail_ui_user/features/manage_account/domain/state/delete_email_rule_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_rules_state.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/get_all_rules_interactor.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/email_rules/widgets/email_rule_bottom_sheet_action_tile_builder.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/rules_filter_creator_arguments.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/app_routes.dart';
class EmailRulesController extends BaseController {
final listEmailRule = <TMailRule>[].obs;
final _accountDashBoardController =
Get.find<ManageAccountDashBoardController>();
final GetAllRulesInteractor _getAllRulesInteractor;
final DeleteEmailRuleInteractor _deleteEmailRuleInteractor;
final CreateNewEmailRuleFilterInteractor _createNewEmailRuleFilterInteractor;
final _accountDashBoardController = Get.find<ManageAccountDashBoardController>();
final _imagePaths = Get.find<ImagePaths>();
EmailRulesController(this._getAllRulesInteractor, this._deleteEmailRuleInteractor);
final listEmailRule = <TMailRule>[].obs;
EmailRulesController(
this._getAllRulesInteractor,
this._deleteEmailRuleInteractor,
this._createNewEmailRuleFilterInteractor
);
@override
void onDone() {
@@ -32,12 +45,13 @@ class EmailRulesController extends BaseController {
if (success.rules?.isNotEmpty == true) {
listEmailRule.addAll(success.rules!);
}
}
if (success is DeleteEmailRuleSuccess) {
} else if (success is DeleteEmailRuleSuccess) {
if (success.rules?.isNotEmpty == true) {
listEmailRule.clear();
listEmailRule.addAll(success.rules!);
}
} else if (success is CreateNewRuleFilterSuccess) {
_createNewRuleFilterSuccess(success);
}
});
}
@@ -51,8 +65,38 @@ class EmailRulesController extends BaseController {
super.onInit();
}
void goToCreateNewRule() {
//TODO: goToCreateNewRule
void goToCreateNewRule() async {
final accountId = _accountDashBoardController.accountId.value;
if (accountId != null) {
final newEmailRuleFilter = await push(
AppRoutes.RULES_FILTER_CREATOR,
arguments: RulesFilterCreatorArguments(accountId));
if (newEmailRuleFilter is TMailRule) {
_createNewRuleFilterAction(
accountId,
CreateNewEmailRuleFilterRequest(
listEmailRule,
newEmailRuleFilter)
);
}
}
}
void _createNewRuleFilterAction(
AccountId accountId,
CreateNewEmailRuleFilterRequest ruleFilterRequest
) async {
consumeState(_createNewEmailRuleFilterInteractor.execute(
accountId,
ruleFilterRequest));
}
void _createNewRuleFilterSuccess(CreateNewRuleFilterSuccess success) {
if (success.newListRules.isNotEmpty == true) {
listEmailRule.clear();
listEmailRule.addAll(success.newListRules);
}
}
void editEmailRule(TMailRule rule) {
@@ -109,4 +153,4 @@ class EmailRulesController extends BaseController {
)..onActionClick((rule) => editEmailRule(rule)))
.build();
}
}
}
+2 -2
View File
@@ -1,5 +1,5 @@
{
"@@last_modified": "2022-08-10T18:05:32.066682",
"@@last_modified": "2022-08-11T11:23:27.430951",
"initializing_data": "Initializing data...",
"@initializing_data": {
"type": "text",
@@ -1844,7 +1844,7 @@
"placeholders_order": [],
"placeholders": {}
},
"actionTitleRulesFilter": "Perform the following actions:",
"actionTitleRulesFilter": "Perform the following action:",
"@actionTitleRulesFilter": {
"type": "text",
"placeholders_order": [],
@@ -1897,7 +1897,7 @@ class AppLocalizations {
String get actionTitleRulesFilter {
return Intl.message(
'Perform the following actions:',
'Perform the following action:',
name: 'actionTitleRulesFilter');
}
+9
View File
@@ -9,6 +9,8 @@ import 'package:tmail_ui_user/features/home/presentation/home_bindings.dart';
import 'package:tmail_ui_user/features/home/presentation/home_view.dart';
import 'package:tmail_ui_user/features/identity_creator/presentation/identity_creator_bindings.dart';
import 'package:tmail_ui_user/features/identity_creator/presentation/identity_creator_view.dart' deferred as identity_creator;
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' deferred as rules_filter_creator;
import 'package:tmail_ui_user/features/login/presentation/login_bindings.dart';
import 'package:tmail_ui_user/features/login/presentation/login_view.dart'
if (dart.library.html) 'package:tmail_ui_user/features/login/presentation/login_view_web.dart' deferred as login;
@@ -71,5 +73,12 @@ class AppPages {
opaque: false,
page: () => DeferredWidget(identity_creator.loadLibrary, () => identity_creator.IdentityCreatorView()),
binding: IdentityCreatorBindings()),
GetPage(
name: AppRoutes.RULES_FILTER_CREATOR,
opaque: false,
page: () => DeferredWidget(
rules_filter_creator.loadLibrary,
() => rules_filter_creator.RuleFilterCreatorView()),
binding: RulesFilterCreatorBindings()),
];
}
+1
View File
@@ -11,4 +11,5 @@ abstract class AppRoutes {
static const MAILBOX_CREATOR = '/mailboxCreator';
static const MANAGE_ACCOUNT = '$MAILBOX_DASHBOARD/manage_account';
static const IDENTITY_CREATOR = '/identity_creator';
static const RULES_FILTER_CREATOR = '/rules_filter_creator';
}