TF-612 Add presentation layer for edit email rule filter
This commit is contained in:
@@ -3,6 +3,7 @@ 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';
|
||||
|
||||
@@ -14,6 +15,7 @@ class EmailRulesBindings extends BaseBindings {
|
||||
Get.find<GetAllRulesInteractor>(),
|
||||
Get.find<DeleteEmailRuleInteractor>(),
|
||||
Get.find<CreateNewEmailRuleFilterInteractor>(),
|
||||
Get.find<EditEmailRuleFilterInteractor>(),
|
||||
));
|
||||
}
|
||||
|
||||
@@ -28,6 +30,7 @@ class EmailRulesBindings extends BaseBindings {
|
||||
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
|
||||
|
||||
@@ -1,21 +1,28 @@
|
||||
import 'package:core/presentation/extensions/color_extension.dart';
|
||||
import 'package:core/presentation/resources/image_paths.dart';
|
||||
import 'package:core/presentation/utils/app_toast.dart';
|
||||
import 'package:core/utils/app_logger.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/data/extensions/list_tmail_rule_extensions.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/model/edit_email_rule_filter_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/edit_email_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/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/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/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/main/localizations/app_localizations.dart';
|
||||
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
||||
@@ -26,16 +33,19 @@ class EmailRulesController extends BaseController {
|
||||
final GetAllRulesInteractor _getAllRulesInteractor;
|
||||
final DeleteEmailRuleInteractor _deleteEmailRuleInteractor;
|
||||
final CreateNewEmailRuleFilterInteractor _createNewEmailRuleFilterInteractor;
|
||||
final EditEmailRuleFilterInteractor _editEmailRuleFilterInteractor;
|
||||
|
||||
final _accountDashBoardController = Get.find<ManageAccountDashBoardController>();
|
||||
final _imagePaths = Get.find<ImagePaths>();
|
||||
final _appToast = Get.find<AppToast>();
|
||||
|
||||
final listEmailRule = <TMailRule>[].obs;
|
||||
|
||||
EmailRulesController(
|
||||
this._getAllRulesInteractor,
|
||||
this._deleteEmailRuleInteractor,
|
||||
this._createNewEmailRuleFilterInteractor
|
||||
this._createNewEmailRuleFilterInteractor,
|
||||
this._editEmailRuleFilterInteractor,
|
||||
);
|
||||
|
||||
@override
|
||||
@@ -52,6 +62,8 @@ class EmailRulesController extends BaseController {
|
||||
}
|
||||
} else if (success is CreateNewRuleFilterSuccess) {
|
||||
_createNewRuleFilterSuccess(success);
|
||||
} else if (success is EditEmailRuleFilterSuccess) {
|
||||
_editEmailRuleFilterSuccess(success);
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -94,13 +106,57 @@ class EmailRulesController extends BaseController {
|
||||
|
||||
void _createNewRuleFilterSuccess(CreateNewRuleFilterSuccess success) {
|
||||
if (success.newListRules.isNotEmpty == true) {
|
||||
listEmailRule.clear();
|
||||
listEmailRule.addAll(success.newListRules);
|
||||
if (currentOverlayContext != null && currentContext != null) {
|
||||
_appToast.showToastWithIcon(
|
||||
currentOverlayContext!,
|
||||
message: AppLocalizations.of(currentContext!).newFilterWasCreated,
|
||||
icon: _imagePaths.icSelected);
|
||||
}
|
||||
log('EmailRulesController::_createNewRuleFilterSuccess(): ${success.newListRules}');
|
||||
listEmailRule.value = success.newListRules;
|
||||
listEmailRule.refresh();
|
||||
}
|
||||
}
|
||||
|
||||
void editEmailRule(TMailRule rule) {
|
||||
//TODO: editEmailRule
|
||||
void editEmailRule(TMailRule rule) async {
|
||||
final accountId = _accountDashBoardController.accountId.value;
|
||||
if (accountId != null) {
|
||||
final emailRuleFilterChanged = await push(
|
||||
AppRoutes.RULES_FILTER_CREATOR,
|
||||
arguments: RulesFilterCreatorArguments(
|
||||
accountId,
|
||||
actionType: CreatorActionType.edit,
|
||||
tMailRule: rule));
|
||||
|
||||
if (emailRuleFilterChanged is TMailRule) {
|
||||
final newListRuleWithIds = listEmailRule.withIds;
|
||||
_editEmailRuleFilterAction(
|
||||
accountId,
|
||||
EditEmailRuleFilterRequest(newListRuleWithIds, emailRuleFilterChanged)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void _editEmailRuleFilterAction(
|
||||
AccountId accountId,
|
||||
EditEmailRuleFilterRequest ruleFilterRequest
|
||||
) {
|
||||
consumeState(_editEmailRuleFilterInteractor.execute(accountId, ruleFilterRequest));
|
||||
}
|
||||
|
||||
void _editEmailRuleFilterSuccess(EditEmailRuleFilterSuccess success) {
|
||||
if (success.listRulesUpdated.isNotEmpty == true) {
|
||||
if (currentOverlayContext != null && currentContext != null) {
|
||||
_appToast.showToastWithIcon(
|
||||
currentOverlayContext!,
|
||||
message: AppLocalizations.of(currentContext!).yourFilterHasBeenUpdated,
|
||||
icon: _imagePaths.icSelected);
|
||||
}
|
||||
log('EmailRulesController::_editEmailRuleFilterSuccess(): ${success.listRulesUpdated}');
|
||||
listEmailRule.value = success.listRulesUpdated;
|
||||
listEmailRule.refresh();
|
||||
}
|
||||
}
|
||||
|
||||
void deleteEmailRule(TMailRule emailRule) {
|
||||
@@ -144,13 +200,16 @@ class EmailRulesController extends BaseController {
|
||||
|
||||
Widget _editEmailRuleActionTile(BuildContext context, TMailRule rule) {
|
||||
return (EmailRuleBottomSheetActionTileBuilder(
|
||||
const Key('edit_emailRule_action'),
|
||||
SvgPicture.asset(_imagePaths.icEdit),
|
||||
AppLocalizations.of(context).editRule,
|
||||
rule,
|
||||
iconLeftPadding: const EdgeInsets.only(left: 12, right: 16),
|
||||
iconRightPadding: const EdgeInsets.only(right: 12),
|
||||
)..onActionClick((rule) => editEmailRule(rule)))
|
||||
.build();
|
||||
const Key('edit_emailRule_action'),
|
||||
SvgPicture.asset(_imagePaths.icEdit),
|
||||
AppLocalizations.of(context).editRule,
|
||||
rule,
|
||||
iconLeftPadding: const EdgeInsets.only(left: 12, right: 16),
|
||||
iconRightPadding: const EdgeInsets.only(right: 12))
|
||||
..onActionClick((rule) {
|
||||
editEmailRule(rule);
|
||||
popBack();
|
||||
}))
|
||||
.build();
|
||||
}
|
||||
}
|
||||
@@ -37,9 +37,7 @@ class EmailRulesView extends GetWidget<EmailRulesController> with AppLoaderMixin
|
||||
EmailRulesHeaderWidget(
|
||||
imagePaths: _imagePaths,
|
||||
responsiveUtils: _responsiveUtils,
|
||||
createRule: () {
|
||||
//TODO: createRule
|
||||
},
|
||||
createRule: () => controller.goToCreateNewRule(),
|
||||
),
|
||||
const SizedBox(height: 22),
|
||||
_buildLoadingView(),
|
||||
|
||||
+7
-6
@@ -5,17 +5,18 @@ import 'package:get/get.dart';
|
||||
import 'package:rule_filter/rule_filter/tmail_rule.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/email_rules/email_rules_controller.dart';
|
||||
|
||||
class EmailRulesItemWidget extends GetWidget<EmailRulesController> {
|
||||
class EmailRulesItemWidget extends StatelessWidget {
|
||||
final _responsiveUtils = Get.find<ResponsiveUtils>();
|
||||
final _imagePaths = Get.find<ImagePaths>();
|
||||
final _emailRuleController = Get.find<EmailRulesController>();
|
||||
|
||||
final TMailRule rule;
|
||||
|
||||
EmailRulesItemWidget({
|
||||
Key? key,
|
||||
required this.rule,
|
||||
}) : super(key: key);
|
||||
|
||||
final TMailRule rule;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Container(
|
||||
@@ -40,7 +41,7 @@ class EmailRulesItemWidget extends GetWidget<EmailRulesController> {
|
||||
fit: BoxFit.fill,
|
||||
),
|
||||
onTap: () {
|
||||
controller.editEmailRule(rule);
|
||||
_emailRuleController.editEmailRule(rule);
|
||||
}),
|
||||
if (!_responsiveUtils.isMobile(context))
|
||||
buildIconWeb(
|
||||
@@ -49,7 +50,7 @@ class EmailRulesItemWidget extends GetWidget<EmailRulesController> {
|
||||
fit: BoxFit.fill,
|
||||
),
|
||||
onTap: () {
|
||||
controller.deleteEmailRule(rule);
|
||||
_emailRuleController.deleteEmailRule(rule);
|
||||
}),
|
||||
if (_responsiveUtils.isMobile(context))
|
||||
buildIconWeb(
|
||||
@@ -59,7 +60,7 @@ class EmailRulesItemWidget extends GetWidget<EmailRulesController> {
|
||||
),
|
||||
iconPadding: const EdgeInsets.all(0),
|
||||
onTap: () {
|
||||
controller.openEditRuleMenuAction(context, rule);
|
||||
_emailRuleController.openEditRuleMenuAction(context, rule);
|
||||
}),
|
||||
]),
|
||||
);
|
||||
|
||||
+3
-5
@@ -3,11 +3,9 @@ import 'package:core/presentation/resources/image_paths.dart';
|
||||
import 'package:core/presentation/utils/responsive_utils.dart';
|
||||
import 'package:core/presentation/views/button/button_builder.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/email_rules/email_rules_controller.dart';
|
||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||
|
||||
class EmailRulesHeaderWidget extends GetWidget<EmailRulesController> {
|
||||
class EmailRulesHeaderWidget extends StatelessWidget {
|
||||
const EmailRulesHeaderWidget({
|
||||
Key? key,
|
||||
required this.createRule,
|
||||
@@ -63,7 +61,7 @@ class EmailRulesHeaderWidget extends GetWidget<EmailRulesController> {
|
||||
color: Colors.white,
|
||||
fontWeight: FontWeight.w500,
|
||||
))
|
||||
..onPressActionClick(() => controller.goToCreateNewRule())
|
||||
..onPressActionClick(() => createRule.call())
|
||||
..text(
|
||||
AppLocalizations.of(context).addNewRule,
|
||||
isVertical: false,
|
||||
@@ -85,7 +83,7 @@ class EmailRulesHeaderWidget extends GetWidget<EmailRulesController> {
|
||||
color: Colors.white,
|
||||
fontWeight: FontWeight.w500,
|
||||
))
|
||||
..onPressActionClick(() => controller.goToCreateNewRule())
|
||||
..onPressActionClick(() => createRule.call())
|
||||
..text(
|
||||
AppLocalizations.of(context).addNewRule,
|
||||
isVertical: false,
|
||||
|
||||
+17
-12
@@ -1,6 +1,9 @@
|
||||
import 'package:core/presentation/extensions/color_extension.dart';
|
||||
import 'package:core/utils/app_logger.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/id.dart';
|
||||
import 'package:rule_filter/rule_filter/rule_id.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/email_rules/widgets/email_rule_item_widget.dart';
|
||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||
@@ -36,22 +39,24 @@ class ListEmailRulesWidget extends GetWidget<EmailRulesController> {
|
||||
thickness: 0.2,
|
||||
),
|
||||
Expanded(
|
||||
child: Obx(
|
||||
() => ListView.separated(
|
||||
child: Obx(() {
|
||||
log('ListEmailRulesWidget::build(): ${controller.listEmailRule}');
|
||||
return ListView.separated(
|
||||
shrinkWrap: true,
|
||||
itemCount: controller.listEmailRule.length,
|
||||
itemBuilder: (context, index) {
|
||||
final rule = controller.listEmailRule[index];
|
||||
return EmailRulesItemWidget(rule: rule);
|
||||
final ruleWithId = controller.listEmailRule[index]
|
||||
.copyWith(id: RuleId(id: Id(index.toString())));
|
||||
log('ListEmailRulesWidget::build(): $ruleWithId');
|
||||
return EmailRulesItemWidget(rule: ruleWithId);
|
||||
},
|
||||
separatorBuilder: (BuildContext context, int index) =>
|
||||
const Divider(
|
||||
color: AppColor.lineItemListColor,
|
||||
height: 1,
|
||||
thickness: 0.2,
|
||||
),
|
||||
),
|
||||
),
|
||||
separatorBuilder: (context, index) => const Divider(
|
||||
color: AppColor.lineItemListColor,
|
||||
height: 1,
|
||||
thickness: 0.2,
|
||||
),
|
||||
);
|
||||
}),
|
||||
),
|
||||
]),
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user