TF-898 Implement quick creating rule in email view

This commit is contained in:
dab246
2022-11-11 10:59:31 +07:00
committed by Dat H. Pham
parent 927151ec8e
commit f4f6298761
20 changed files with 538 additions and 262 deletions
@@ -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());
}
}
@@ -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/views/bottom_popup/confirmation_dialog_action_sheet_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/material.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 {
final GetAllRulesInteractor _getAllRulesInteractor;
final DeleteEmailRuleInteractor _deleteEmailRuleInteractor;
final CreateNewEmailRuleFilterInteractor _createNewEmailRuleFilterInteractor;
final EditEmailRuleFilterInteractor _editEmailRuleFilterInteractor;
GetAllRulesInteractor? _getAllRulesInteractor;
DeleteEmailRuleInteractor? _deleteEmailRuleInteractor;
CreateNewEmailRuleFilterInteractor? _createNewEmailRuleFilterInteractor;
EditEmailRuleFilterInteractor? _editEmailRuleFilterInteractor;
final _accountDashBoardController = Get.find<ManageAccountDashBoardController>();
final _imagePaths = Get.find<ImagePaths>();
@@ -45,12 +46,7 @@ class EmailRulesController extends BaseController {
final listEmailRule = <TMailRule>[].obs;
EmailRulesController(
this._getAllRulesInteractor,
this._deleteEmailRuleInteractor,
this._createNewEmailRuleFilterInteractor,
this._editEmailRuleFilterInteractor,
);
EmailRulesController();
@override
void onDone() {
@@ -71,16 +67,28 @@ class EmailRulesController extends BaseController {
@override
void onInit() {
_getAllRules();
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 {
final accountId = _accountDashBoardController.accountId.value;
if (accountId != null) {
final arguments = RulesFilterCreatorArguments(
accountId,
listEmailRule: listEmailRule);
final session = _accountDashBoardController.sessionCurrent.value;
if (accountId != null && session != null) {
final arguments = RulesFilterCreatorArguments(accountId, session);
if (BuildUtils.isWeb) {
showDialogRuleFilterCreator(
@@ -107,9 +115,9 @@ class EmailRulesController extends BaseController {
AccountId accountId,
CreateNewEmailRuleFilterRequest ruleFilterRequest
) async {
consumeState(_createNewEmailRuleFilterInteractor.execute(
accountId,
ruleFilterRequest));
if (_createNewEmailRuleFilterInteractor != null) {
consumeState(_createNewEmailRuleFilterInteractor!.execute(accountId, ruleFilterRequest));
}
}
void _createNewRuleFilterSuccess(CreateNewRuleFilterSuccess success) {
@@ -127,12 +135,13 @@ class EmailRulesController extends BaseController {
void editEmailRule(BuildContext context, TMailRule rule) async {
final accountId = _accountDashBoardController.accountId.value;
if (accountId != null) {
final session = _accountDashBoardController.sessionCurrent.value;
if (accountId != null && session != null) {
final arguments = RulesFilterCreatorArguments(
accountId,
session,
actionType: CreatorActionType.edit,
tMailRule: rule,
listEmailRule: listEmailRule);
tMailRule: rule);
if (BuildUtils.isWeb) {
showDialogRuleFilterCreator(
@@ -159,7 +168,9 @@ class EmailRulesController extends BaseController {
AccountId accountId,
EditEmailRuleFilterRequest ruleFilterRequest
) {
consumeState(_editEmailRuleFilterInteractor.execute(accountId, ruleFilterRequest));
if (_editEmailRuleFilterInteractor != null) {
consumeState(_editEmailRuleFilterInteractor!.execute(accountId, ruleFilterRequest));
}
}
void _editEmailRuleFilterSuccess(EditEmailRuleFilterSuccess success) {
@@ -214,13 +225,16 @@ class EmailRulesController extends BaseController {
void _handleDeleteEmailRuleAction(TMailRule emailRule) {
popBack();
final deleteEmailRuleRequest = DeleteEmailRuleRequest(
emailRuleDelete : emailRule,
currentEmailRules: listEmailRule,
);
consumeState(_deleteEmailRuleInteractor.execute(
if (_deleteEmailRuleInteractor != null) {
final deleteEmailRuleRequest = DeleteEmailRuleRequest(
emailRuleDelete : emailRule,
currentEmailRules: listEmailRule,
);
consumeState(_deleteEmailRuleInteractor!.execute(
_accountDashBoardController.accountId.value!,
deleteEmailRuleRequest));
}
}
void _handleDeleteEmailRuleSuccess(DeleteEmailRuleSuccess success) {
@@ -239,7 +253,9 @@ class EmailRulesController extends BaseController {
}
void _getAllRules() {
consumeState(_getAllRulesInteractor.execute(_accountDashBoardController.accountId.value!));
if (_getAllRulesInteractor != null) {
consumeState(_getAllRulesInteractor!.execute(_accountDashBoardController.accountId.value!));
}
}
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_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/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/domain/repository/manage_account_repository.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.lazyPut(() => ManageAccountDataSourceImpl(
Get.find<ManageAccountAPI>(),
Get.find<LanguageCacheManager>(),
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/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/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/forward/bindings/forward_bindings.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/model/account_menu_item.dart';
@@ -95,6 +95,7 @@ class ManageAccountDashBoardController extends ReloadableController {
_getUserProfile();
injectAutoCompleteBindings(sessionCurrent.value, accountId.value);
injectForwardBindings(sessionCurrent.value, accountId.value);
injectRuleFilterBindings(sessionCurrent.value, accountId.value);
injectVacationBindings(sessionCurrent.value, accountId.value);
_getVacationResponse();
}
@@ -108,6 +109,7 @@ class ManageAccountDashBoardController extends ReloadableController {
_getUserProfile();
injectAutoCompleteBindings(sessionCurrent.value, accountId.value);
injectForwardBindings(sessionCurrent.value, accountId.value);
injectRuleFilterBindings(sessionCurrent.value, accountId.value);
injectVacationBindings(sessionCurrent.value, accountId.value);
_getVacationResponse();
if (arguments.menuSettingCurrent != null) {