TF-2613 Handle display forward warning banner

Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
dab246
2024-02-29 11:39:40 +07:00
committed by Dat H. Pham
parent ba89f5a710
commit 33f32783aa
6 changed files with 96 additions and 1 deletions
@@ -8,15 +8,18 @@ import 'package:flutter_svg/flutter_svg.dart';
import 'package:forward/forward/tmail_forward.dart';
import 'package:get/get.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/mailbox/select_mode.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/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/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: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/get_forward_state.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) {
currentForward.value = success.forward;
listRecipientForward.value = currentForward.value!.listRecipientForward;
_updateForwardWarningBannerState();
} else if (success is DeleteRecipientInForwardingSuccess) {
_handleDeleteRecipientSuccess(success);
} else if (success is AddRecipientsInForwardingSuccess) {
@@ -157,6 +161,7 @@ class ForwardController extends BaseController {
currentForward.value = success.forward;
listRecipientForward.value = currentForward.value!.listRecipientForward;
selectionMode.value = SelectMode.INACTIVE;
_updateForwardWarningBannerState();
}
List<RecipientForward> get listRecipientForwardSelected =>
@@ -170,6 +175,16 @@ class ForwardController extends BaseController {
bool get isAllSelected =>
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) {
if (selectionMode.value == SelectMode.INACTIVE) {
selectionMode.value = SelectMode.ACTIVE;
@@ -260,6 +275,8 @@ class ForwardController extends BaseController {
listRecipientForward.value = currentForward.value!.listRecipientForward;
recipientController.clearAll();
_updateForwardWarningBannerState();
}
void handleEditLocalCopy() {
@@ -286,6 +303,8 @@ class ForwardController extends BaseController {
currentForward.value = success.forward;
listRecipientForward.value = currentForward.value!.listRecipientForward;
_updateForwardWarningBannerState();
}
void registerListenerWorker() {
@@ -311,4 +330,11 @@ class ForwardController extends BaseController {
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
)
)
),
]),
);
}
}