TF-1813 Display SendingQueue mailbox

(cherry picked from commit 3e3667777075ba4029d66302009d81eadf18b6d2)
This commit is contained in:
dab246
2023-06-01 14:26:01 +07:00
committed by Dat Vu
parent 0e3c09c861
commit 86fe019b83
13 changed files with 468 additions and 97 deletions
@@ -200,7 +200,7 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
void _registerObxStreamListener() {
ever(mailboxDashBoardController.accountId, (accountId) {
if (accountId is AccountId) {
if (accountId != null && mailboxDashBoardController.sessionCurrent != null) {
getAllMailbox(mailboxDashBoardController.sessionCurrent!, accountId);
}
});
@@ -441,23 +441,17 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
BuildContext context,
PresentationMailbox presentationMailboxSelected
) {
log('MailboxController::_handleOpenMailbox(): ');
log('MailboxController::_handleOpenMailbox():MailboxName: ${presentationMailboxSelected.name}');
KeyboardUtils.hideKeyboard(context);
mailboxDashBoardController.setSelectedMailbox(presentationMailboxSelected);
mailboxDashBoardController.clearSelectedEmail();
if (presentationMailboxSelected.id != mailboxDashBoardController.selectedMailbox.value?.id) {
mailboxDashBoardController.clearFilterMessageOption();
}
_disableAllSearchEmail();
mailboxDashBoardController.setSelectedMailbox(presentationMailboxSelected);
_updateSelectedMailboxRouteOnBrowser();
if (mailboxDashBoardController.isDrawerOpen) {
mailboxDashBoardController.closeMailboxMenuDrawer();
} else {
mailboxDashBoardController.dispatchRoute(DashboardRoutes.thread);
}
mailboxDashBoardController.closeMailboxMenuDrawer();
mailboxDashBoardController.dispatchRoute(DashboardRoutes.thread);
}
void _disableAllSearchEmail() {
@@ -1176,4 +1170,14 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
bool get activeScrollTop => _activeScrollTop.value;
bool get activeScrollBottom => _activeScrollBottom.value;
void openSendingQueueViewAction(BuildContext context) {
KeyboardUtils.hideKeyboard(context);
_disableAllSearchEmail();
mailboxDashBoardController.clearSelectedEmail();
mailboxDashBoardController.clearFilterMessageOption();
mailboxDashBoardController.setSelectedMailbox(null);
closeMailboxScreen(context);
mailboxDashBoardController.dispatchRoute(DashboardRoutes.sendingQueue);
}
}
@@ -11,7 +11,9 @@ import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_catego
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_node.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/bottom_bar_selection_mailbox_widget.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/mailbox_folder_tile_builder.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/sending_queue_mailbox_widget.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/user_information_widget_builder.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/dashboard_routes.dart';
import 'package:tmail_ui_user/features/quotas/presentation/widget/quotas_footer_widget.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
import 'package:tmail_ui_user/main/utils/app_config.dart';
@@ -208,6 +210,19 @@ class MailboxView extends GetWidget<MailboxController>
return const SizedBox.shrink();
}
}),
Obx(() {
if (controller.mailboxDashBoardController.listSendingEmails.isNotEmpty &&
PlatformInfo.isMobile &&
!controller.isSelectionEnabled()) {
return SendingQueueMailboxWidget(
listSendingEmails: controller.mailboxDashBoardController.listSendingEmails,
onOpenSendingQueueAction: () => controller.openSendingQueueViewAction(context),
isSelected: controller.mailboxDashBoardController.dashboardRoute.value == DashboardRoutes.sendingQueue,
);
} else {
return const SizedBox.shrink();
}
}),
const SizedBox(height: 8),
const Divider(color: AppColor.colorDividerMailbox, height: 0.5, thickness: 0.2),
const SizedBox(height: 12),
@@ -339,7 +339,6 @@ mixin MailboxWidgetMixin {
MailboxCategories.appGrid,
controller),
AnimatedContainer(
padding: const EdgeInsets.only(top: 8),
duration: const Duration(milliseconds: 400),
child: Obx(() {
return controller.mailboxDashBoardController.appGridDashboardController.appDashboardExpandMode.value == ExpandMode.EXPAND
@@ -358,27 +357,20 @@ mixin MailboxWidgetMixin {
MailboxController controller
) {
return Padding(
padding: EdgeInsets.only(
top: 8,
left: responsiveUtils.isDesktop(context) ? 0 : 36,
right: responsiveUtils.isDesktop(context) ? 0 : 28
),
padding: const EdgeInsets.only(left: 32, top: 8, bottom: 8, right: 4),
child: Row(children: [
buildIconWeb(
splashRadius: 5,
iconPadding: EdgeInsets.zero,
minSize: 12,
iconSize: 28,
icon: SvgPicture.asset(
imagePaths.icAppDashboard,
colorFilter: AppColor.primaryColor.asFilter(),
fit: BoxFit.fill),
tooltip: AppLocalizations.of(context).appGridTittle),
SvgPicture.asset(
imagePaths.icAppDashboard,
colorFilter: AppColor.primaryColor.asFilter(),
width: 20,
height: 20,
fit: BoxFit.fill),
Expanded(child: Padding(
padding: const EdgeInsets.only(left: 12),
padding: const EdgeInsets.symmetric(horizontal: 8),
child: Text(categories.getTitle(context),
maxLines: 1,
overflow: TextOverflow.ellipsis,
overflow: CommonTextStyle.defaultTextOverFlow,
softWrap: CommonTextStyle.defaultSoftWrap,
style: const TextStyle(
fontSize: 16,
color: AppColor.colorTextButton,
@@ -391,7 +383,9 @@ mixin MailboxWidgetMixin {
controller.mailboxDashBoardController.appGridDashboardController.appDashboardExpandMode.value == ExpandMode.COLLAPSE
? imagePaths.icCollapseFolder
: imagePaths.icExpandFolder,
colorFilter: AppColor.primaryColor.asFilter(),
colorFilter: controller.mailboxDashBoardController.appGridDashboardController.appDashboardExpandMode.value == ExpandMode.COLLAPSE
? AppColor.colorIconUnSubscribedMailbox.asFilter()
: AppColor.primaryColor.asFilter(),
fit: BoxFit.fill
)),
tooltip: AppLocalizations.of(context).appGridTittle,
@@ -408,7 +402,7 @@ mixin MailboxWidgetMixin {
return ListView.builder(
shrinkWrap: true,
primary: false,
padding: const EdgeInsets.symmetric(horizontal: 16),
padding: const EdgeInsets.only(left: 16, right: 16, bottom: 8),
itemCount: linagoraApps.apps.length,
itemBuilder: (context, index) {
return AppListDashboardItem(linagoraApps.apps[index]);
@@ -0,0 +1,107 @@
import 'package:core/presentation/extensions/color_extension.dart';
import 'package:core/presentation/resources/image_paths.dart';
import 'package:core/presentation/utils/responsive_utils.dart';
import 'package:core/presentation/utils/style_utils.dart';
import 'package:core/utils/platform_info.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:get/get.dart';
import 'package:tmail_ui_user/features/composer/domain/model/sending_email.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
import 'package:tmail_ui_user/main/utils/app_utils.dart';
class SendingQueueMailboxWidget extends StatelessWidget {
final List<SendingEmail> listSendingEmails;
final bool isSelected;
final VoidCallback? onOpenSendingQueueAction;
const SendingQueueMailboxWidget({
super.key,
required this.listSendingEmails,
this.isSelected = false,
this.onOpenSendingQueueAction
});
@override
Widget build(BuildContext context) {
final imagePath = Get.find<ImagePaths>();
final responsiveUtils = Get.find<ResponsiveUtils>();
return Padding(
padding: const EdgeInsets.only(left: 20, right: 16),
child: Material(
color: Colors.transparent,
child: InkWell(
onTap: onOpenSendingQueueAction,
borderRadius: const BorderRadius.all(Radius.circular(8)),
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8),
color: isSelected ? AppColor.colorBgMailboxSelected : Colors.transparent),
padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 12),
child: Column(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
SizedBox(width: responsiveUtils.isLandscapeMobile(context) ? 20 : 28),
SvgPicture.asset(
imagePath.icMailboxSendingQueue,
width: PlatformInfo.isWeb ? 20 : 24,
height: PlatformInfo.isWeb ? 20 : 24,
colorFilter: AppColor.primaryColor.asFilter(),
fit: BoxFit.fill),
const SizedBox(width: 12),
Expanded(child: Row(
crossAxisAlignment: CrossAxisAlignment.end,
children: [
Expanded(
child: Text(
AppLocalizations.of(context).sendingQueue,
maxLines: 1,
softWrap: CommonTextStyle.defaultSoftWrap,
overflow: CommonTextStyle.defaultTextOverFlow,
style: const TextStyle(
fontSize: 15,
color: AppColor.colorNameEmail,
fontWeight: FontWeight.normal),
),
),
Padding(
padding: EdgeInsets.only(
right: AppUtils.isDirectionRTL(context) ? 0 : 12,
left: AppUtils.isDirectionRTL(context) ? 12 : 0,
),
child: Text(
_getCountSendingEmails(),
maxLines: 1,
overflow: CommonTextStyle.defaultTextOverFlow,
style: const TextStyle(
fontSize: 13,
color: Colors.black,
fontWeight: FontWeight.normal
)
),
)
],
))
]
),
]
),
),
),
),
);
}
String _getCountSendingEmails() {
if (listSendingEmails.isEmpty) {
return '';
}
return listSendingEmails.length <= 999 ? '${listSendingEmails.length}' : '999+';
}
}