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 bool isLoading;
final Color? hoverColor;
final TextOverflow? textOverflow;
const TMailButtonWidget({
super.key,
@@ -74,6 +75,7 @@ class TMailButtonWidget extends StatelessWidget {
this.mainAxisSize = MainAxisSize.max,
this.isLoading = false,
this.hoverColor,
this.textOverflow,
});
factory TMailButtonWidget.fromIcon({
@@ -149,6 +151,7 @@ class TMailButtonWidget extends StatelessWidget {
BoxBorder? border,
int? maxLines,
Color? hoverColor,
TextOverflow? textOverflow,
}) {
return TMailButtonWidget(
key: key,
@@ -172,6 +175,7 @@ class TMailButtonWidget extends StatelessWidget {
border: border,
maxLines: maxLines,
hoverColor: hoverColor,
textOverflow: textOverflow,
);
}
@@ -200,7 +204,7 @@ class TMailButtonWidget extends StatelessWidget {
color: AppColor.colorTextButtonHeaderThread
),
maxLines: maxLines,
overflow: maxLines == 1 ? CommonTextStyle.defaultTextOverFlow : null,
overflow: textOverflow ?? (maxLines == 1 ? CommonTextStyle.defaultTextOverFlow : null),
softWrap: maxLines == 1 ? CommonTextStyle.defaultSoftWrap : null,
),
if (trailingIcon != null)
@@ -240,7 +244,7 @@ class TMailButtonWidget extends StatelessWidget {
color: AppColor.colorTextButtonHeaderThread
),
maxLines: maxLines,
overflow: maxLines == 1 ? CommonTextStyle.defaultTextOverFlow : null,
overflow: textOverflow ?? (maxLines == 1 ? CommonTextStyle.defaultTextOverFlow : null),
softWrap: maxLines == 1 ? CommonTextStyle.defaultSoftWrap : null,
),
)
@@ -253,7 +257,7 @@ class TMailButtonWidget extends StatelessWidget {
color: AppColor.colorTextButtonHeaderThread
),
maxLines: maxLines,
overflow: maxLines == 1 ? CommonTextStyle.defaultTextOverFlow : null,
overflow: textOverflow ?? (maxLines == 1 ? CommonTextStyle.defaultTextOverFlow : null),
softWrap: maxLines == 1 ? CommonTextStyle.defaultSoftWrap : null,
),
if (trailingIcon != null)
@@ -284,7 +288,7 @@ class TMailButtonWidget extends StatelessWidget {
color: AppColor.colorTextButtonHeaderThread
),
maxLines: maxLines,
overflow: maxLines == 1 ? CommonTextStyle.defaultTextOverFlow : null,
overflow: textOverflow ?? (maxLines == 1 ? CommonTextStyle.defaultTextOverFlow : null),
softWrap: maxLines == 1 ? CommonTextStyle.defaultSoftWrap : null,
),
)
@@ -297,7 +301,7 @@ class TMailButtonWidget extends StatelessWidget {
color: AppColor.colorTextButtonHeaderThread
),
maxLines: maxLines,
overflow: maxLines == 1 ? CommonTextStyle.defaultTextOverFlow : null,
overflow: textOverflow ?? (maxLines == 1 ? CommonTextStyle.defaultTextOverFlow : null),
softWrap: maxLines == 1 ? CommonTextStyle.defaultSoftWrap : null,
),
SizedBox(width: iconSpace),
@@ -339,7 +343,7 @@ class TMailButtonWidget extends StatelessWidget {
color: AppColor.colorTextButtonHeaderThread
),
maxLines: maxLines,
overflow: maxLines == 1 ? CommonTextStyle.defaultTextOverFlow : null,
overflow: textOverflow ?? (maxLines == 1 ? CommonTextStyle.defaultTextOverFlow : null),
softWrap: maxLines == 1 ? CommonTextStyle.defaultSoftWrap : null,
);
}
@@ -88,7 +88,7 @@ extension SessionExtensions on Session {
accountId,
linagoraContactSupportCapability,
);
log('SessionExtensions::getContactSupport:contactSupportCapability = $contactSupportCapability');
log('SessionExtensions::getContactSupportCapability:contactSupportCapability = $contactSupportCapability');
return contactSupportCapability;
} catch (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/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/set_mailbox_name_exception.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);
}
}
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()
? const QuotasView()
: const SizedBox.shrink(),
),
Obx(() {
if (controller.isSelectionEnabled()) {
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(() {
if (!controller.isSelectionEnabled() && controller.responsiveUtils.isPortraitMobile(context)) {
return Container(
@@ -58,12 +58,54 @@ class MailboxView extends BaseMailboxView {
child: _buildListMailbox(context),
),
)),
const QuotasView(
padding: EdgeInsetsDirectional.only(
start: QuotasViewStyles.padding,
top: QuotasViewStyles.padding,
const Divider(color: AppColor.colorDividerHorizontal),
if (controller.responsiveUtils.isWebDesktop(context) ||
controller.contactSupportCapability == null)
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(
color: AppColor.colorBgMailbox,
width: double.infinity,
@@ -130,14 +172,21 @@ class MailboxView extends BaseMailboxView {
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Expanded(child: Text(
AppLocalizations.of(context).folders,
style: const TextStyle(
fontSize: 17,
color: Colors.black,
fontWeight: FontWeight.bold
)
)),
Expanded(
child: Padding(
padding: EdgeInsetsDirectional.only(
start: controller.responsiveUtils.isWebDesktop(context) ? 0 : 12,
),
child: Text(
AppLocalizations.of(context).folders,
style: const TextStyle(
fontSize: 17,
color: Colors.black,
fontWeight: FontWeight.bold,
),
),
),
),
Padding(
padding: EdgeInsetsDirectional.only(end: controller.responsiveUtils.isDesktop(context) ? 0 : 12),
child: Row(
@@ -5,7 +5,6 @@ import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:model/model.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/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';
@@ -44,7 +43,6 @@ class ManageAccountDashBoardView extends GetWidget<ManageAccountDashBoardControl
return NavigationBarWidget(
imagePaths: controller.imagePaths,
avatarUserName: controller.sessionCurrent?.username.firstCharacter ?? '',
contactSupportCapability: controller.sessionCurrent?.getContactSupportCapability(accountId),
onTapApplicationLogoAction: () => controller.backToMailboxDashBoard(context: context),
onTapAvatarAction: (position) => controller.handleClickAvatarAction(context, position),
);
@@ -31,12 +31,6 @@ class QuotasView extends GetWidget<QuotasController> {
color: controller.responsiveUtils.isWebDesktop(context)
? QuotasViewStyles.webBackgroundColor
: QuotasViewStyles.mobileBackgroundColor,
border: const Border(
top: BorderSide(
color: QuotasViewStyles.topLineColor,
width: QuotasViewStyles.topLineSize,
)
),
),
alignment: AlignmentDirectional.centerStart,
child: Column(
@@ -59,6 +53,8 @@ class QuotasView extends GetWidget<QuotasController> {
fontWeight: QuotasViewStyles.labelFontWeight,
color: QuotasViewStyles.labelTextColor
),
maxLines: 1,
overflow: TextOverflow.ellipsis,
)
],
),
@@ -80,6 +76,8 @@ class QuotasView extends GetWidget<QuotasController> {
fontWeight: QuotasViewStyles.progressStateFontWeight,
color: octetQuota.getQuotasStateTitleColor()
),
maxLines: 2,
overflow: TextOverflow.ellipsis,
)
],
),