TF-3181 Display contact support button on mobile app

(cherry picked from commit 01d2a9b71d937930be6ae247996a3ee1e21a5dc0)
This commit is contained in:
dab246
2024-12-06 01:45:38 +07:00
committed by Dat H. Pham
parent 129d5f5fa8
commit 2da1e555bb
7 changed files with 133 additions and 32 deletions
@@ -40,6 +40,7 @@ class TMailButtonWidget extends StatelessWidget {
final MainAxisSize mainAxisSize; final MainAxisSize mainAxisSize;
final bool isLoading; final bool isLoading;
final Color? hoverColor; final Color? hoverColor;
final TextOverflow? textOverflow;
const TMailButtonWidget({ const TMailButtonWidget({
super.key, super.key,
@@ -74,6 +75,7 @@ class TMailButtonWidget extends StatelessWidget {
this.mainAxisSize = MainAxisSize.max, this.mainAxisSize = MainAxisSize.max,
this.isLoading = false, this.isLoading = false,
this.hoverColor, this.hoverColor,
this.textOverflow,
}); });
factory TMailButtonWidget.fromIcon({ factory TMailButtonWidget.fromIcon({
@@ -149,6 +151,7 @@ class TMailButtonWidget extends StatelessWidget {
BoxBorder? border, BoxBorder? border,
int? maxLines, int? maxLines,
Color? hoverColor, Color? hoverColor,
TextOverflow? textOverflow,
}) { }) {
return TMailButtonWidget( return TMailButtonWidget(
key: key, key: key,
@@ -172,6 +175,7 @@ class TMailButtonWidget extends StatelessWidget {
border: border, border: border,
maxLines: maxLines, maxLines: maxLines,
hoverColor: hoverColor, hoverColor: hoverColor,
textOverflow: textOverflow,
); );
} }
@@ -200,7 +204,7 @@ class TMailButtonWidget extends StatelessWidget {
color: AppColor.colorTextButtonHeaderThread color: AppColor.colorTextButtonHeaderThread
), ),
maxLines: maxLines, maxLines: maxLines,
overflow: maxLines == 1 ? CommonTextStyle.defaultTextOverFlow : null, overflow: textOverflow ?? (maxLines == 1 ? CommonTextStyle.defaultTextOverFlow : null),
softWrap: maxLines == 1 ? CommonTextStyle.defaultSoftWrap : null, softWrap: maxLines == 1 ? CommonTextStyle.defaultSoftWrap : null,
), ),
if (trailingIcon != null) if (trailingIcon != null)
@@ -240,7 +244,7 @@ class TMailButtonWidget extends StatelessWidget {
color: AppColor.colorTextButtonHeaderThread color: AppColor.colorTextButtonHeaderThread
), ),
maxLines: maxLines, maxLines: maxLines,
overflow: maxLines == 1 ? CommonTextStyle.defaultTextOverFlow : null, overflow: textOverflow ?? (maxLines == 1 ? CommonTextStyle.defaultTextOverFlow : null),
softWrap: maxLines == 1 ? CommonTextStyle.defaultSoftWrap : null, softWrap: maxLines == 1 ? CommonTextStyle.defaultSoftWrap : null,
), ),
) )
@@ -253,7 +257,7 @@ class TMailButtonWidget extends StatelessWidget {
color: AppColor.colorTextButtonHeaderThread color: AppColor.colorTextButtonHeaderThread
), ),
maxLines: maxLines, maxLines: maxLines,
overflow: maxLines == 1 ? CommonTextStyle.defaultTextOverFlow : null, overflow: textOverflow ?? (maxLines == 1 ? CommonTextStyle.defaultTextOverFlow : null),
softWrap: maxLines == 1 ? CommonTextStyle.defaultSoftWrap : null, softWrap: maxLines == 1 ? CommonTextStyle.defaultSoftWrap : null,
), ),
if (trailingIcon != null) if (trailingIcon != null)
@@ -284,7 +288,7 @@ class TMailButtonWidget extends StatelessWidget {
color: AppColor.colorTextButtonHeaderThread color: AppColor.colorTextButtonHeaderThread
), ),
maxLines: maxLines, maxLines: maxLines,
overflow: maxLines == 1 ? CommonTextStyle.defaultTextOverFlow : null, overflow: textOverflow ?? (maxLines == 1 ? CommonTextStyle.defaultTextOverFlow : null),
softWrap: maxLines == 1 ? CommonTextStyle.defaultSoftWrap : null, softWrap: maxLines == 1 ? CommonTextStyle.defaultSoftWrap : null,
), ),
) )
@@ -297,7 +301,7 @@ class TMailButtonWidget extends StatelessWidget {
color: AppColor.colorTextButtonHeaderThread color: AppColor.colorTextButtonHeaderThread
), ),
maxLines: maxLines, maxLines: maxLines,
overflow: maxLines == 1 ? CommonTextStyle.defaultTextOverFlow : null, overflow: textOverflow ?? (maxLines == 1 ? CommonTextStyle.defaultTextOverFlow : null),
softWrap: maxLines == 1 ? CommonTextStyle.defaultSoftWrap : null, softWrap: maxLines == 1 ? CommonTextStyle.defaultSoftWrap : null,
), ),
SizedBox(width: iconSpace), SizedBox(width: iconSpace),
@@ -339,7 +343,7 @@ class TMailButtonWidget extends StatelessWidget {
color: AppColor.colorTextButtonHeaderThread color: AppColor.colorTextButtonHeaderThread
), ),
maxLines: maxLines, maxLines: maxLines,
overflow: maxLines == 1 ? CommonTextStyle.defaultTextOverFlow : null, overflow: textOverflow ?? (maxLines == 1 ? CommonTextStyle.defaultTextOverFlow : null),
softWrap: maxLines == 1 ? CommonTextStyle.defaultSoftWrap : null, softWrap: maxLines == 1 ? CommonTextStyle.defaultSoftWrap : null,
); );
} }
@@ -88,7 +88,7 @@ extension SessionExtensions on Session {
accountId, accountId,
linagoraContactSupportCapability, linagoraContactSupportCapability,
); );
log('SessionExtensions::getContactSupport:contactSupportCapability = $contactSupportCapability'); log('SessionExtensions::getContactSupportCapability:contactSupportCapability = $contactSupportCapability');
return contactSupportCapability; return contactSupportCapability;
} catch (e) { } catch (e) {
logError('SessionExtensions::getContactSupportCapability():[Exception] $e'); logError('SessionExtensions::getContactSupportCapability():[Exception] $e');
@@ -21,6 +21,7 @@ import 'package:tmail_ui_user/features/base/mixin/mailbox_action_handler_mixin.d
import 'package:tmail_ui_user/features/email/domain/model/move_action.dart'; import 'package:tmail_ui_user/features/email/domain/model/move_action.dart';
import 'package:tmail_ui_user/features/email/presentation/model/composer_arguments.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/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/constants/mailbox_constants.dart';
import 'package:tmail_ui_user/features/mailbox/domain/exceptions/set_mailbox_name_exception.dart'; import 'package:tmail_ui_user/features/mailbox/domain/exceptions/set_mailbox_name_exception.dart';
import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_request.dart'; import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_request.dart';
@@ -1361,4 +1362,13 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
mailboxDashBoardController.emptySpamFolderAction(spamFolderId: presentationMailbox.id); mailboxDashBoardController.emptySpamFolderAction(spamFolderId: presentationMailbox.id);
} }
} }
ContactSupportCapability? get contactSupportCapability {
final accountId = mailboxDashBoardController.accountId.value;
final session = mailboxDashBoardController.sessionCurrent;
if (accountId == null || session == null) return null;
return session.getContactSupportCapability(accountId);
}
} }
@@ -80,10 +80,52 @@ class MailboxView extends BaseMailboxView {
}), }),
]), ]),
), ),
Obx(() => !controller.isSelectionEnabled() Obx(() {
? const QuotasView() if (controller.isSelectionEnabled()) {
: const SizedBox.shrink(), return const SizedBox.shrink();
), }
return Column(
mainAxisSize: MainAxisSize.min,
children: [
const Divider(color: AppColor.colorDividerHorizontal),
if (controller.contactSupportCapability == null)
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: () {},
),
),
],
),
],
);
}),
Obx(() { Obx(() {
if (!controller.isSelectionEnabled() && controller.responsiveUtils.isPortraitMobile(context)) { if (!controller.isSelectionEnabled() && controller.responsiveUtils.isPortraitMobile(context)) {
return Container( return Container(
@@ -58,12 +58,54 @@ class MailboxView extends BaseMailboxView {
child: _buildListMailbox(context), child: _buildListMailbox(context),
), ),
)), )),
const QuotasView( const Divider(color: AppColor.colorDividerHorizontal),
padding: EdgeInsetsDirectional.only( if (controller.responsiveUtils.isWebDesktop(context) ||
start: QuotasViewStyles.padding, controller.contactSupportCapability == null)
top: QuotasViewStyles.padding, 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: () {},
),
),
],
), ),
),
Container( Container(
color: AppColor.colorBgMailbox, color: AppColor.colorBgMailbox,
width: double.infinity, width: double.infinity,
@@ -130,14 +172,21 @@ class MailboxView extends BaseMailboxView {
child: Row( child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
Expanded(child: Text( Expanded(
AppLocalizations.of(context).folders, child: Padding(
style: const TextStyle( padding: EdgeInsetsDirectional.only(
fontSize: 17, start: controller.responsiveUtils.isWebDesktop(context) ? 0 : 12,
color: Colors.black, ),
fontWeight: FontWeight.bold child: Text(
) AppLocalizations.of(context).folders,
)), style: const TextStyle(
fontSize: 17,
color: Colors.black,
fontWeight: FontWeight.bold,
),
),
),
),
Padding( Padding(
padding: EdgeInsetsDirectional.only(end: controller.responsiveUtils.isDesktop(context) ? 0 : 12), padding: EdgeInsetsDirectional.only(end: controller.responsiveUtils.isDesktop(context) ? 0 : 12),
child: Row( child: Row(
@@ -5,7 +5,6 @@ import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:model/model.dart'; import 'package:model/model.dart';
import 'package:tmail_ui_user/features/base/state/banner_state.dart'; import 'package:tmail_ui_user/features/base/state/banner_state.dart';
import 'package:tmail_ui_user/features/home/domain/extensions/session_extensions.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/navigation_bar/navigation_bar_widget.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/navigation_bar/navigation_bar_widget.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/always_read_receipt/always_read_receipt_view.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/always_read_receipt/always_read_receipt_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/email_rules/email_rules_view.dart';
@@ -44,7 +43,6 @@ class ManageAccountDashBoardView extends GetWidget<ManageAccountDashBoardControl
return NavigationBarWidget( return NavigationBarWidget(
imagePaths: controller.imagePaths, imagePaths: controller.imagePaths,
avatarUserName: controller.sessionCurrent?.username.firstCharacter ?? '', avatarUserName: controller.sessionCurrent?.username.firstCharacter ?? '',
contactSupportCapability: controller.sessionCurrent?.getContactSupportCapability(accountId),
onTapApplicationLogoAction: () => controller.backToMailboxDashBoard(context: context), onTapApplicationLogoAction: () => controller.backToMailboxDashBoard(context: context),
onTapAvatarAction: (position) => controller.handleClickAvatarAction(context, position), onTapAvatarAction: (position) => controller.handleClickAvatarAction(context, position),
); );
@@ -31,12 +31,6 @@ class QuotasView extends GetWidget<QuotasController> {
color: controller.responsiveUtils.isWebDesktop(context) color: controller.responsiveUtils.isWebDesktop(context)
? QuotasViewStyles.webBackgroundColor ? QuotasViewStyles.webBackgroundColor
: QuotasViewStyles.mobileBackgroundColor, : QuotasViewStyles.mobileBackgroundColor,
border: const Border(
top: BorderSide(
color: QuotasViewStyles.topLineColor,
width: QuotasViewStyles.topLineSize,
)
),
), ),
alignment: AlignmentDirectional.centerStart, alignment: AlignmentDirectional.centerStart,
child: Column( child: Column(
@@ -59,6 +53,8 @@ class QuotasView extends GetWidget<QuotasController> {
fontWeight: QuotasViewStyles.labelFontWeight, fontWeight: QuotasViewStyles.labelFontWeight,
color: QuotasViewStyles.labelTextColor color: QuotasViewStyles.labelTextColor
), ),
maxLines: 1,
overflow: TextOverflow.ellipsis,
) )
], ],
), ),
@@ -80,6 +76,8 @@ class QuotasView extends GetWidget<QuotasController> {
fontWeight: QuotasViewStyles.progressStateFontWeight, fontWeight: QuotasViewStyles.progressStateFontWeight,
color: octetQuota.getQuotasStateTitleColor() color: octetQuota.getQuotasStateTitleColor()
), ),
maxLines: 2,
overflow: TextOverflow.ellipsis,
) )
], ],
), ),