From f8e5d3bab955effc8b00ee57ebf1ebeb098fa9f6 Mon Sep 17 00:00:00 2001 From: hieubt Date: Mon, 2 Oct 2023 17:27:07 +0700 Subject: [PATCH] TF-2084 Add widget for multi actions (cherry picked from commit ac475711c15f7668542343d2fec9185c671b43dd) --- .../widgets/rule_filter_action_list.dart | 80 +++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 lib/features/rules_filter_creator/presentation/widgets/rule_filter_action_list.dart diff --git a/lib/features/rules_filter_creator/presentation/widgets/rule_filter_action_list.dart b/lib/features/rules_filter_creator/presentation/widgets/rule_filter_action_list.dart new file mode 100644 index 000000000..c20d5fb4e --- /dev/null +++ b/lib/features/rules_filter_creator/presentation/widgets/rule_filter_action_list.dart @@ -0,0 +1,80 @@ +import 'package:core/presentation/resources/image_paths.dart'; +import 'package:core/presentation/utils/responsive_utils.dart'; +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:tmail_ui_user/features/rules_filter_creator/presentation/model/email_rule_filter_action.dart'; +import 'package:tmail_ui_user/features/rules_filter_creator/presentation/model/rule_filter_action_arguments.dart'; +import 'package:tmail_ui_user/features/rules_filter_creator/presentation/widgets/rule_filter_action_widget.dart'; + +class RuleFilterActionListWidget extends StatelessWidget { + final ResponsiveUtils responsiveUtils; + final List actionList; + final Function(EmailRuleFilterAction?, int)? onActionChangeMobile; + final Function(EmailRuleFilterAction?, int)? onActionChanged; + final TextEditingController? forwardEmailEditingController; + final FocusNode? forwardEmailFocusNode; + final Function(int)? tapActionDetailedCallback; + final Function(int)? tapRemoveCallback; + final ImagePaths? imagePaths; + final Function(String?, int)? onChangeForwardEmail; + final String? errorForwardEmail; + final String? errorMailboxSelected; + + const RuleFilterActionListWidget({ + Key? key, + required this.responsiveUtils, + required this.actionList, + this.onActionChangeMobile, + this.onActionChanged, + this.forwardEmailEditingController, + this.forwardEmailFocusNode, + this.tapActionDetailedCallback, + this.tapRemoveCallback, + this.imagePaths, + this.onChangeForwardEmail, + this.errorForwardEmail, + this.errorMailboxSelected, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + return Obx(() { + return ListView.separated( + shrinkWrap: true, + itemCount: actionList.length, + separatorBuilder: (context, index) { + return const SizedBox(height: 12,); + }, + itemBuilder: (context, index) { + final RuleFilterActionArguments currentAction = actionList[index]; + String? errorValue; + if (currentAction is ForwardActionArguments) { + errorValue = errorForwardEmail; + } else { + errorValue = errorMailboxSelected; + } + return RuleFilterActionWidget( + responsiveUtils: responsiveUtils, + mailboxSelected: currentAction is MoveMessageActionArguments ? currentAction.mailbox : null, + errorValue: errorValue, + onActionChangeMobile: () { + onActionChangeMobile!(currentAction.action, index); + }, + onActionChanged: (newAction) { + if (newAction != currentAction.action) { + onActionChanged!(newAction, index); + } + }, + forwardEmailEditingController: currentAction.action == EmailRuleFilterAction.forwardTo ? forwardEmailEditingController : null, + forwardEmailFocusNode: currentAction.action == EmailRuleFilterAction.forwardTo ? forwardEmailFocusNode : null, + onChangeForwardEmail: (value) => onChangeForwardEmail!(value, index), + actionSelected: currentAction.action, + tapActionDetailedCallback: () => tapActionDetailedCallback!(index), + tapRemoveCallback: () => tapRemoveCallback!(index), + imagePaths: imagePaths, + ); + }, + ); + }); + } +}