TF-2925 Write widget test for thread view
This commit is contained in:
@@ -85,7 +85,9 @@ class _WebEditorState extends State<WebEditorWidget> {
|
||||
}
|
||||
}
|
||||
};
|
||||
window.addEventListener("message", _dropListener);
|
||||
if (_dropListener != null) {
|
||||
window.addEventListener("message", _dropListener!);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -108,8 +110,10 @@ class _WebEditorState extends State<WebEditorWidget> {
|
||||
_htmlEditorHeight.dispose();
|
||||
_editorController.evaluateJavascriptWeb(
|
||||
HtmlUtils.unregisterDropListener.name);
|
||||
window.removeEventListener("message", _dropListener);
|
||||
_dropListener = null;
|
||||
if (_dropListener != null) {
|
||||
window.removeEventListener("message", _dropListener!);
|
||||
_dropListener = null;
|
||||
}
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
|
||||
+13
-15
@@ -32,8 +32,8 @@ class SpamReportController extends BaseController {
|
||||
final GetSpamReportStateInteractor _getSpamReportStateInteractor;
|
||||
final GetSpamMailboxCachedInteractor _getSpamMailboxCachedInteractor;
|
||||
|
||||
final _presentationSpamMailbox = Rxn<PresentationMailbox>();
|
||||
final _spamReportState = Rxn<SpamReportState>(SpamReportState.enabled);
|
||||
final presentationSpamMailbox = Rxn<PresentationMailbox>();
|
||||
final spamReportState = Rx<SpamReportState>(SpamReportState.enabled);
|
||||
|
||||
SpamReportController(
|
||||
this._storeSpamReportInteractor,
|
||||
@@ -47,15 +47,15 @@ class SpamReportController extends BaseController {
|
||||
void handleSuccessViewState(Success success) {
|
||||
super.handleSuccessViewState(success);
|
||||
if (success is GetUnreadSpamMailboxSuccess){
|
||||
_presentationSpamMailbox.value = success.unreadSpamMailbox.toPresentationMailbox();
|
||||
presentationSpamMailbox.value = success.unreadSpamMailbox.toPresentationMailbox();
|
||||
} else if (success is StoreLastTimeDismissedSpamReportSuccess) {
|
||||
_presentationSpamMailbox.value = null;
|
||||
presentationSpamMailbox.value = null;
|
||||
} else if (success is GetSpamReportStateSuccess) {
|
||||
_spamReportState.value = success.spamReportState;
|
||||
spamReportState.value = success.spamReportState;
|
||||
} else if (success is StoreSpamReportStateSuccess) {
|
||||
_spamReportState.value = success.spamReportState;
|
||||
spamReportState.value = success.spamReportState;
|
||||
} else if (success is GetSpamMailboxCachedSuccess) {
|
||||
_presentationSpamMailbox.value = success.spamMailbox.toPresentationMailbox();
|
||||
presentationSpamMailbox.value = success.spamMailbox.toPresentationMailbox();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -65,14 +65,14 @@ class SpamReportController extends BaseController {
|
||||
if (failure is GetUnreadSpamMailboxFailure ||
|
||||
failure is GetSpamMailboxCachedFailure ||
|
||||
failure is InvalidSpamReportCondition) {
|
||||
_presentationSpamMailbox.value = null;
|
||||
presentationSpamMailbox.value = null;
|
||||
}
|
||||
}
|
||||
|
||||
void dismissSpamReportAction(BuildContext context) {
|
||||
if (Get.isRegistered<MailboxDashBoardController>()) {
|
||||
final mailboxDashBoardController = Get.find<MailboxDashBoardController>();
|
||||
final spamMailbox = _presentationSpamMailbox.value;
|
||||
final spamMailbox = presentationSpamMailbox.value;
|
||||
final session = mailboxDashBoardController.sessionCurrent;
|
||||
final accountId = mailboxDashBoardController.accountId.value;
|
||||
|
||||
@@ -86,7 +86,7 @@ class SpamReportController extends BaseController {
|
||||
spamMailbox.getDisplayName(context),
|
||||
spamMailbox.unreadEmails?.value.value.toInt() ?? 0
|
||||
);
|
||||
_presentationSpamMailbox.value = null;
|
||||
presentationSpamMailbox.value = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -106,16 +106,14 @@ class SpamReportController extends BaseController {
|
||||
consumeState(_storeSpamReportInteractor.execute(DateTime.now()));
|
||||
}
|
||||
|
||||
bool get notShowSpamReportBanner => _presentationSpamMailbox.value == null;
|
||||
String get numberOfUnreadSpamEmails => presentationSpamMailbox.value?.countUnReadEmailsAsString ?? '';
|
||||
|
||||
String get numberOfUnreadSpamEmails => _presentationSpamMailbox.value?.countUnReadEmailsAsString ?? '';
|
||||
|
||||
bool get enableSpamReport => _spamReportState.value == SpamReportState.enabled;
|
||||
bool get enableSpamReport => spamReportState.value == SpamReportState.enabled;
|
||||
|
||||
void openMailbox() {
|
||||
final mailboxDashBoardController = Get.find<MailboxDashBoardController>();
|
||||
_storeLastTimeDismissedSpamReportedAction();
|
||||
mailboxDashBoardController.openMailboxAction(_presentationSpamMailbox.value!);
|
||||
mailboxDashBoardController.openMailboxAction(presentationSpamMailbox.value!);
|
||||
}
|
||||
|
||||
void storeSpamReportStateAction(SpamReportState spamReportState) {
|
||||
|
||||
@@ -427,9 +427,8 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
|
||||
|
||||
Widget _buildDownloadTaskStateWidget() {
|
||||
return Obx(() {
|
||||
if (controller.downloadController.notEmptyListDownloadTask) {
|
||||
final downloadTasks = controller.downloadController.listDownloadTaskState;
|
||||
|
||||
final listDownloadTasks = controller.downloadController.listDownloadTaskState;
|
||||
if (listDownloadTasks.isNotEmpty) {
|
||||
return Align(
|
||||
alignment: Alignment.bottomCenter,
|
||||
child: Container(
|
||||
@@ -439,7 +438,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
|
||||
child: ListView.separated(
|
||||
scrollDirection: Axis.horizontal,
|
||||
padding: EdgeInsets.zero,
|
||||
itemCount: downloadTasks.length,
|
||||
itemCount: listDownloadTasks.length,
|
||||
separatorBuilder: (context, index) =>
|
||||
const Padding(
|
||||
padding: EdgeInsets.symmetric(vertical: 5),
|
||||
@@ -449,7 +448,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
|
||||
thickness: 0.2),
|
||||
),
|
||||
itemBuilder: (context, index) =>
|
||||
DownloadTaskItemWidget(downloadTasks[index])
|
||||
DownloadTaskItemWidget(listDownloadTasks[index])
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
@@ -440,7 +440,7 @@ class ThreadController extends BaseController with EmailActionController {
|
||||
|
||||
void _getAllEmailSuccess(GetAllEmailSuccess success) {
|
||||
if (success.currentMailboxId != selectedMailboxId) {
|
||||
log('ThreadController::_getAllEmailSuccess: GetAllForMailboxEd = ${success.currentMailboxId?.asString} | SELECTED_MAILBOX_ID = ${selectedMailboxId?.asString} | SELECTED_MAILBOX_NAME = ${selectedMailbox?.name?.name}');
|
||||
log('ThreadController::_getAllEmailSuccess: GetAllForMailboxId = ${success.currentMailboxId?.asString} | SELECTED_MAILBOX_ID = ${selectedMailboxId?.asString} | SELECTED_MAILBOX_NAME = ${selectedMailbox?.name?.name}');
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -933,8 +933,6 @@ class ThreadController extends BaseController with EmailActionController {
|
||||
}
|
||||
}
|
||||
|
||||
bool isSelectionEnabled() => mailboxDashBoardController.isSelectionEnabled();
|
||||
|
||||
void pressEmailSelectionAction(BuildContext context, EmailActionType actionType, List<PresentationEmail> selectionEmail) {
|
||||
switch(actionType) {
|
||||
case EmailActionType.markAsRead:
|
||||
|
||||
@@ -248,13 +248,21 @@ class ThreadView extends GetWidget<ThreadController>
|
||||
|
||||
Widget _buildListButtonSelectionForMobile(BuildContext context) {
|
||||
return Obx(() {
|
||||
if ((PlatformInfo.isMobile || (PlatformInfo.isWeb && controller.isSelectionEnabled()
|
||||
&& controller.isSearchActive && !controller.responsiveUtils.isDesktop(context)))
|
||||
&& controller.mailboxDashBoardController.emailsInCurrentMailbox.listEmailSelected.isNotEmpty) {
|
||||
final listEmailSelected = controller.mailboxDashBoardController.emailsInCurrentMailbox.listEmailSelected;
|
||||
final currentSelectMode = controller.mailboxDashBoardController.currentSelectMode.value;
|
||||
final isSearchEmailRunning = controller.searchController.simpleSearchIsActivated.isTrue
|
||||
|| controller.searchController.advancedSearchIsActivated.isTrue;
|
||||
|
||||
if (_validateDisplayBottomBarSelection(
|
||||
context: context,
|
||||
listEmailSelected: listEmailSelected,
|
||||
isSearchEmailRunning: isSearchEmailRunning,
|
||||
currentSelectMode: currentSelectMode
|
||||
)) {
|
||||
return BottomBarThreadSelectionWidget(
|
||||
controller.imagePaths,
|
||||
controller.responsiveUtils,
|
||||
controller.mailboxDashBoardController.emailsInCurrentMailbox.listEmailSelected,
|
||||
listEmailSelected,
|
||||
controller.mailboxDashBoardController.selectedMailbox.value,
|
||||
onPressEmailSelectionActionClick: (actionType, selectionEmail) =>
|
||||
controller.pressEmailSelectionAction(
|
||||
@@ -269,6 +277,28 @@ class ThreadView extends GetWidget<ThreadController>
|
||||
});
|
||||
}
|
||||
|
||||
bool _validateDisplayBottomBarSelection({
|
||||
required BuildContext context,
|
||||
required List<PresentationEmail> listEmailSelected,
|
||||
required bool isSearchEmailRunning,
|
||||
required SelectMode currentSelectMode,
|
||||
}) {
|
||||
if (PlatformInfo.isMobile && listEmailSelected.isNotEmpty) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (PlatformInfo.isWeb
|
||||
&& currentSelectMode == SelectMode.ACTIVE
|
||||
&& isSearchEmailRunning
|
||||
&& !controller.responsiveUtils.isDesktop(context)
|
||||
&& listEmailSelected.isNotEmpty
|
||||
) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
Widget _buildFloatingButtonCompose(BuildContext context) {
|
||||
if (controller.responsiveUtils.isWebDesktop(context)) {
|
||||
return const SizedBox.shrink();
|
||||
@@ -394,7 +424,7 @@ class ThreadView extends GetWidget<ThreadController>
|
||||
if (index == listPresentationEmail.length + 1) {
|
||||
return _buildLoadMoreProgressBar(controller.loadingMoreStatus.value);
|
||||
}
|
||||
return _buildEmailItem(
|
||||
return _buildEmailItem(
|
||||
context,
|
||||
listPresentationEmail[index]);
|
||||
}),
|
||||
@@ -487,6 +517,7 @@ class ThreadView extends GetWidget<ThreadController>
|
||||
final selectModeAll = controller.mailboxDashBoardController.currentSelectMode.value;
|
||||
|
||||
return EmailTileBuilder(
|
||||
key: Key('email_tile_builder_${presentationEmail.id?.asString}'),
|
||||
presentationEmail: presentationEmail,
|
||||
selectAllMode: selectModeAll,
|
||||
isShowingEmailContent: isShowingEmailContent,
|
||||
@@ -571,6 +602,7 @@ class ThreadView extends GetWidget<ThreadController>
|
||||
: null,
|
||||
confirmDismiss: (direction) => controller.swipeEmailAction(context, presentationEmail, direction),
|
||||
child: EmailTileBuilder(
|
||||
key: Key('email_tile_builder_${presentationEmail.id?.asString}'),
|
||||
presentationEmail: presentationEmail,
|
||||
selectAllMode: selectModeAll,
|
||||
isShowingEmailContent: isShowingEmailContent,
|
||||
@@ -656,24 +688,24 @@ class ThreadView extends GetWidget<ThreadController>
|
||||
return Obx(() => controller.viewState.value.fold(
|
||||
(failure) => const SizedBox.shrink(),
|
||||
(success) {
|
||||
if (success is! GetAllEmailLoading && success is! SearchingState) {
|
||||
if (success is GetAllEmailSuccess
|
||||
&& success.currentMailboxId != controller.selectedMailboxId) {
|
||||
return const SizedBox.shrink();
|
||||
} else {
|
||||
return EmptyEmailsWidget(
|
||||
key: const Key('empty_thread_view'),
|
||||
title: _getMessageEmptyEmail(context),
|
||||
iconSVG: controller.imagePaths.icEmptyEmail,
|
||||
subTitle: _getSubMessageEmptyEmail(context),
|
||||
onCreateFiltersActionCallback: controller.isNewFolderCreated
|
||||
? controller.goToCreateEmailRuleView
|
||||
: null,
|
||||
);
|
||||
}
|
||||
} else {
|
||||
if (success is GetAllEmailLoading || success is SearchingState) {
|
||||
return const SizedBox.shrink();
|
||||
}
|
||||
|
||||
if (success is GetAllEmailSuccess
|
||||
&& success.currentMailboxId != controller.selectedMailboxId) {
|
||||
return const SizedBox.shrink();
|
||||
} else {
|
||||
return EmptyEmailsWidget(
|
||||
key: const Key('empty_thread_view'),
|
||||
title: _getMessageEmptyEmail(context),
|
||||
iconSVG: controller.imagePaths.icEmptyEmail,
|
||||
subTitle: _getSubMessageEmptyEmail(context),
|
||||
onCreateFiltersActionCallback: controller.isNewFolderCreated
|
||||
? controller.goToCreateEmailRuleView
|
||||
: null,
|
||||
);
|
||||
}
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
+3
-1
@@ -2,6 +2,7 @@ import 'package:core/presentation/resources/image_paths.dart';
|
||||
import 'package:core/utils/direction_utils.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/model/spam_report_state.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/spam_report_controller.dart';
|
||||
import 'package:tmail_ui_user/features/thread/presentation/styles/spam_banner/spam_report_banner_button_styles.dart';
|
||||
import 'package:tmail_ui_user/features/thread/presentation/styles/spam_banner/spam_report_banner_label_styles.dart';
|
||||
@@ -18,7 +19,8 @@ class SpamReportBannerWebWidget extends StatelessWidget {
|
||||
final spamReportController = Get.find<SpamReportController>();
|
||||
final imagePaths = Get.find<ImagePaths>();
|
||||
return Obx(() {
|
||||
if (!spamReportController.enableSpamReport || spamReportController.notShowSpamReportBanner) {
|
||||
if (spamReportController.spamReportState.value == SpamReportState.disabled
|
||||
|| spamReportController.presentationSpamMailbox.value == null) {
|
||||
return const SizedBox(
|
||||
height: 8,
|
||||
);
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/model/spam_report_state.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/spam_report_controller.dart';
|
||||
import 'package:tmail_ui_user/features/thread/presentation/styles/spam_banner/spam_report_banner_button_styles.dart';
|
||||
import 'package:tmail_ui_user/features/thread/presentation/styles/spam_banner/spam_report_banner_styles.dart';
|
||||
@@ -19,9 +20,9 @@ class SpamReportBannerWidget extends StatelessWidget {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context){
|
||||
|
||||
return Obx(() {
|
||||
if (!spamReportController.enableSpamReport || spamReportController.notShowSpamReportBanner) {
|
||||
if (spamReportController.spamReportState.value == SpamReportState.disabled
|
||||
|| spamReportController.presentationSpamMailbox.value == null) {
|
||||
return const SizedBox.shrink();
|
||||
}
|
||||
return Container(
|
||||
|
||||
Reference in New Issue
Block a user