diff --git a/lib/features/mailbox/presentation/mailbox_controller.dart b/lib/features/mailbox/presentation/mailbox_controller.dart index 80866908d..abbfc995e 100644 --- a/lib/features/mailbox/presentation/mailbox_controller.dart +++ b/lib/features/mailbox/presentation/mailbox_controller.dart @@ -30,7 +30,6 @@ import 'package:tmail_ui_user/features/email/domain/state/mark_as_email_read_sta import 'package:tmail_ui_user/features/email/domain/state/move_to_mailbox_state.dart'; import 'package:tmail_ui_user/features/email/presentation/model/composer_arguments.dart'; import 'package:tmail_ui_user/features/home/data/exceptions/session_exceptions.dart'; -import 'package:tmail_ui_user/features/home/domain/extensions/session_extensions.dart'; import 'package:tmail_ui_user/features/mailbox/domain/constants/mailbox_constants.dart'; import 'package:tmail_ui_user/features/mailbox/domain/exceptions/empty_folder_name_exception.dart'; import 'package:tmail_ui_user/features/mailbox/domain/exceptions/invalid_mail_format_exception.dart'; @@ -1656,15 +1655,6 @@ class MailboxController extends BaseMailboxController } } - ContactSupportCapability? get contactSupportCapability { - final accountId = mailboxDashBoardController.accountId.value; - final session = mailboxDashBoardController.sessionCurrent; - - if (accountId == null || session == null) return null; - - return session.getContactSupportCapability(accountId); - } - void openConfirmationDialogSubaddressingAction( BuildContext context, ResponsiveUtils responsiveUtils, diff --git a/lib/features/mailbox/presentation/mailbox_view.dart b/lib/features/mailbox/presentation/mailbox_view.dart index 2f6832f4e..43c4e65a8 100644 --- a/lib/features/mailbox/presentation/mailbox_view.dart +++ b/lib/features/mailbox/presentation/mailbox_view.dart @@ -85,47 +85,11 @@ class MailboxView extends BaseMailboxView { return const SizedBox.shrink(); } - return Column( + return const Column( mainAxisSize: MainAxisSize.min, children: [ - const Divider(color: AppColor.colorDividerHorizontal), - if (controller.contactSupportCapability?.isAvailable != true) - const QuotasView() - else - Row( - children: [ - const Expanded(child: QuotasView()), - Expanded( - child: TMailButtonWidget( - text: AppLocalizations.of(context).getHelpOrReportABug, - icon: controller.imagePaths.icHelp, - verticalDirection: true, - backgroundColor: Colors.transparent, - maxLines: 2, - flexibleText: true, - mainAxisSize: MainAxisSize.min, - margin: const EdgeInsetsDirectional.only( - end: 12, - start: 4, - top: 6, - bottom: 6, - ), - borderRadius: 10, - textOverflow: TextOverflow.ellipsis, - textAlign: TextAlign.center, - textStyle: Theme.of(context).textTheme.bodyMedium?.copyWith( - fontSize: 13, - fontWeight: FontWeight.w500, - color: AppColor.primaryColor, - ), - onTapActionCallback: () => - controller.onGetHelpOrReportBug( - controller.contactSupportCapability!, - ), - ), - ), - ], - ), + Divider(color: AppColor.colorDividerHorizontal), + QuotasView(isDisplayedContactSupport: true) ], ); }), diff --git a/lib/features/mailbox/presentation/mailbox_view_web.dart b/lib/features/mailbox/presentation/mailbox_view_web.dart index f6fb1cb5c..c8314510b 100644 --- a/lib/features/mailbox/presentation/mailbox_view_web.dart +++ b/lib/features/mailbox/presentation/mailbox_view_web.dart @@ -60,56 +60,13 @@ class MailboxView extends BaseMailboxView { ), )), const Divider(color: AppColor.colorDividerHorizontal), - if (controller.responsiveUtils.isWebDesktop(context) || - controller.contactSupportCapability?.isAvailable != true) - const QuotasView( - padding: EdgeInsetsDirectional.only( - start: QuotasViewStyles.padding, - top: QuotasViewStyles.padding, - ), - ) - else - Row( - children: [ - const Expanded( - child: QuotasView( - padding: EdgeInsetsDirectional.only( - start: QuotasViewStyles.padding, - top: QuotasViewStyles.padding, - ), - ), - ), - Expanded( - child: TMailButtonWidget( - text: AppLocalizations.of(context).getHelpOrReportABug, - icon: controller.imagePaths.icHelp, - verticalDirection: true, - backgroundColor: Colors.transparent, - maxLines: 2, - flexibleText: true, - mainAxisSize: MainAxisSize.min, - margin: const EdgeInsetsDirectional.only( - end: 12, - start: 4, - top: 6, - bottom: 6, - ), - borderRadius: 10, - textOverflow: TextOverflow.ellipsis, - textAlign: TextAlign.center, - textStyle: Theme.of(context).textTheme.bodyMedium?.copyWith( - fontSize: 13, - fontWeight: FontWeight.w500, - color: AppColor.primaryColor, - ), - onTapActionCallback: () => - controller.onGetHelpOrReportBug( - controller.contactSupportCapability!, - ), - ), - ), - ], + QuotasView( + padding: const EdgeInsetsDirectional.only( + start: QuotasViewStyles.padding, + top: QuotasViewStyles.padding, ), + isDisplayedContactSupport: true, + ), Container( width: double.infinity, alignment: controller.responsiveUtils.isDesktop(context) diff --git a/lib/features/mailbox_dashboard/presentation/extensions/handle_contact_support_capability.dart b/lib/features/mailbox_dashboard/presentation/extensions/handle_contact_support_capability.dart new file mode 100644 index 000000000..5081eebde --- /dev/null +++ b/lib/features/mailbox_dashboard/presentation/extensions/handle_contact_support_capability.dart @@ -0,0 +1,15 @@ + +import 'package:model/support/contact_support_capability.dart'; +import 'package:tmail_ui_user/features/home/domain/extensions/session_extensions.dart'; +import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart'; + +extension ContactSupportCapabilityExtension on MailboxDashBoardController { + ContactSupportCapability? get contactSupportCapability { + final accountId = this.accountId.value; + final session = sessionCurrent; + + if (accountId == null || session == null) return null; + + return session.getContactSupportCapability(accountId); + } +} \ No newline at end of file diff --git a/lib/features/mailbox_dashboard/presentation/widgets/navigation_bar/navigation_bar_widget.dart b/lib/features/mailbox_dashboard/presentation/widgets/navigation_bar/navigation_bar_widget.dart index 008c29528..112ac71b2 100644 --- a/lib/features/mailbox_dashboard/presentation/widgets/navigation_bar/navigation_bar_widget.dart +++ b/lib/features/mailbox_dashboard/presentation/widgets/navigation_bar/navigation_bar_widget.dart @@ -109,7 +109,7 @@ class NavigationBarWidget extends StatelessWidget { else ...[ const Spacer(), - if (contactSupportCapability != null) + if (contactSupportCapability?.isAvailable == true) TMailButtonWidget.fromIcon( icon: imagePaths.icHelp, iconColor: AppColor.messageDialogColor, diff --git a/lib/features/quotas/presentation/quotas_view.dart b/lib/features/quotas/presentation/quotas_view.dart index 37e18dc9d..b9c4b57dd 100644 --- a/lib/features/quotas/presentation/quotas_view.dart +++ b/lib/features/quotas/presentation/quotas_view.dart @@ -1,7 +1,9 @@ import 'package:core/presentation/extensions/color_extension.dart'; +import 'package:core/presentation/views/button/tmail_button_widget.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:get/get.dart'; +import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/handle_contact_support_capability.dart'; import 'package:tmail_ui_user/features/quotas/domain/extensions/quota_extensions.dart'; import 'package:tmail_ui_user/features/quotas/domain/state/get_quotas_state.dart'; import 'package:tmail_ui_user/features/quotas/presentation/quotas_controller.dart'; @@ -12,28 +14,36 @@ import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; class QuotasView extends GetWidget { final EdgeInsetsGeometry? padding; + final bool? isDisplayedContactSupport; - const QuotasView({Key? key, this.padding}) : super(key: key); + const QuotasView({ + super.key, + this.padding, + this.isDisplayedContactSupport, + }); @override Widget build(BuildContext context) { return Obx(() { - if (controller.octetsQuota.value != null && controller.octetsQuota.value!.storageAvailable) { - final octetQuota = controller.octetsQuota.value!; - return LayoutBuilder(builder: (context, constraints) { + final octetQuota = controller.octetsQuota.value; + + Widget? quotaWidget; + + if (octetQuota != null && octetQuota.storageAvailable) { + quotaWidget = LayoutBuilder(builder: (context, constraints) { return Container( padding: padding ?? const EdgeInsetsDirectional.only( start: QuotasViewStyles.padding, top: QuotasViewStyles.padding, - bottom: QuotasViewStyles.bottomPadding + bottom: QuotasViewStyles.bottomPadding, ), margin: controller.responsiveUtils.isWebDesktop(context) - ? const EdgeInsetsDirectional.only(end: QuotasViewStyles.margin) - : null, + ? const EdgeInsetsDirectional.only(end: QuotasViewStyles.margin) + : null, decoration: BoxDecoration( color: controller.responsiveUtils.isWebDesktop(context) - ? QuotasViewStyles.webBackgroundColor - : QuotasViewStyles.mobileBackgroundColor, + ? QuotasViewStyles.webBackgroundColor + : QuotasViewStyles.mobileBackgroundColor, ), alignment: AlignmentDirectional.centerStart, child: Column( @@ -56,7 +66,7 @@ class QuotasView extends GetWidget { style: const TextStyle( fontSize: QuotasViewStyles.labelTextSize, fontWeight: QuotasViewStyles.labelFontWeight, - color: QuotasViewStyles.labelTextColor + color: QuotasViewStyles.labelTextColor, ), maxLines: 2, overflow: TextOverflow.ellipsis, @@ -65,8 +75,8 @@ class QuotasView extends GetWidget { const SizedBox(width: QuotasViewStyles.iconPadding), Obx(() { final isLoading = controller.viewState.value.fold( - (failure) => false, - (success) => success is GetQuotasLoading, + (failure) => false, + (success) => success is GetQuotasLoading, ); return QuotaReloadButton( @@ -93,7 +103,7 @@ class QuotasView extends GetWidget { style: TextStyle( fontSize: QuotasViewStyles.progressStateTextSize, fontWeight: QuotasViewStyles.progressStateFontWeight, - color: octetQuota.getQuotasStateTitleColor() + color: octetQuota.getQuotasStateTitleColor(), ), maxLines: 2, overflow: TextOverflow.ellipsis, @@ -102,6 +112,69 @@ class QuotasView extends GetWidget { ), ); }); + } + + if (isDisplayedContactSupport == true) { + final contactSupportCapability = controller + .mailboxDashBoardController + .contactSupportCapability; + + if (contactSupportCapability != null && contactSupportCapability.isAvailable) { + final contactSupportWidget = TMailButtonWidget( + text: AppLocalizations.of(context).getHelpOrReportABug, + icon: controller.imagePaths.icHelp, + verticalDirection: true, + backgroundColor: Colors.transparent, + maxLines: 2, + flexibleText: true, + mainAxisSize: MainAxisSize.min, + margin: const EdgeInsetsDirectional.only( + end: 12, + start: 4, + top: 6, + bottom: 6, + ), + borderRadius: 10, + textOverflow: TextOverflow.ellipsis, + textAlign: TextAlign.center, + textStyle: Theme.of(context).textTheme.bodyMedium?.copyWith( + fontSize: 13, + fontWeight: FontWeight.w500, + color: AppColor.primaryColor, + ), + onTapActionCallback: () => + controller.mailboxDashBoardController.onGetHelpOrReportBug( + contactSupportCapability, + ), + ); + + if (quotaWidget != null) { + return ColoredBox( + color: controller.responsiveUtils.isDesktop(context) + ? AppColor.colorBgDesktop + : Colors.white, + child: Row( + children: [ + Expanded(child: quotaWidget), + Expanded(child: contactSupportWidget), + ], + ), + ); + } else { + return Container( + color: controller.responsiveUtils.isDesktop(context) + ? AppColor.colorBgDesktop + : Colors.white, + width: double.infinity, + alignment: Alignment.center, + child: contactSupportWidget, + ); + } + } + } + + if (quotaWidget != null) { + return quotaWidget; } else { return const SizedBox.shrink(); }