TF-2084 Update rule filter creator view for multi actions
(cherry picked from commit f885b446ebbb81b77ef56edf8ec45d99093ea717)
This commit is contained in:
@@ -2,25 +2,23 @@ import 'package:core/core.dart';
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_svg/flutter_svg.dart';
|
import 'package:flutter_svg/flutter_svg.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:model/model.dart';
|
|
||||||
import 'package:pointer_interceptor/pointer_interceptor.dart';
|
import 'package:pointer_interceptor/pointer_interceptor.dart';
|
||||||
import 'package:rule_filter/rule_filter/rule_condition.dart' as rule_condition;
|
import 'package:rule_filter/rule_filter/rule_condition.dart' as rule_condition;
|
||||||
import 'package:rule_filter/rule_filter/rule_condition_group.dart';
|
import 'package:rule_filter/rule_filter/rule_condition_group.dart';
|
||||||
import 'package:tmail_ui_user/features/base/widget/drop_down_button_widget.dart';
|
|
||||||
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/extensions/rule_condition_extensions.dart';
|
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/extensions/rule_condition_extensions.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/email_rule_filter_action.dart';
|
||||||
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/rules_filter_creator_controller.dart';
|
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/rules_filter_creator_controller.dart';
|
||||||
|
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/styles/rule_filter_action_styles.dart';
|
||||||
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/widgets/rule_action_bottom_sheet_action_tile_builder.dart';
|
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/widgets/rule_action_bottom_sheet_action_tile_builder.dart';
|
||||||
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/widgets/rule_condition_combiner_bottomsheet_action_tile_builder.dart';
|
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/widgets/rule_condition_combiner_bottomsheet_action_tile_builder.dart';
|
||||||
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/widgets/rule_condition_comparator_bottom_sheet_action_tile_builder.dart';
|
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/widgets/rule_condition_comparator_bottom_sheet_action_tile_builder.dart';
|
||||||
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/widgets/rule_condition_field_bottom_sheet_action_tile_builder.dart';
|
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/widgets/rule_condition_field_bottom_sheet_action_tile_builder.dart';
|
||||||
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/widgets/rule_filter_button_field.dart';
|
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/widgets/rule_filter_action_list.dart';
|
||||||
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/widgets/rule_filter_condition_widget.dart';
|
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/widgets/rule_filter_condition_widget.dart';
|
||||||
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/widgets/rule_filter_title_builder.dart';
|
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/widgets/rule_filter_title_builder.dart';
|
||||||
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/widgets/rules_filter_input_field_builder.dart';
|
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/widgets/rules_filter_input_field_builder.dart';
|
||||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
||||||
|
|
||||||
import 'model/rule_filter_condition_type.dart';
|
import 'model/rule_filter_condition_type.dart';
|
||||||
|
|
||||||
class RuleFilterCreatorView extends GetWidget<RulesFilterCreatorController> {
|
class RuleFilterCreatorView extends GetWidget<RulesFilterCreatorController> {
|
||||||
@@ -182,40 +180,53 @@ class RuleFilterCreatorView extends GetWidget<RulesFilterCreatorController> {
|
|||||||
fontSize: 16,
|
fontSize: 16,
|
||||||
color: Colors.black)),
|
color: Colors.black)),
|
||||||
const SizedBox(height: 24),
|
const SizedBox(height: 24),
|
||||||
Container(
|
Obx(() {
|
||||||
padding: const EdgeInsets.all(12),
|
return RuleFilterActionListWidget(
|
||||||
decoration: BoxDecoration(
|
responsiveUtils: _responsiveUtils,
|
||||||
color: AppColor.colorBackgroundFieldConditionRulesFilter,
|
actionList: controller.listEmailRuleFilterActionSelected,
|
||||||
borderRadius: BorderRadius.circular(12)),
|
onActionChanged: (newAction, index) {
|
||||||
child: Row(children: [
|
controller.selectEmailRuleFilterAction(newAction, index);
|
||||||
Expanded(child: Obx(() => DropDownButtonWidget<EmailRuleFilterAction>(
|
},
|
||||||
items: EmailRuleFilterAction.values,
|
forwardEmailEditingController: controller.forwardEmailController,
|
||||||
itemSelected: controller.emailRuleFilterActionSelected.value,
|
forwardEmailFocusNode: controller.forwardEmailFocusNode,
|
||||||
onChanged: (newAction) =>
|
onChangeForwardEmail: (value, index) => controller.updateForwardEmailValue(context, value, index),
|
||||||
controller.selectEmailRuleFilterAction(newAction),
|
tapActionDetailedCallback: (index) {
|
||||||
supportSelectionIcon: true))),
|
KeyboardUtils.hideKeyboard(context);
|
||||||
Padding(
|
controller.selectMailbox(context, index);
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 12),
|
},
|
||||||
child: Text(
|
tapRemoveCallback: (index) => controller.tapRemoveAction(index),
|
||||||
AppLocalizations.of(context).toFolder,
|
imagePaths: _imagePaths,
|
||||||
overflow: CommonTextStyle.defaultTextOverFlow,
|
errorForwardEmail: controller.errorForwardEmailValue.value,
|
||||||
softWrap: CommonTextStyle.defaultSoftWrap,
|
errorMailboxSelected: controller.errorMailboxSelectedValue.value,
|
||||||
maxLines: 1,
|
);
|
||||||
style: const TextStyle(
|
}),
|
||||||
fontWeight: FontWeight.normal,
|
Obx(() {
|
||||||
fontSize: 16,
|
if (controller.isShowAddAction.value == true) {
|
||||||
color: Colors.black)),
|
return Container(
|
||||||
),
|
padding: const EdgeInsets.only(top: 8),
|
||||||
Expanded(child: Obx(() =>
|
child: InkWell(
|
||||||
RuleFilterButtonField<PresentationMailbox>(
|
onTap: controller.tapAddAction,
|
||||||
value: controller.mailboxSelected.value,
|
child: Row(
|
||||||
borderColor: _getBorderColorMailboxSelected(),
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
tapActionCallback: (value) {
|
children: [
|
||||||
KeyboardUtils.hideKeyboard(context);
|
SvgPicture.asset(
|
||||||
controller.selectMailbox(context);
|
_imagePaths.icAddNewFolder,
|
||||||
}))),
|
fit: BoxFit.fill,
|
||||||
])
|
),
|
||||||
),
|
const SizedBox(width: 15,),
|
||||||
|
Text(
|
||||||
|
AppLocalizations.of(context).addAction,
|
||||||
|
maxLines: RuleFilterActionStyles.maxLines,
|
||||||
|
style: RuleFilterActionStyles.addActionButtonTextStyle
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
return const SizedBox.shrink();
|
||||||
|
}
|
||||||
|
})
|
||||||
]
|
]
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@@ -330,41 +341,53 @@ class RuleFilterCreatorView extends GetWidget<RulesFilterCreatorController> {
|
|||||||
fontSize: 16,
|
fontSize: 16,
|
||||||
color: Colors.black)),
|
color: Colors.black)),
|
||||||
const SizedBox(height: 24),
|
const SizedBox(height: 24),
|
||||||
Container(
|
Obx(() {
|
||||||
padding: const EdgeInsets.all(12),
|
return RuleFilterActionListWidget(
|
||||||
decoration: BoxDecoration(
|
responsiveUtils: _responsiveUtils,
|
||||||
color: AppColor.colorBackgroundFieldConditionRulesFilter,
|
actionList: controller.listEmailRuleFilterActionSelected,
|
||||||
borderRadius: BorderRadius.circular(12)),
|
onActionChanged: (newAction, index) {
|
||||||
child: Row(children: [
|
controller.selectEmailRuleFilterAction(newAction, index);
|
||||||
Expanded(child: Obx(() => DropDownButtonWidget<EmailRuleFilterAction>(
|
},
|
||||||
items: EmailRuleFilterAction.values,
|
forwardEmailEditingController: controller.forwardEmailController,
|
||||||
itemSelected: controller.emailRuleFilterActionSelected.value,
|
forwardEmailFocusNode: controller.forwardEmailFocusNode,
|
||||||
onChanged: (newAction) =>
|
onChangeForwardEmail: (value, index) => controller.updateForwardEmailValue(context, value, index),
|
||||||
controller.selectEmailRuleFilterAction(newAction),
|
tapActionDetailedCallback: (index) {
|
||||||
supportSelectionIcon: true))),
|
KeyboardUtils.hideKeyboard(context);
|
||||||
Container(
|
controller.selectMailbox(context, index);
|
||||||
alignment: Alignment.centerLeft,
|
},
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 12),
|
tapRemoveCallback: (index) => controller.tapRemoveAction(index),
|
||||||
child: Text(
|
imagePaths: _imagePaths,
|
||||||
AppLocalizations.of(context).toFolder,
|
errorForwardEmail: controller.errorForwardEmailValue.value,
|
||||||
overflow: CommonTextStyle.defaultTextOverFlow,
|
errorMailboxSelected: controller.errorMailboxSelectedValue.value,
|
||||||
softWrap: CommonTextStyle.defaultSoftWrap,
|
);
|
||||||
maxLines: 1,
|
}),
|
||||||
style: const TextStyle(
|
Obx(() {
|
||||||
fontWeight: FontWeight.normal,
|
if (controller.isShowAddAction.value == true) {
|
||||||
fontSize: 16,
|
return Container(
|
||||||
color: Colors.black)),
|
padding: const EdgeInsets.only(top: 8),
|
||||||
|
child: InkWell(
|
||||||
|
onTap: controller.tapAddAction,
|
||||||
|
child: Row(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
|
children: [
|
||||||
|
SvgPicture.asset(
|
||||||
|
_imagePaths.icAddNewFolder,
|
||||||
|
fit: BoxFit.fill,
|
||||||
|
),
|
||||||
|
const SizedBox(width: 15,),
|
||||||
|
Text(
|
||||||
|
AppLocalizations.of(context).addAction,
|
||||||
|
maxLines: RuleFilterActionStyles.maxLines,
|
||||||
|
style: RuleFilterActionStyles.addActionButtonTextStyle
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
),
|
),
|
||||||
Expanded(child: Obx(() =>
|
);
|
||||||
RuleFilterButtonField<PresentationMailbox>(
|
} else {
|
||||||
value: controller.mailboxSelected.value,
|
return const SizedBox.shrink();
|
||||||
borderColor: _getBorderColorMailboxSelected(),
|
}
|
||||||
tapActionCallback: (value) {
|
})
|
||||||
KeyboardUtils.hideKeyboard(context);
|
|
||||||
controller.selectMailbox(context);
|
|
||||||
}))),
|
|
||||||
])
|
|
||||||
),
|
|
||||||
]
|
]
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@@ -498,47 +521,62 @@ class RuleFilterCreatorView extends GetWidget<RulesFilterCreatorController> {
|
|||||||
fontSize: 16,
|
fontSize: 16,
|
||||||
color: Colors.black)),
|
color: Colors.black)),
|
||||||
const SizedBox(height: 24),
|
const SizedBox(height: 24),
|
||||||
Container(
|
Obx(() {
|
||||||
padding: const EdgeInsets.all(12),
|
return RuleFilterActionListWidget(
|
||||||
decoration: BoxDecoration(
|
responsiveUtils: _responsiveUtils,
|
||||||
color: AppColor.colorBackgroundFieldConditionRulesFilter,
|
actionList: controller.listEmailRuleFilterActionSelected,
|
||||||
borderRadius: BorderRadius.circular(12)),
|
onActionChangeMobile: (currentAction, index) {
|
||||||
child: Column(children: [
|
KeyboardUtils.hideKeyboard(context);
|
||||||
Obx(() {
|
controller.openContextMenuAction(
|
||||||
return RuleFilterButtonField<EmailRuleFilterAction>(
|
context,
|
||||||
value: controller.emailRuleFilterActionSelected.value,
|
_bottomSheetActionRuleFilterActionTiles(
|
||||||
tapActionCallback: (value) {
|
context,
|
||||||
KeyboardUtils.hideKeyboard(context);
|
currentAction,
|
||||||
controller.openContextMenuAction(
|
index
|
||||||
context,
|
)
|
||||||
_bottomSheetActionRuleFilterActionTiles(
|
);
|
||||||
context,
|
},
|
||||||
controller.emailRuleFilterActionSelected.value));
|
forwardEmailEditingController: controller.forwardEmailController,
|
||||||
}
|
forwardEmailFocusNode: controller.forwardEmailFocusNode,
|
||||||
);
|
onChangeForwardEmail: (value, index) => controller.updateForwardEmailValue(context, value, index),
|
||||||
}),
|
tapActionDetailedCallback: (index) {
|
||||||
Container(
|
KeyboardUtils.hideKeyboard(context);
|
||||||
alignment: Alignment.centerLeft,
|
controller.selectMailbox(context, index);
|
||||||
padding: const EdgeInsets.symmetric(vertical: 12),
|
},
|
||||||
child: Text(
|
tapRemoveCallback: (index) => controller.tapRemoveAction(index),
|
||||||
AppLocalizations.of(context).toFolder,
|
imagePaths: _imagePaths,
|
||||||
overflow: CommonTextStyle.defaultTextOverFlow,
|
errorForwardEmail: controller.errorForwardEmailValue.value,
|
||||||
softWrap: CommonTextStyle.defaultSoftWrap,
|
errorMailboxSelected: controller.errorMailboxSelectedValue.value,
|
||||||
maxLines: 1,
|
);
|
||||||
style: const TextStyle(
|
}),
|
||||||
fontWeight: FontWeight.normal,
|
Obx(() {
|
||||||
fontSize: 16,
|
if (controller.isShowAddAction.value == true) {
|
||||||
color: Colors.black)),
|
return Container(
|
||||||
|
padding: const EdgeInsets.only(top: 12),
|
||||||
|
child: InkWell(
|
||||||
|
onTap: controller.tapAddAction,
|
||||||
|
child: Row(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
|
children: [
|
||||||
|
SvgPicture.asset(
|
||||||
|
_imagePaths.icAddNewFolder,
|
||||||
|
fit: BoxFit.fill,
|
||||||
|
),
|
||||||
|
const SizedBox(width: 15,),
|
||||||
|
Text(
|
||||||
|
AppLocalizations.of(context).addAction,
|
||||||
|
maxLines: RuleFilterActionStyles.maxLines,
|
||||||
|
style: RuleFilterActionStyles.addActionButtonTextStyle
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
),
|
),
|
||||||
Obx(() => RuleFilterButtonField<PresentationMailbox>(
|
);
|
||||||
value: controller.mailboxSelected.value,
|
} else {
|
||||||
borderColor: _getBorderColorMailboxSelected(),
|
return const SizedBox.shrink();
|
||||||
tapActionCallback: (value) {
|
}
|
||||||
KeyboardUtils.hideKeyboard(context);
|
})
|
||||||
controller.selectMailbox(context);
|
|
||||||
}))
|
|
||||||
])
|
|
||||||
),
|
|
||||||
]
|
]
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@@ -745,18 +783,23 @@ class RuleFilterCreatorView extends GetWidget<RulesFilterCreatorController> {
|
|||||||
|
|
||||||
List<Widget> _bottomSheetActionRuleFilterActionTiles(
|
List<Widget> _bottomSheetActionRuleFilterActionTiles(
|
||||||
BuildContext context,
|
BuildContext context,
|
||||||
EmailRuleFilterAction? ruleActionSelected
|
EmailRuleFilterAction? ruleActionSelected,
|
||||||
|
int ruleActionIndex,
|
||||||
) {
|
) {
|
||||||
return EmailRuleFilterAction.values
|
final supportedAction = EmailRuleFilterAction.values
|
||||||
|
.where((ruleAction) => ruleAction.getSupported() == true)
|
||||||
|
.toList();
|
||||||
|
return supportedAction
|
||||||
.map((ruleAction) =>
|
.map((ruleAction) =>
|
||||||
_buildRuleActionWidget(context, ruleAction, ruleActionSelected))
|
_buildRuleActionWidget(context, ruleAction, ruleActionSelected, ruleActionIndex))
|
||||||
.toList();
|
.toList();
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _buildRuleActionWidget(
|
Widget _buildRuleActionWidget(
|
||||||
BuildContext context,
|
BuildContext context,
|
||||||
EmailRuleFilterAction ruleAction,
|
EmailRuleFilterAction ruleAction,
|
||||||
EmailRuleFilterAction? ruleActionSelected
|
EmailRuleFilterAction? ruleActionSelected,
|
||||||
|
int ruleActionIndex,
|
||||||
) {
|
) {
|
||||||
return (RuleActionSheetActionTileBuilder(
|
return (RuleActionSheetActionTileBuilder(
|
||||||
ruleAction.getTitle(context),
|
ruleAction.getTitle(context),
|
||||||
@@ -770,17 +813,11 @@ class RuleFilterCreatorView extends GetWidget<RulesFilterCreatorController> {
|
|||||||
height: 20,
|
height: 20,
|
||||||
fit: BoxFit.fill))
|
fit: BoxFit.fill))
|
||||||
..onActionClick((ruleAction) {
|
..onActionClick((ruleAction) {
|
||||||
controller.selectEmailRuleFilterAction(ruleAction);
|
if (ruleAction != controller.listEmailRuleFilterActionSelected[ruleActionIndex].action) {
|
||||||
|
controller.selectEmailRuleFilterAction(ruleAction, ruleActionIndex);
|
||||||
|
}
|
||||||
popBack();
|
popBack();
|
||||||
}))
|
}))
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
Color _getBorderColorMailboxSelected() {
|
|
||||||
if (controller.errorRuleActionValue.value?.isNotEmpty == true) {
|
|
||||||
return AppColor.colorInputBorderErrorVerifyName;
|
|
||||||
} else {
|
|
||||||
return AppColor.colorInputBorderCreateMailbox;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user