TF-3181 Handle on click contact support

(cherry picked from commit 7a6a02f58f5194c7f8c8ad3c047a5b8938ba598e)
This commit is contained in:
dab246
2024-12-06 02:28:59 +07:00
committed by Dat H. Pham
parent 2da1e555bb
commit 360027d7a1
10 changed files with 176 additions and 6 deletions
@@ -0,0 +1,38 @@
import 'package:core/utils/app_logger.dart';
import 'package:jmap_dart_client/jmap/mail/email/email_address.dart';
import 'package:model/extensions/contact_support_capability_extension.dart';
import 'package:model/support/contact_support_capability.dart';
import 'package:tmail_ui_user/features/email/presentation/model/composer_arguments.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart';
import 'package:tmail_ui_user/main/utils/app_utils.dart';
typedef OnTapContactSupportAction = Function(ContactSupportCapability contactSupport);
mixin ContactSupportMixin {
void onGetHelpOrReportBug(
ContactSupportCapability contactSupport,
MailboxDashBoardController mailboxDashBoardController,
) {
log('ContactSupportMixin::onGetHelpOrReportBug:contactSupport = $contactSupport');
if (contactSupport.isMailAddressSupported) {
_handleMailAddress(contactSupport.supportMailAddress!, mailboxDashBoardController);
} else if (contactSupport.isHttpLinkSupported) {
_handleHttpLink(contactSupport.httpLink!);
}
}
void _handleMailAddress(
String mailAddress,
MailboxDashBoardController mailboxDashBoardController,
) {
mailboxDashBoardController.goToComposer(
ComposerArguments.fromEmailAddress(EmailAddress(null, mailAddress)),
);
}
void _handleHttpLink(String httpLink) {
AppUtils.launchLink(httpLink);
}
}
@@ -17,6 +17,7 @@ import 'package:model/model.dart';
import 'package:pointer_interceptor/pointer_interceptor.dart';
import 'package:rxdart/transformers.dart';
import 'package:tmail_ui_user/features/base/base_mailbox_controller.dart';
import 'package:tmail_ui_user/features/base/mixin/contact_support_mixin.dart';
import 'package:tmail_ui_user/features/base/mixin/mailbox_action_handler_mixin.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';
@@ -77,7 +78,8 @@ import 'package:tmail_ui_user/main/routes/route_navigation.dart';
import 'package:tmail_ui_user/main/routes/route_utils.dart';
import 'package:tmail_ui_user/main/utils/ios_sharing_manager.dart';
class MailboxController extends BaseMailboxController with MailboxActionHandlerMixin {
class MailboxController extends BaseMailboxController
with MailboxActionHandlerMixin, ContactSupportMixin {
final mailboxDashBoardController = Get.find<MailboxDashBoardController>();
final isMailboxListScrollable = false.obs;
@@ -118,7 +118,11 @@ class MailboxView extends BaseMailboxView {
fontWeight: FontWeight.w500,
color: AppColor.primaryColor,
),
onTapActionCallback: () {},
onTapActionCallback: () =>
controller.onGetHelpOrReportBug(
controller.contactSupportCapability!,
controller.mailboxDashBoardController,
),
),
),
],
@@ -101,7 +101,11 @@ class MailboxView extends BaseMailboxView {
fontWeight: FontWeight.w500,
color: AppColor.primaryColor,
),
onTapActionCallback: () {},
onTapActionCallback: () =>
controller.onGetHelpOrReportBug(
controller.contactSupportCapability!,
controller.mailboxDashBoardController,
),
),
),
],
@@ -28,6 +28,7 @@ import 'package:pointer_interceptor/pointer_interceptor.dart';
import 'package:receive_sharing_intent/receive_sharing_intent.dart';
import 'package:rxdart/transformers.dart';
import 'package:tmail_ui_user/features/base/action/ui_action.dart';
import 'package:tmail_ui_user/features/base/mixin/contact_support_mixin.dart';
import 'package:tmail_ui_user/features/base/reloadable/reloadable_controller.dart';
import 'package:tmail_ui_user/features/composer/domain/exceptions/set_method_exception.dart';
import 'package:tmail_ui_user/features/composer/domain/extensions/email_request_extension.dart';
@@ -166,7 +167,8 @@ import 'package:tmail_ui_user/main/utils/email_receive_manager.dart';
import 'package:tmail_ui_user/main/utils/ios_notification_manager.dart';
import 'package:uuid/uuid.dart';
class MailboxDashBoardController extends ReloadableController with UserSettingPopupMenuMixin {
class MailboxDashBoardController extends ReloadableController
with UserSettingPopupMenuMixin, ContactSupportMixin {
final RemoveEmailDraftsInteractor _removeEmailDraftsInteractor = Get.find<RemoveEmailDraftsInteractor>();
final EmailReceiveManager _emailReceiveManager = Get.find<EmailReceiveManager>();
@@ -75,6 +75,11 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
onShowAppDashboardAction: controller.showAppDashboardAction,
onTapApplicationLogoAction: controller.redirectToInboxAction,
onTapAvatarAction: (position) => controller.handleClickAvatarAction(context, position),
onTapContactSupportAction: (contactSupport) =>
controller.onGetHelpOrReportBug(
contactSupport,
controller,
),
);
}
}),
@@ -5,6 +5,7 @@ import 'package:core/presentation/views/button/tmail_button_widget.dart';
import 'package:core/presentation/views/image/avatar_builder.dart';
import 'package:flutter/material.dart';
import 'package:model/support/contact_support_capability.dart';
import 'package:tmail_ui_user/features/base/mixin/contact_support_mixin.dart';
import 'package:tmail_ui_user/features/base/widget/application_logo_with_text_widget.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/app_grid_dashboard_controller.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/styles/navigation_bar_style.dart';
@@ -22,6 +23,7 @@ class NavigationBarWidget extends StatelessWidget {
final VoidCallback? onTapApplicationLogoAction;
final VoidCallback? onShowAppDashboardAction;
final OnTapAvatarActionWithPositionClick? onTapAvatarAction;
final OnTapContactSupportAction? onTapContactSupportAction;
const NavigationBarWidget({
super.key,
@@ -33,6 +35,7 @@ class NavigationBarWidget extends StatelessWidget {
this.onShowAppDashboardAction,
this.onTapApplicationLogoAction,
this.onTapAvatarAction,
this.onTapContactSupportAction,
});
@override
@@ -69,7 +72,7 @@ class NavigationBarWidget extends StatelessWidget {
backgroundColor: Colors.transparent,
margin: const EdgeInsetsDirectional.only(end: 8),
tooltipMessage: AppLocalizations.of(context).getHelpOrReportABug,
onTapActionCallback: () {},
onTapActionCallback: () => onTapContactSupportAction?.call(contactSupportCapability!),
),
if (AppConfig.appGridDashboardAvailable && appGridController != null)
Padding(
@@ -109,7 +112,7 @@ class NavigationBarWidget extends StatelessWidget {
backgroundColor: Colors.transparent,
margin: const EdgeInsetsDirectional.only(end: 8),
tooltipMessage: AppLocalizations.of(context).getHelpOrReportABug,
onTapActionCallback: () {},
onTapActionCallback: () => onTapContactSupportAction?.call(contactSupportCapability!),
),
if (AppConfig.appGridDashboardAvailable && appGridController != null)
Padding(