TF-612 Add presentation layer for edit email rule filter

This commit is contained in:
dab246
2022-08-11 15:35:12 +07:00
committed by Dat H. Pham
parent 036a8612f8
commit 8c2216297c
14 changed files with 257 additions and 59 deletions
@@ -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,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,
@@ -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,
),
);
}),
),
]),
);