TF-2613 Handle display forward warning banner
Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
@@ -0,0 +1,5 @@
|
|||||||
|
|
||||||
|
enum BannerState {
|
||||||
|
enabled,
|
||||||
|
disabled;
|
||||||
|
}
|
||||||
@@ -8,15 +8,18 @@ import 'package:flutter_svg/flutter_svg.dart';
|
|||||||
import 'package:forward/forward/tmail_forward.dart';
|
import 'package:forward/forward/tmail_forward.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||||
|
import 'package:jmap_dart_client/jmap/mail/email/email_address.dart';
|
||||||
import 'package:model/extensions/email_address_extension.dart';
|
import 'package:model/extensions/email_address_extension.dart';
|
||||||
import 'package:model/mailbox/select_mode.dart';
|
import 'package:model/mailbox/select_mode.dart';
|
||||||
import 'package:tmail_ui_user/features/base/base_controller.dart';
|
import 'package:tmail_ui_user/features/base/base_controller.dart';
|
||||||
|
import 'package:tmail_ui_user/features/base/state/banner_state.dart';
|
||||||
|
import 'package:tmail_ui_user/features/email/presentation/utils/email_utils.dart';
|
||||||
|
import 'package:tmail_ui_user/features/home/domain/extensions/session_extensions.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/domain/model/add_recipients_in_forwarding_request.dart';
|
import 'package:tmail_ui_user/features/manage_account/domain/model/add_recipients_in_forwarding_request.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/domain/model/delete_recipient_in_forwarding_request.dart';
|
import 'package:tmail_ui_user/features/manage_account/domain/model/delete_recipient_in_forwarding_request.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/domain/model/edit_local_copy_in_forwarding_request.dart';
|
import 'package:tmail_ui_user/features/manage_account/domain/model/edit_local_copy_in_forwarding_request.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/domain/state/add_recipient_in_forwarding_state.dart';
|
import 'package:tmail_ui_user/features/manage_account/domain/state/add_recipient_in_forwarding_state.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/domain/state/delete_recipient_in_forwarding_state.dart';
|
import 'package:tmail_ui_user/features/manage_account/domain/state/delete_recipient_in_forwarding_state.dart';
|
||||||
import 'package:jmap_dart_client/jmap/mail/email/email_address.dart';
|
|
||||||
import 'package:tmail_ui_user/features/manage_account/domain/state/edit_local_copy_in_forwarding_state.dart';
|
import 'package:tmail_ui_user/features/manage_account/domain/state/edit_local_copy_in_forwarding_state.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/domain/state/get_forward_state.dart';
|
import 'package:tmail_ui_user/features/manage_account/domain/state/get_forward_state.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/domain/usecases/add_recipients_in_forwarding_interactor.dart';
|
import 'package:tmail_ui_user/features/manage_account/domain/usecases/add_recipients_in_forwarding_interactor.dart';
|
||||||
@@ -86,6 +89,7 @@ class ForwardController extends BaseController {
|
|||||||
if (success is GetForwardSuccess) {
|
if (success is GetForwardSuccess) {
|
||||||
currentForward.value = success.forward;
|
currentForward.value = success.forward;
|
||||||
listRecipientForward.value = currentForward.value!.listRecipientForward;
|
listRecipientForward.value = currentForward.value!.listRecipientForward;
|
||||||
|
_updateForwardWarningBannerState();
|
||||||
} else if (success is DeleteRecipientInForwardingSuccess) {
|
} else if (success is DeleteRecipientInForwardingSuccess) {
|
||||||
_handleDeleteRecipientSuccess(success);
|
_handleDeleteRecipientSuccess(success);
|
||||||
} else if (success is AddRecipientsInForwardingSuccess) {
|
} else if (success is AddRecipientsInForwardingSuccess) {
|
||||||
@@ -157,6 +161,7 @@ class ForwardController extends BaseController {
|
|||||||
currentForward.value = success.forward;
|
currentForward.value = success.forward;
|
||||||
listRecipientForward.value = currentForward.value!.listRecipientForward;
|
listRecipientForward.value = currentForward.value!.listRecipientForward;
|
||||||
selectionMode.value = SelectMode.INACTIVE;
|
selectionMode.value = SelectMode.INACTIVE;
|
||||||
|
_updateForwardWarningBannerState();
|
||||||
}
|
}
|
||||||
|
|
||||||
List<RecipientForward> get listRecipientForwardSelected =>
|
List<RecipientForward> get listRecipientForwardSelected =>
|
||||||
@@ -170,6 +175,16 @@ class ForwardController extends BaseController {
|
|||||||
bool get isAllSelected =>
|
bool get isAllSelected =>
|
||||||
listRecipientForward.every((recipient) => recipient.selectMode == SelectMode.ACTIVE);
|
listRecipientForward.every((recipient) => recipient.selectMode == SelectMode.ACTIVE);
|
||||||
|
|
||||||
|
bool get _isExistRecipientSameServerDomain =>
|
||||||
|
listRecipientForward.any((recipient) {
|
||||||
|
final serverDomain = accountDashBoardController.sessionCurrent?.serverDomain ?? '';
|
||||||
|
final isSameDomain = EmailUtils.isSameDomain(
|
||||||
|
emailAddress: recipient.emailAddress.emailAddress,
|
||||||
|
serverDomain: serverDomain
|
||||||
|
);
|
||||||
|
return !isSameDomain;
|
||||||
|
});
|
||||||
|
|
||||||
void selectRecipientForward(RecipientForward recipientForward) {
|
void selectRecipientForward(RecipientForward recipientForward) {
|
||||||
if (selectionMode.value == SelectMode.INACTIVE) {
|
if (selectionMode.value == SelectMode.INACTIVE) {
|
||||||
selectionMode.value = SelectMode.ACTIVE;
|
selectionMode.value = SelectMode.ACTIVE;
|
||||||
@@ -260,6 +275,8 @@ class ForwardController extends BaseController {
|
|||||||
listRecipientForward.value = currentForward.value!.listRecipientForward;
|
listRecipientForward.value = currentForward.value!.listRecipientForward;
|
||||||
|
|
||||||
recipientController.clearAll();
|
recipientController.clearAll();
|
||||||
|
|
||||||
|
_updateForwardWarningBannerState();
|
||||||
}
|
}
|
||||||
|
|
||||||
void handleEditLocalCopy() {
|
void handleEditLocalCopy() {
|
||||||
@@ -286,6 +303,8 @@ class ForwardController extends BaseController {
|
|||||||
|
|
||||||
currentForward.value = success.forward;
|
currentForward.value = success.forward;
|
||||||
listRecipientForward.value = currentForward.value!.listRecipientForward;
|
listRecipientForward.value = currentForward.value!.listRecipientForward;
|
||||||
|
|
||||||
|
_updateForwardWarningBannerState();
|
||||||
}
|
}
|
||||||
|
|
||||||
void registerListenerWorker() {
|
void registerListenerWorker() {
|
||||||
@@ -311,4 +330,11 @@ class ForwardController extends BaseController {
|
|||||||
AppLocalizations.of(context).incorrectEmailFormat);
|
AppLocalizations.of(context).incorrectEmailFormat);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void _updateForwardWarningBannerState() {
|
||||||
|
accountDashBoardController.forwardWarningBannerState.value = _isExistRecipientSameServerDomain
|
||||||
|
? BannerState.enabled
|
||||||
|
: BannerState.disabled;
|
||||||
|
log('ForwardController::_updateForwardWarningBannerState: forwardWarningBannerState = ${accountDashBoardController.forwardWarningBannerState.value}');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
import 'package:core/presentation/extensions/color_extension.dart';
|
||||||
|
import 'package:core/presentation/resources/image_paths.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_svg/flutter_svg.dart';
|
||||||
|
import 'package:get/get.dart';
|
||||||
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
|
|
||||||
|
class ForwardWarningBanner extends StatelessWidget {
|
||||||
|
|
||||||
|
final ImagePaths _imagePaths = Get.find<ImagePaths>();
|
||||||
|
|
||||||
|
ForwardWarningBanner({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Container(
|
||||||
|
width: double.infinity,
|
||||||
|
margin: const EdgeInsetsDirectional.only(top: 16, start: 16, end: 16),
|
||||||
|
padding: const EdgeInsets.all(12),
|
||||||
|
decoration: const BoxDecoration(
|
||||||
|
borderRadius: BorderRadius.all(Radius.circular(8)),
|
||||||
|
color: AppColor.colorBackgroundNotificationVacationSetting,
|
||||||
|
),
|
||||||
|
child: Row(children: [
|
||||||
|
SvgPicture.asset(
|
||||||
|
_imagePaths.icInfoCircleOutline,
|
||||||
|
colorFilter: AppColor.colorQuotaError.asFilter(),
|
||||||
|
),
|
||||||
|
const SizedBox(width: 12),
|
||||||
|
Expanded(
|
||||||
|
child: Text(
|
||||||
|
AppLocalizations.of(context).messageWarningDialogForForwardsToOtherDomains,
|
||||||
|
style: Theme.of(context).textTheme.labelSmall?.copyWith(
|
||||||
|
fontSize: 15,
|
||||||
|
color: Colors.black
|
||||||
|
)
|
||||||
|
)
|
||||||
|
),
|
||||||
|
]),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -14,6 +14,7 @@ import 'package:package_info_plus/package_info_plus.dart';
|
|||||||
import 'package:rule_filter/rule_filter/capability_rule_filter.dart';
|
import 'package:rule_filter/rule_filter/capability_rule_filter.dart';
|
||||||
import 'package:tmail_ui_user/features/base/action/ui_action.dart';
|
import 'package:tmail_ui_user/features/base/action/ui_action.dart';
|
||||||
import 'package:tmail_ui_user/features/base/reloadable/reloadable_controller.dart';
|
import 'package:tmail_ui_user/features/base/reloadable/reloadable_controller.dart';
|
||||||
|
import 'package:tmail_ui_user/features/base/state/banner_state.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/get_user_profile_state.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/get_user_profile_state.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/domain/state/get_all_vacation_state.dart';
|
import 'package:tmail_ui_user/features/manage_account/domain/state/get_all_vacation_state.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/domain/state/update_vacation_state.dart';
|
import 'package:tmail_ui_user/features/manage_account/domain/state/update_vacation_state.dart';
|
||||||
@@ -48,6 +49,7 @@ class ManageAccountDashBoardController extends ReloadableController {
|
|||||||
final accountMenuItemSelected = AccountMenuItem.profiles.obs;
|
final accountMenuItemSelected = AccountMenuItem.profiles.obs;
|
||||||
final settingsPageLevel = SettingsPageLevel.universal.obs;
|
final settingsPageLevel = SettingsPageLevel.universal.obs;
|
||||||
final vacationResponse = Rxn<VacationResponse>();
|
final vacationResponse = Rxn<VacationResponse>();
|
||||||
|
final forwardWarningBannerState = Rxn<BannerState>();
|
||||||
final dashboardSettingAction = Rxn<UIAction>();
|
final dashboardSettingAction = Rxn<UIAction>();
|
||||||
|
|
||||||
Session? sessionCurrent;
|
Session? sessionCurrent;
|
||||||
|
|||||||
@@ -7,10 +7,12 @@ import 'package:core/presentation/views/text/slogan_builder.dart';
|
|||||||
import 'package:core/utils/platform_info.dart';
|
import 'package:core/utils/platform_info.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
|
import 'package:tmail_ui_user/features/base/state/banner_state.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/mixin/user_setting_popup_menu_mixin.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/mixin/user_setting_popup_menu_mixin.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/email_rules/email_rules_view.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/email_rules/email_rules_view.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/vacation_response_extension.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/vacation_response_extension.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/forward/forward_view.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/forward/forward_view.dart';
|
||||||
|
import 'package:tmail_ui_user/features/manage_account/presentation/forward/widgets/forward_warning_banner.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/language_and_region/language_and_region_view.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/language_and_region/language_and_region_view.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/mailbox_visibility/mailbox_visibility_view.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/mailbox_visibility/mailbox_visibility_view.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/manage_account_dashboard_controller.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/manage_account_dashboard_controller.dart';
|
||||||
@@ -111,6 +113,14 @@ class ManageAccountDashBoardView extends GetWidget<ManageAccountDashBoardControl
|
|||||||
return const SizedBox.shrink();
|
return const SizedBox.shrink();
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
|
Obx(() {
|
||||||
|
if (controller.forwardWarningBannerState.value == BannerState.enabled &&
|
||||||
|
controller.accountMenuItemSelected.value == AccountMenuItem.forward) {
|
||||||
|
return ForwardWarningBanner();
|
||||||
|
} else {
|
||||||
|
return const SizedBox.shrink();
|
||||||
|
}
|
||||||
|
}),
|
||||||
Expanded(child: _viewDisplayedOfAccountMenuItem())
|
Expanded(child: _viewDisplayedOfAccountMenuItem())
|
||||||
]),
|
]),
|
||||||
))
|
))
|
||||||
|
|||||||
@@ -6,9 +6,11 @@ import 'package:core/utils/platform_info.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:tmail_ui_user/features/base/state/banner_state.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/email_rules/email_rules_view.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/email_rules/email_rules_view.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/vacation_response_extension.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/vacation_response_extension.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/forward/forward_view.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/forward/forward_view.dart';
|
||||||
|
import 'package:tmail_ui_user/features/manage_account/presentation/forward/widgets/forward_warning_banner.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/language_and_region/language_and_region_view.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/language_and_region/language_and_region_view.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/mailbox_visibility/mailbox_visibility_view.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/mailbox_visibility/mailbox_visibility_view.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/menu/settings/settings_controller.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/menu/settings/settings_controller.dart';
|
||||||
@@ -75,6 +77,14 @@ class SettingsView extends GetWidget<SettingsController> {
|
|||||||
return const SizedBox.shrink();
|
return const SizedBox.shrink();
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
|
Obx(() {
|
||||||
|
if (controller.manageAccountDashboardController.forwardWarningBannerState.value == BannerState.enabled &&
|
||||||
|
controller.manageAccountDashboardController.accountMenuItemSelected.value == AccountMenuItem.forward) {
|
||||||
|
return ForwardWarningBanner();
|
||||||
|
} else {
|
||||||
|
return const SizedBox.shrink();
|
||||||
|
}
|
||||||
|
}),
|
||||||
Expanded(child: _bodySettingsScreen())
|
Expanded(child: _bodySettingsScreen())
|
||||||
]
|
]
|
||||||
),
|
),
|
||||||
|
|||||||
Reference in New Issue
Block a user