TF-1983 Perform create new rule from new folder

(cherry picked from commit 41279e19a05d2787e9ffd8618f832dab33c92f01)
This commit is contained in:
dab246
2023-08-09 19:18:15 +07:00
committed by Dat Vu
parent 9b54b5d448
commit d8d205aed9
3 changed files with 78 additions and 7 deletions
@@ -3,6 +3,7 @@ import 'package:equatable/equatable.dart';
import 'package:jmap_dart_client/jmap/account_id.dart';
import 'package:jmap_dart_client/jmap/core/session/session.dart';
import 'package:jmap_dart_client/jmap/mail/email/email_address.dart';
import 'package:model/mailbox/presentation_mailbox.dart';
import 'package:rule_filter/rule_filter/tmail_rule.dart';
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/model/creator_action_type.dart';
@@ -12,13 +13,26 @@ class RulesFilterCreatorArguments with EquatableMixin {
final CreatorActionType actionType;
final TMailRule? tMailRule;
final EmailAddress? emailAddress;
final PresentationMailbox? mailboxDestination;
RulesFilterCreatorArguments(this.accountId, this.session, {
this.actionType = CreatorActionType.create,
this.tMailRule,
this.emailAddress
});
RulesFilterCreatorArguments(
this.accountId,
this.session,
{
this.actionType = CreatorActionType.create,
this.tMailRule,
this.emailAddress,
this.mailboxDestination,
}
);
@override
List<Object?> get props => [accountId, actionType, session, tMailRule, emailAddress];
List<Object?> get props => [
accountId,
actionType,
session,
tMailRule,
emailAddress,
mailboxDestination,
];
}
@@ -70,6 +70,7 @@ class RulesFilterCreatorController extends BaseMailboxController {
TMailRule? _currentTMailRule;
EmailAddress? _emailAddress;
List<TMailRule>? _listEmailRule;
PresentationMailbox? _mailboxDestination;
RulesFilterCreatorController(
this._getAllMailboxInteractor,
@@ -93,6 +94,7 @@ class RulesFilterCreatorController extends BaseMailboxController {
_session = arguments!.session;
_currentTMailRule = arguments!.tMailRule;
_emailAddress = arguments!.emailAddress;
_mailboxDestination = arguments!.mailboxDestination;
actionType.value = arguments!.actionType;
injectRuleFilterBindings(_session, _accountId);
try {
@@ -148,6 +150,9 @@ class RulesFilterCreatorController extends BaseMailboxController {
_newRuleConditionValue = _emailAddress?.email;
_setValueInputField(inputConditionValueController, _newRuleConditionValue ?? '');
}
if (_mailboxDestination != null) {
mailboxSelected.value = _mailboxDestination;
}
break;
case CreatorActionType.edit:
if (_currentTMailRule != null) {
@@ -37,7 +37,11 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/action/das
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/search_controller.dart' as search;
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/dashboard_routes.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/search_email_filter.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/usecases/create_new_email_rule_filter_interactor.dart';
import 'package:tmail_ui_user/features/network_connection/presentation/network_connection_controller.dart';
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/model/rules_filter_creator_arguments.dart';
import 'package:tmail_ui_user/features/search/email/presentation/search_email_bindings.dart';
import 'package:tmail_ui_user/features/thread/domain/constants/thread_constants.dart';
import 'package:tmail_ui_user/features/thread/domain/model/email_filter.dart';
@@ -67,7 +71,9 @@ import 'package:tmail_ui_user/features/thread/presentation/model/delete_action_t
import 'package:tmail_ui_user/features/thread/presentation/model/loading_more_status.dart';
import 'package:tmail_ui_user/features/thread/presentation/model/search_status.dart';
import 'package:tmail_ui_user/main/exceptions/remote_exception.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/dialog_router.dart';
import 'package:tmail_ui_user/main/routes/navigation_router.dart';
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
import 'package:tmail_ui_user/main/routes/route_utils.dart';
@@ -88,6 +94,8 @@ class ThreadController extends BaseController with EmailActionController {
final SearchMoreEmailInteractor _searchMoreEmailInteractor;
final GetEmailByIdInteractor _getEmailByIdInteractor;
CreateNewEmailRuleFilterInteractor? _createNewEmailRuleFilterInteractor;
final listEmailDrag = <PresentationEmail>[].obs;
bool _rangeSelectionMode = false;
final openingEmail = RxBool(false);
@@ -168,6 +176,8 @@ class ThreadController extends BaseController with EmailActionController {
} else if (success is GetEmailByIdSuccess) {
openingEmail.value = false;
_openEmailDetailView(success.email);
} else if (success is CreateNewRuleFilterSuccess) {
_createNewRuleFilterSuccess(success);
}
}
@@ -1011,5 +1021,47 @@ class ThreadController extends BaseController with EmailActionController {
!currentMailbox.isDefault;
}
void goToCreateEmailRuleView() {}
void goToCreateEmailRuleView() async {
final accountId = mailboxDashBoardController.accountId.value;
final session = mailboxDashBoardController.sessionCurrent;
final currentMailbox = mailboxDashBoardController.selectedMailbox.value;
if (accountId != null && session != null) {
final arguments = RulesFilterCreatorArguments(
accountId,
session,
mailboxDestination: currentMailbox
);
final newRuleFilterRequest = PlatformInfo.isWeb
? await DialogRouter.pushGeneralDialog(routeName: AppRoutes.rulesFilterCreator, arguments: arguments)
: await push(AppRoutes.rulesFilterCreator, arguments: arguments);
if (newRuleFilterRequest is CreateNewEmailRuleFilterRequest) {
_createNewRuleFilterAction(accountId, newRuleFilterRequest);
}
} else {
logError('ThreadController::goToCreateEmailRuleView: Account or Session is NULL');
}
}
void _createNewRuleFilterAction(
AccountId accountId,
CreateNewEmailRuleFilterRequest ruleFilterRequest
) async {
_createNewEmailRuleFilterInteractor = getBinding<CreateNewEmailRuleFilterInteractor>();
if (_createNewEmailRuleFilterInteractor != null) {
consumeState(_createNewEmailRuleFilterInteractor!.execute(accountId, ruleFilterRequest));
}
}
void _createNewRuleFilterSuccess(CreateNewRuleFilterSuccess success) {
if (success.newListRules.isNotEmpty == true &&
currentOverlayContext != null &&
currentContext != null) {
_appToast.showToastSuccessMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).newFilterWasCreated
);
}
}
}