TF-1063 Disable search email when open mailbox
This commit is contained in:
@@ -239,8 +239,10 @@ class MailboxController extends BaseMailboxController {
|
|||||||
});
|
});
|
||||||
|
|
||||||
dashboardActionWorker = ever(mailboxDashBoardController.dashBoardAction, (action) {
|
dashboardActionWorker = ever(mailboxDashBoardController.dashBoardAction, (action) {
|
||||||
if(action is DashBoardAction) {
|
if (action is ClearSearchEmailAction) {
|
||||||
if(action is ClearSearchEmailAction) {
|
_switchBackToMailboxDefault();
|
||||||
|
} else if (action is SelectMailboxDefaultAction) {
|
||||||
|
if (mailboxDashBoardController.selectedMailbox.value == null) {
|
||||||
_switchBackToMailboxDefault();
|
_switchBackToMailboxDefault();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -369,9 +371,7 @@ class MailboxController extends BaseMailboxController {
|
|||||||
mailboxDashBoardController.setSelectedMailbox(presentationMailboxSelected);
|
mailboxDashBoardController.setSelectedMailbox(presentationMailboxSelected);
|
||||||
mailboxDashBoardController.clearSelectedEmail();
|
mailboxDashBoardController.clearSelectedEmail();
|
||||||
|
|
||||||
if (mailboxDashBoardController.searchController.isSearchActive()) {
|
_disableAllSearchEmail();
|
||||||
mailboxDashBoardController.searchController.disableSearch();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_responsiveUtils.hasLeftMenuDrawerActive(context)) {
|
if (_responsiveUtils.hasLeftMenuDrawerActive(context)) {
|
||||||
mailboxDashBoardController.closeMailboxMenuDrawer();
|
mailboxDashBoardController.closeMailboxMenuDrawer();
|
||||||
@@ -380,6 +380,11 @@ class MailboxController extends BaseMailboxController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void _disableAllSearchEmail() {
|
||||||
|
mailboxDashBoardController.dispatchAction(ClearAllFieldOfAdvancedSearchAction());
|
||||||
|
mailboxDashBoardController.searchController.disableAllSearchEmail();
|
||||||
|
}
|
||||||
|
|
||||||
void openMailbox(
|
void openMailbox(
|
||||||
BuildContext context,
|
BuildContext context,
|
||||||
PresentationMailbox presentationMailboxSelected
|
PresentationMailbox presentationMailboxSelected
|
||||||
|
|||||||
@@ -72,14 +72,6 @@ class OpenEmailDetailedFromSuggestionQuickSearchAction extends DashBoardAction {
|
|||||||
List<Object?> get props => [presentationEmail];
|
List<Object?> get props => [presentationEmail];
|
||||||
}
|
}
|
||||||
|
|
||||||
class DisableSearchEmailAction extends DashBoardAction {
|
|
||||||
|
|
||||||
DisableSearchEmailAction();
|
|
||||||
|
|
||||||
@override
|
|
||||||
List<Object?> get props => [];
|
|
||||||
}
|
|
||||||
|
|
||||||
class StartSearchEmailAction extends DashBoardAction {
|
class StartSearchEmailAction extends DashBoardAction {
|
||||||
|
|
||||||
StartSearchEmailAction();
|
StartSearchEmailAction();
|
||||||
@@ -101,6 +93,20 @@ class EmptyTrashAction extends DashBoardAction {
|
|||||||
class ClearSearchEmailAction extends DashBoardAction {
|
class ClearSearchEmailAction extends DashBoardAction {
|
||||||
ClearSearchEmailAction();
|
ClearSearchEmailAction();
|
||||||
|
|
||||||
|
@override
|
||||||
|
List<Object?> get props => [];
|
||||||
|
}
|
||||||
|
|
||||||
|
class ClearAllFieldOfAdvancedSearchAction extends DashBoardAction {
|
||||||
|
ClearAllFieldOfAdvancedSearchAction();
|
||||||
|
|
||||||
|
@override
|
||||||
|
List<Object?> get props => [];
|
||||||
|
}
|
||||||
|
|
||||||
|
class SelectMailboxDefaultAction extends DashBoardAction {
|
||||||
|
SelectMailboxDefaultAction();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
List<Object?> get props => [];
|
List<Object?> get props => [];
|
||||||
}
|
}
|
||||||
+54
-3
@@ -15,6 +15,7 @@ import 'package:tmail_ui_user/features/composer/domain/usecases/get_autocomplete
|
|||||||
import 'package:tmail_ui_user/features/composer/domain/usecases/get_autocomplete_with_device_contact_interactor.dart';
|
import 'package:tmail_ui_user/features/composer/domain/usecases/get_autocomplete_with_device_contact_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/destination_picker/presentation/model/destination_picker_arguments.dart';
|
import 'package:tmail_ui_user/features/destination_picker/presentation/model/destination_picker_arguments.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_actions.dart';
|
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_actions.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/action/dashboard_action.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/input_field_focus_manager.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/input_field_focus_manager.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/search_controller.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/search_controller.dart';
|
||||||
@@ -62,6 +63,14 @@ class AdvancedFilterController extends BaseController {
|
|||||||
|
|
||||||
DateTime? get endDate => _endDate;
|
DateTime? get endDate => _endDate;
|
||||||
|
|
||||||
|
late Worker _dashboardActionWorker;
|
||||||
|
|
||||||
|
@override
|
||||||
|
void onInit() {
|
||||||
|
_registerWorkerListener();
|
||||||
|
super.onInit();
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void onReady() {
|
void onReady() {
|
||||||
if (!BuildUtils.isWeb) {
|
if (!BuildUtils.isWeb) {
|
||||||
@@ -80,7 +89,7 @@ class AdvancedFilterController extends BaseController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void cleanSearchFilter(BuildContext context) {
|
void cleanSearchFilter(BuildContext context) {
|
||||||
searchController.cleanSearchFilter();
|
searchController.clearSearchFilter();
|
||||||
dateFilterSelectedFormAdvancedSearch.value = EmailReceiveTimeType.allTime;
|
dateFilterSelectedFormAdvancedSearch.value = EmailReceiveTimeType.allTime;
|
||||||
clearDateRangeOfFilter();
|
clearDateRangeOfFilter();
|
||||||
subjectFilterInputController.text = '';
|
subjectFilterInputController.text = '';
|
||||||
@@ -88,7 +97,7 @@ class AdvancedFilterController extends BaseController {
|
|||||||
notKeyWordFilterInputController.text = '';
|
notKeyWordFilterInputController.text = '';
|
||||||
dateFilterInputController.text = '';
|
dateFilterInputController.text = '';
|
||||||
hasAttachment.value = false;
|
hasAttachment.value = false;
|
||||||
searchController.isAdvancedSearchHasApply.value = false;
|
searchController.deactivateAdvancedSearch();
|
||||||
searchController.isAdvancedSearchViewOpen.toggle();
|
searchController.isAdvancedSearchViewOpen.toggle();
|
||||||
_mailboxDashBoardController.searchEmail(
|
_mailboxDashBoardController.searchEmail(
|
||||||
context, StringConvert.writeNullToEmpty(searchEmailFilter.text?.value));
|
context, StringConvert.writeNullToEmpty(searchEmailFilter.text?.value));
|
||||||
@@ -167,7 +176,11 @@ class AdvancedFilterController extends BaseController {
|
|||||||
|
|
||||||
void applyAdvancedSearchFilter(BuildContext context) {
|
void applyAdvancedSearchFilter(BuildContext context) {
|
||||||
_updateFilterEmailFromAdvancedSearchView();
|
_updateFilterEmailFromAdvancedSearchView();
|
||||||
searchController.isAdvancedSearchHasApply.value = isAdvancedSearchHasApplied;
|
if (isAdvancedSearchHasApplied) {
|
||||||
|
searchController.activateAdvancedSearch();
|
||||||
|
} else {
|
||||||
|
searchController.deactivateAdvancedSearch();
|
||||||
|
}
|
||||||
if (!isAdvancedSearchHasApplied) {
|
if (!isAdvancedSearchHasApplied) {
|
||||||
final newSearchEmailFilter = searchController.searchEmailFilter.value.clearBeforeDate();
|
final newSearchEmailFilter = searchController.searchEmailFilter.value.clearBeforeDate();
|
||||||
searchController.searchEmailFilter.value = newSearchEmailFilter;
|
searchController.searchEmailFilter.value = newSearchEmailFilter;
|
||||||
@@ -357,6 +370,43 @@ class AdvancedFilterController extends BaseController {
|
|||||||
endDate: _endDate.toUTCDate());
|
endDate: _endDate.toUTCDate());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void _resetAllToOriginalValue() {
|
||||||
|
dateFilterSelectedFormAdvancedSearch.value = EmailReceiveTimeType.allTime;
|
||||||
|
hasAttachment.value = false;
|
||||||
|
lastTextForm.value = '';
|
||||||
|
lastTextTo.value = '';
|
||||||
|
_startDate = null;
|
||||||
|
_endDate = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
void _clearAllTextFieldInput() {
|
||||||
|
subjectFilterInputController.clear();
|
||||||
|
hasKeyWordFilterInputController.clear();
|
||||||
|
notKeyWordFilterInputController.clear();
|
||||||
|
dateFilterInputController.clear();
|
||||||
|
mailBoxFilterInputController.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
void _registerWorkerListener() {
|
||||||
|
_dashboardActionWorker = ever(
|
||||||
|
_mailboxDashBoardController.dashBoardAction,
|
||||||
|
(action) {
|
||||||
|
if (action is ClearAllFieldOfAdvancedSearchAction) {
|
||||||
|
_handleClearAllFieldOfAdvancedSearch();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
void _unregisterWorkerListener() {
|
||||||
|
_dashboardActionWorker.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
void _handleClearAllFieldOfAdvancedSearch() {
|
||||||
|
_resetAllToOriginalValue();
|
||||||
|
_clearAllTextFieldInput();
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void onClose() {
|
void onClose() {
|
||||||
focusManager.dispose();
|
focusManager.dispose();
|
||||||
@@ -365,6 +415,7 @@ class AdvancedFilterController extends BaseController {
|
|||||||
notKeyWordFilterInputController.dispose();
|
notKeyWordFilterInputController.dispose();
|
||||||
mailBoxFilterInputController.dispose();
|
mailBoxFilterInputController.dispose();
|
||||||
dateFilterInputController.dispose();
|
dateFilterInputController.dispose();
|
||||||
|
_unregisterWorkerListener();
|
||||||
super.onClose();
|
super.onClose();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+3
-2
@@ -426,7 +426,7 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
|
|
||||||
void clearSearchEmail() {
|
void clearSearchEmail() {
|
||||||
dispatchAction(ClearSearchEmailAction());
|
dispatchAction(ClearSearchEmailAction());
|
||||||
searchController.disableSearch();
|
searchController.disableSimpleSearch();
|
||||||
}
|
}
|
||||||
|
|
||||||
void _unSelectedMailbox() {
|
void _unSelectedMailbox() {
|
||||||
@@ -1009,7 +1009,7 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
dashboardRoute.value = route;
|
dashboardRoute.value = route;
|
||||||
|
|
||||||
if (dashboardRoute.value == DashboardRoutes.searchEmail) {
|
if (dashboardRoute.value == DashboardRoutes.searchEmail) {
|
||||||
searchController.enableSearch();
|
searchController.activateSimpleSearch();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1200,6 +1200,7 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void selectQuickSearchFilterAction(QuickSearchFilter filter) {
|
void selectQuickSearchFilterAction(QuickSearchFilter filter) {
|
||||||
|
log('MailboxDashBoardController::selectQuickSearchFilterAction(): filter: $filter');
|
||||||
selectQuickSearchFilter(quickSearchFilter: filter);
|
selectQuickSearchFilter(quickSearchFilter: filter);
|
||||||
dispatchAction(StartSearchEmailAction());
|
dispatchAction(StartSearchEmailAction());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,17 +34,12 @@ class SearchController extends BaseController {
|
|||||||
final ResponsiveUtils _responsiveUtils = Get.find<ResponsiveUtils>();
|
final ResponsiveUtils _responsiveUtils = Get.find<ResponsiveUtils>();
|
||||||
|
|
||||||
final searchInputController = TextEditingController();
|
final searchInputController = TextEditingController();
|
||||||
final searchEmailFilter = SearchEmailFilter().obs;
|
final searchEmailFilter = SearchEmailFilter.initial().obs;
|
||||||
final searchState = SearchState.initial().obs;
|
final searchState = SearchState.initial().obs;
|
||||||
final isAdvancedSearchViewOpen = false.obs;
|
final isAdvancedSearchViewOpen = false.obs;
|
||||||
final isAdvancedSearchHasApply = false.obs;
|
|
||||||
final dateFilterSelectedFormAdvancedSearch = EmailReceiveTimeType.allTime.obs;
|
|
||||||
final mailboxFilterSelectedFormAdvancedSearch = Rxn<PresentationMailbox>();
|
|
||||||
final hasAttachment = false.obs;
|
|
||||||
final emailReceiveTimeType = Rxn<EmailReceiveTimeType>();
|
final emailReceiveTimeType = Rxn<EmailReceiveTimeType>();
|
||||||
final searchIsActive = RxBool(false);
|
final simpleSearchIsActivated = RxBool(false);
|
||||||
|
final advancedSearchIsActivated = RxBool(false);
|
||||||
SearchEmailFilter get searchEmailFilterValue => searchEmailFilter.value;
|
|
||||||
|
|
||||||
SearchQuery? get searchQuery => searchEmailFilter.value.text;
|
SearchQuery? get searchQuery => searchEmailFilter.value.text;
|
||||||
|
|
||||||
@@ -66,8 +61,8 @@ class SearchController extends BaseController {
|
|||||||
isAdvancedSearchViewOpen.toggle();
|
isAdvancedSearchViewOpen.toggle();
|
||||||
}
|
}
|
||||||
|
|
||||||
cleanSearchFilter() {
|
void clearSearchFilter() {
|
||||||
searchEmailFilter.value = SearchEmailFilter();
|
searchEmailFilter.value = SearchEmailFilter.initial();
|
||||||
}
|
}
|
||||||
|
|
||||||
void selectQuickSearchFilter({
|
void selectQuickSearchFilter({
|
||||||
@@ -145,6 +140,7 @@ class SearchController extends BaseController {
|
|||||||
startDate: startDate,
|
startDate: startDate,
|
||||||
endDate: endDate,
|
endDate: endDate,
|
||||||
);
|
);
|
||||||
|
searchEmailFilter.refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
void _registerSearchFocusListener() {
|
void _registerSearchFocusListener() {
|
||||||
@@ -152,10 +148,10 @@ class SearchController extends BaseController {
|
|||||||
final hasFocus = searchFocus.hasFocus;
|
final hasFocus = searchFocus.hasFocus;
|
||||||
final query = searchEmailFilter.value.text?.value;
|
final query = searchEmailFilter.value.text?.value;
|
||||||
log('SearchController::_registerSearchFocusListener(): hasFocus: $hasFocus | query: $query');
|
log('SearchController::_registerSearchFocusListener(): hasFocus: $hasFocus | query: $query');
|
||||||
if (!hasFocus && (query == null || query.isEmpty) && isAdvancedSearchHasApply.isFalse) {
|
if (!hasFocus && (query == null || query.isEmpty) && advancedSearchIsActivated.isFalse) {
|
||||||
updateFilterEmail(text: SearchQuery.initial());
|
updateFilterEmail(text: SearchQuery.initial());
|
||||||
searchInputController.clear();
|
searchInputController.clear();
|
||||||
cleanSearchFilter();
|
clearSearchFilter();
|
||||||
searchFocus.unfocus();
|
searchFocus.unfocus();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -164,19 +160,16 @@ class SearchController extends BaseController {
|
|||||||
bool isSearchActive() =>
|
bool isSearchActive() =>
|
||||||
searchState.value.searchStatus == SearchStatus.ACTIVE;
|
searchState.value.searchStatus == SearchStatus.ACTIVE;
|
||||||
|
|
||||||
bool isAdvanceSearchActive() => isAdvancedSearchHasApply.isTrue;
|
bool get isSearchEmailRunning => simpleSearchIsActivated.isTrue || advancedSearchIsActivated.isTrue;
|
||||||
|
|
||||||
bool get isSearchEmailRunning => isSearchActive() || isAdvanceSearchActive();
|
|
||||||
|
|
||||||
void enableSearch() {
|
void enableSearch() {
|
||||||
searchState.value = searchState.value.enableSearchState();
|
searchState.value = searchState.value.enableSearchState();
|
||||||
}
|
}
|
||||||
|
|
||||||
void disableSearch() {
|
void disableSimpleSearch() {
|
||||||
searchState.value = searchState.value.disableSearchState();
|
|
||||||
updateFilterEmail(text: SearchQuery.initial());
|
updateFilterEmail(text: SearchQuery.initial());
|
||||||
searchInputController.clear();
|
_clearAllTextInputSimpleSearch();
|
||||||
searchFocus.unfocus();
|
hideSimpleSearchFormView();
|
||||||
}
|
}
|
||||||
|
|
||||||
void clearTextSearch() {
|
void clearTextSearch() {
|
||||||
@@ -237,6 +230,46 @@ class SearchController extends BaseController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void activateSimpleSearch() {
|
||||||
|
simpleSearchIsActivated.value = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void deactivateSimpleSearch() {
|
||||||
|
simpleSearchIsActivated.value = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void activateAdvancedSearch() {
|
||||||
|
advancedSearchIsActivated.value = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void deactivateAdvancedSearch() {
|
||||||
|
advancedSearchIsActivated.value = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void hideAdvancedSearchFormView() {
|
||||||
|
isAdvancedSearchViewOpen.value = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void hideSimpleSearchFormView() {
|
||||||
|
searchState.value = searchState.value.disableSearchState();
|
||||||
|
}
|
||||||
|
|
||||||
|
void _clearAllTextInputSimpleSearch() {
|
||||||
|
searchInputController.clear();
|
||||||
|
searchFocus.unfocus();
|
||||||
|
emailReceiveTimeType.value = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
void disableAllSearchEmail() {
|
||||||
|
_clearAllTextInputSimpleSearch();
|
||||||
|
deactivateSimpleSearch();
|
||||||
|
hideSimpleSearchFormView();
|
||||||
|
|
||||||
|
clearSearchFilter();
|
||||||
|
deactivateAdvancedSearch();
|
||||||
|
hideAdvancedSearchFormView();
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void onDone() {}
|
void onDone() {}
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import 'package:equatable/equatable.dart';
|
||||||
import 'package:jmap_dart_client/jmap/core/filter/filter.dart';
|
import 'package:jmap_dart_client/jmap/core/filter/filter.dart';
|
||||||
import 'package:jmap_dart_client/jmap/core/filter/filter_operator.dart';
|
import 'package:jmap_dart_client/jmap/core/filter/filter_operator.dart';
|
||||||
import 'package:jmap_dart_client/jmap/core/filter/operator/logic_filter_operator.dart';
|
import 'package:jmap_dart_client/jmap/core/filter/operator/logic_filter_operator.dart';
|
||||||
@@ -7,7 +8,7 @@ import 'package:model/model.dart';
|
|||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/email_receive_time_type.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/email_receive_time_type.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/domain/model/search_query.dart';
|
import 'package:tmail_ui_user/features/thread/domain/model/search_query.dart';
|
||||||
|
|
||||||
class SearchEmailFilter {
|
class SearchEmailFilter with EquatableMixin {
|
||||||
final Set<String> from;
|
final Set<String> from;
|
||||||
final Set<String> to;
|
final Set<String> to;
|
||||||
final SearchQuery? text;
|
final SearchQuery? text;
|
||||||
@@ -20,6 +21,8 @@ class SearchEmailFilter {
|
|||||||
final UTCDate? startDate;
|
final UTCDate? startDate;
|
||||||
final UTCDate? endDate;
|
final UTCDate? endDate;
|
||||||
|
|
||||||
|
factory SearchEmailFilter.initial() => SearchEmailFilter();
|
||||||
|
|
||||||
SearchEmailFilter({
|
SearchEmailFilter({
|
||||||
Set<String>? from,
|
Set<String>? from,
|
||||||
Set<String>? to,
|
Set<String>? to,
|
||||||
@@ -108,6 +111,21 @@ class SearchEmailFilter {
|
|||||||
? LogicFilterOperator(Operator.AND, listEmailCondition)
|
? LogicFilterOperator(Operator.AND, listEmailCondition)
|
||||||
: null;
|
: null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
List<Object?> get props => [
|
||||||
|
from,
|
||||||
|
to,
|
||||||
|
text,
|
||||||
|
subject,
|
||||||
|
notKeyword,
|
||||||
|
mailbox,
|
||||||
|
emailReceiveTimeType,
|
||||||
|
hasAttachment,
|
||||||
|
before,
|
||||||
|
startDate,
|
||||||
|
endDate
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
extension SearchEmailFilterExtension on SearchEmailFilter {
|
extension SearchEmailFilterExtension on SearchEmailFilter {
|
||||||
|
|||||||
+2
-2
@@ -28,13 +28,13 @@ class IconOpenAdvancedSearchWidget extends StatelessWidget {
|
|||||||
minSize: 40,
|
minSize: 40,
|
||||||
iconPadding: const EdgeInsets.only(right: 2),
|
iconPadding: const EdgeInsets.only(right: 2),
|
||||||
icon: SvgPicture.asset(_imagePaths.icFilterAdvanced,
|
icon: SvgPicture.asset(_imagePaths.icFilterAdvanced,
|
||||||
color: searchController.isAdvancedSearchViewOpen.isTrue || searchController.isAdvancedSearchHasApply.isTrue
|
color: searchController.isAdvancedSearchViewOpen.isTrue || searchController.advancedSearchIsActivated.isTrue
|
||||||
? AppColor.colorFilterMessageEnabled
|
? AppColor.colorFilterMessageEnabled
|
||||||
: AppColor.colorFilterMessageDisabled,
|
: AppColor.colorFilterMessageDisabled,
|
||||||
width: 16,
|
width: 16,
|
||||||
height: 16),
|
height: 16),
|
||||||
onTap: () {
|
onTap: () {
|
||||||
if(searchController.isAdvancedSearchViewOpen.isFalse && searchController.isAdvancedSearchHasApply.isFalse){
|
if(searchController.isAdvancedSearchViewOpen.isFalse && searchController.advancedSearchIsActivated.isFalse){
|
||||||
advancedFilterController.initSearchFilterField(context);
|
advancedFilterController.initSearchFilterField(context);
|
||||||
}
|
}
|
||||||
searchController.showAdvancedFilterView(_parentContext);
|
searchController.showAdvancedFilterView(_parentContext);
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/quick_sear
|
|||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_all_recent_search_latest_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_all_recent_search_latest_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/quick_search_email_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/quick_search_email_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/save_recent_search_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/save_recent_search_interactor.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/action/dashboard_action.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/dashboard_routes.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/dashboard_routes.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/email_receive_time_type.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/email_receive_time_type.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/quick_search_filter.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/quick_search_filter.dart';
|
||||||
@@ -583,7 +584,8 @@ class SearchEmailController extends BaseController
|
|||||||
clearAllTextInputSearchForm();
|
clearAllTextInputSearchForm();
|
||||||
clearAllResultSearch();
|
clearAllResultSearch();
|
||||||
FocusScope.of(context).unfocus();
|
FocusScope.of(context).unfocus();
|
||||||
mailboxDashBoardController.searchController.disableSearch();
|
mailboxDashBoardController.searchController.disableAllSearchEmail();
|
||||||
|
mailboxDashBoardController.dispatchAction(SelectMailboxDefaultAction());
|
||||||
mailboxDashBoardController.dispatchRoute(DashboardRoutes.thread);
|
mailboxDashBoardController.dispatchRoute(DashboardRoutes.thread);
|
||||||
SearchEmailBindings().disposeBindings();
|
SearchEmailBindings().disposeBindings();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,7 +27,6 @@ import 'package:tmail_ui_user/features/search/presentation/widgets/email_receive
|
|||||||
import 'package:tmail_ui_user/features/search/presentation/widgets/email_receive_time_cupertino_action_sheet_action_builder.dart';
|
import 'package:tmail_ui_user/features/search/presentation/widgets/email_receive_time_cupertino_action_sheet_action_builder.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/domain/state/search_email_state.dart';
|
import 'package:tmail_ui_user/features/thread/domain/state/search_email_state.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/domain/state/search_more_email_state.dart';
|
import 'package:tmail_ui_user/features/thread/domain/state/search_more_email_state.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/presentation/model/search_status.dart';
|
|
||||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/presentation/widgets/email_tile_builder.dart'
|
import 'package:tmail_ui_user/features/thread/presentation/widgets/email_tile_builder.dart'
|
||||||
if (dart.library.html) 'package:tmail_ui_user/features/thread/presentation/widgets/email_tile_web_builder.dart';
|
if (dart.library.html) 'package:tmail_ui_user/features/thread/presentation/widgets/email_tile_web_builder.dart';
|
||||||
@@ -425,9 +424,9 @@ class SearchEmailView extends GetWidget<SearchEmailController>
|
|||||||
context,
|
context,
|
||||||
listPresentationEmail[index],
|
listPresentationEmail[index],
|
||||||
controller.selectionMode.value,
|
controller.selectionMode.value,
|
||||||
SearchStatus.ACTIVE,
|
|
||||||
controller.searchQuery,
|
controller.searchQuery,
|
||||||
controller.mailboxDashBoardController.selectedEmail.value?.id == listPresentationEmail[index].id,
|
controller.mailboxDashBoardController.selectedEmail.value?.id == listPresentationEmail[index].id,
|
||||||
|
isSearchEmailRunning: true,
|
||||||
padding: SearchEmailUtils.getPaddingSearchResultList(context, _responsiveUtils),
|
padding: SearchEmailUtils.getPaddingSearchResultList(context, _responsiveUtils),
|
||||||
paddingDivider: SearchEmailUtils.getPaddingDividerSearchResultList(context, _responsiveUtils),
|
paddingDivider: SearchEmailUtils.getPaddingDividerSearchResultList(context, _responsiveUtils),
|
||||||
mailboxCurrent: listPresentationEmail[index].findMailboxContain(
|
mailboxCurrent: listPresentationEmail[index].findMailboxContain(
|
||||||
|
|||||||
@@ -14,7 +14,6 @@ import 'package:model/extensions/presentation_email_extension.dart';
|
|||||||
import 'package:model/mailbox/presentation_mailbox.dart';
|
import 'package:model/mailbox/presentation_mailbox.dart';
|
||||||
import 'package:model/mailbox/select_mode.dart';
|
import 'package:model/mailbox/select_mode.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/domain/model/search_query.dart';
|
import 'package:tmail_ui_user/features/thread/domain/model/search_query.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/presentation/model/search_status.dart';
|
|
||||||
|
|
||||||
typedef OnPressEmailActionClick = void Function(EmailActionType, PresentationEmail);
|
typedef OnPressEmailActionClick = void Function(EmailActionType, PresentationEmail);
|
||||||
typedef OnMoreActionClick = void Function(PresentationEmail, RelativeRect?);
|
typedef OnMoreActionClick = void Function(PresentationEmail, RelativeRect?);
|
||||||
@@ -25,11 +24,10 @@ mixin BaseEmailItemTile {
|
|||||||
final imagePaths = Get.find<ImagePaths>();
|
final imagePaths = Get.find<ImagePaths>();
|
||||||
|
|
||||||
Widget buildMailboxContain(
|
Widget buildMailboxContain(
|
||||||
SearchStatus state,
|
bool isSearchEmailRunning,
|
||||||
bool advancedSearchActivated,
|
PresentationEmail email
|
||||||
PresentationEmail email
|
|
||||||
) {
|
) {
|
||||||
if (hasMailboxLabel(state, advancedSearchActivated, email)) {
|
if (hasMailboxLabel(isSearchEmailRunning, email)) {
|
||||||
return Container(
|
return Container(
|
||||||
margin: const EdgeInsets.only(left: 8),
|
margin: const EdgeInsets.only(left: 8),
|
||||||
padding: const EdgeInsets.symmetric(
|
padding: const EdgeInsets.symmetric(
|
||||||
@@ -55,8 +53,9 @@ mixin BaseEmailItemTile {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isSearchEnabled(SearchStatus state, bool advancedSearchActivated, SearchQuery? query) =>
|
bool isSearchEnabled(bool isSearchEmailRunning, SearchQuery? query) {
|
||||||
(state == SearchStatus.ACTIVE || advancedSearchActivated) && query?.value.isNotEmpty == true;
|
return isSearchEmailRunning && query?.value.isNotEmpty == true;
|
||||||
|
}
|
||||||
|
|
||||||
FontWeight buildFontForReadEmail(PresentationEmail email) =>
|
FontWeight buildFontForReadEmail(PresentationEmail email) =>
|
||||||
!email.hasRead ? FontWeight.w600 : FontWeight.normal;
|
!email.hasRead ? FontWeight.w600 : FontWeight.normal;
|
||||||
@@ -64,8 +63,8 @@ mixin BaseEmailItemTile {
|
|||||||
Color buildTextColorForReadEmail(PresentationEmail email) =>
|
Color buildTextColorForReadEmail(PresentationEmail email) =>
|
||||||
email.hasRead ? AppColor.colorContentEmail : AppColor.colorNameEmail;
|
email.hasRead ? AppColor.colorContentEmail : AppColor.colorNameEmail;
|
||||||
|
|
||||||
bool hasMailboxLabel(SearchStatus state, bool advancedSearchActivated, PresentationEmail email) {
|
bool hasMailboxLabel(bool isSearchEmailRunning, PresentationEmail email) {
|
||||||
return (state == SearchStatus.ACTIVE || advancedSearchActivated) && email.mailboxName.isNotEmpty;
|
return isSearchEmailRunning && email.mailboxName.isNotEmpty;
|
||||||
}
|
}
|
||||||
|
|
||||||
String informationSender(PresentationEmail email, PresentationMailbox? mailbox) {
|
String informationSender(PresentationEmail email, PresentationMailbox? mailbox) {
|
||||||
@@ -79,11 +78,10 @@ mixin BaseEmailItemTile {
|
|||||||
Widget buildInformationSender(
|
Widget buildInformationSender(
|
||||||
PresentationEmail email,
|
PresentationEmail email,
|
||||||
PresentationMailbox? mailbox,
|
PresentationMailbox? mailbox,
|
||||||
SearchStatus state,
|
bool isSearchEmailRunning,
|
||||||
bool advancedSearchActivated,
|
|
||||||
SearchQuery? query
|
SearchQuery? query
|
||||||
) {
|
) {
|
||||||
if (isSearchEnabled(state, advancedSearchActivated, query)) {
|
if (isSearchEnabled(isSearchEmailRunning, query)) {
|
||||||
return RichTextBuilder(
|
return RichTextBuilder(
|
||||||
informationSender(email, mailbox),
|
informationSender(email, mailbox),
|
||||||
query?.value ?? '',
|
query?.value ?? '',
|
||||||
@@ -113,12 +111,11 @@ mixin BaseEmailItemTile {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Widget buildEmailTitle(
|
Widget buildEmailTitle(
|
||||||
PresentationEmail email,
|
PresentationEmail email,
|
||||||
SearchStatus state,
|
bool isSearchEmailRunning,
|
||||||
bool advancedSearchActivated,
|
SearchQuery? query
|
||||||
SearchQuery? query
|
|
||||||
) {
|
) {
|
||||||
if (isSearchEnabled(state, advancedSearchActivated, query)) {
|
if (isSearchEnabled(isSearchEmailRunning, query)) {
|
||||||
return RichTextBuilder(
|
return RichTextBuilder(
|
||||||
email.getEmailTitle(),
|
email.getEmailTitle(),
|
||||||
query?.value ?? '',
|
query?.value ?? '',
|
||||||
@@ -147,12 +144,11 @@ mixin BaseEmailItemTile {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Widget buildEmailPartialContent(
|
Widget buildEmailPartialContent(
|
||||||
PresentationEmail email,
|
PresentationEmail email,
|
||||||
SearchStatus state,
|
bool isSearchEmailRunning,
|
||||||
bool advancedSearchActivated,
|
SearchQuery? query
|
||||||
SearchQuery? query
|
|
||||||
) {
|
) {
|
||||||
if (isSearchEnabled(state, advancedSearchActivated, query)) {
|
if (isSearchEnabled(isSearchEmailRunning, query)) {
|
||||||
return RichTextBuilder(
|
return RichTextBuilder(
|
||||||
email.getPartialContent(),
|
email.getPartialContent(),
|
||||||
query?.value ?? '',
|
query?.value ?? '',
|
||||||
|
|||||||
@@ -243,7 +243,6 @@ class ThreadController extends BaseController {
|
|||||||
if (_currentMailboxId != mailbox.id) {
|
if (_currentMailboxId != mailbox.id) {
|
||||||
_currentMailboxId = mailbox.id;
|
_currentMailboxId = mailbox.id;
|
||||||
_resetToOriginalValue();
|
_resetToOriginalValue();
|
||||||
disableSearch();
|
|
||||||
_getAllEmail();
|
_getAllEmail();
|
||||||
}
|
}
|
||||||
} else if (mailbox == null) { // disable current mailbox when search active
|
} else if (mailbox == null) { // disable current mailbox when search active
|
||||||
@@ -292,9 +291,6 @@ class ThreadController extends BaseController {
|
|||||||
action.presentationEmail,
|
action.presentationEmail,
|
||||||
mailboxContain: mailboxContain);
|
mailboxContain: mailboxContain);
|
||||||
mailboxDashBoardController.clearDashBoardAction();
|
mailboxDashBoardController.clearDashBoardAction();
|
||||||
} else if (action is DisableSearchEmailAction) {
|
|
||||||
closeSearchEmailAction();
|
|
||||||
mailboxDashBoardController.clearDashBoardAction();
|
|
||||||
} else if (action is StartSearchEmailAction) {
|
} else if (action is StartSearchEmailAction) {
|
||||||
_searchEmail();
|
_searchEmail();
|
||||||
mailboxDashBoardController.clearDashBoardAction();
|
mailboxDashBoardController.clearDashBoardAction();
|
||||||
@@ -639,7 +635,7 @@ class ThreadController extends BaseController {
|
|||||||
message: newFilterOption.getMessageToast(context),
|
message: newFilterOption.getMessageToast(context),
|
||||||
icon: newFilterOption.getIconToast(_imagePaths));
|
icon: newFilterOption.getIconToast(_imagePaths));
|
||||||
|
|
||||||
if (isSearchActive() || searchController.isAdvancedSearchHasApply.isTrue) {
|
if (isSearchActive() || searchController.advancedSearchIsActivated.isTrue) {
|
||||||
_searchEmail(filterMessageOption: _getFilterCondition());
|
_searchEmail(filterMessageOption: _getFilterCondition());
|
||||||
} else {
|
} else {
|
||||||
refreshAllEmail();
|
refreshAllEmail();
|
||||||
@@ -926,34 +922,16 @@ class ThreadController extends BaseController {
|
|||||||
|
|
||||||
bool isSearchActive() => searchController.isSearchActive();
|
bool isSearchActive() => searchController.isSearchActive();
|
||||||
|
|
||||||
bool isAdvanceSearchActive() => searchController.isAdvanceSearchActive();
|
|
||||||
|
|
||||||
|
|
||||||
bool get isAllSearchInActive => !searchController.isSearchActive() &&
|
bool get isAllSearchInActive => !searchController.isSearchActive() &&
|
||||||
searchController.isAdvancedSearchViewOpen.isFalse;
|
searchController.isAdvancedSearchViewOpen.isFalse;
|
||||||
|
|
||||||
void enableSearch(BuildContext context) {
|
|
||||||
searchController.enableSearch();
|
|
||||||
}
|
|
||||||
|
|
||||||
void disableSearch() {
|
|
||||||
searchController.searchIsActive.value = false;
|
|
||||||
searchController.disableSearch();
|
|
||||||
}
|
|
||||||
|
|
||||||
void closeSearchEmailAction() {
|
|
||||||
disableSearch();
|
|
||||||
cancelSelectEmail();
|
|
||||||
refreshAllEmail();
|
|
||||||
}
|
|
||||||
|
|
||||||
void clearTextSearch() {
|
void clearTextSearch() {
|
||||||
searchController.clearTextSearch();
|
searchController.clearTextSearch();
|
||||||
}
|
}
|
||||||
|
|
||||||
void _searchEmail({UnsignedInt? limit, EmailFilterCondition? filterMessageOption}) {
|
void _searchEmail({UnsignedInt? limit, EmailFilterCondition? filterMessageOption}) {
|
||||||
if (_accountId != null && searchQuery != null) {
|
if (_accountId != null && searchQuery != null) {
|
||||||
searchController.searchIsActive.value = true;
|
searchController.activateSimpleSearch();
|
||||||
|
|
||||||
filterMessageOption = EmailFilterCondition(
|
filterMessageOption = EmailFilterCondition(
|
||||||
notKeyword: filterMessageOption?.notKeyword,
|
notKeyword: filterMessageOption?.notKeyword,
|
||||||
|
|||||||
@@ -84,22 +84,15 @@ class ThreadView extends GetWidget<ThreadController> with AppLoaderMixin,
|
|||||||
}
|
}
|
||||||
|
|
||||||
Widget _buildSearchBarView(BuildContext context) {
|
Widget _buildSearchBarView(BuildContext context) {
|
||||||
return Obx(() {
|
return Container(
|
||||||
if (!controller.searchController.isSearchActive()) {
|
color: Colors.white,
|
||||||
return Container(
|
padding: EdgeInsets.symmetric(
|
||||||
color: Colors.white,
|
horizontal: 16,
|
||||||
padding: EdgeInsets.symmetric(
|
vertical: _responsiveUtils.isWebNotDesktop(context) ? 8 : 0),
|
||||||
horizontal: 16,
|
margin: const EdgeInsets.only(bottom: !BuildUtils.isWeb ? 16 : 0),
|
||||||
vertical: _responsiveUtils.isWebNotDesktop(context) ? 8 : 0),
|
child: SearchBarView(_imagePaths,
|
||||||
margin: const EdgeInsets.only(
|
hintTextSearch: AppLocalizations.of(context).search_emails,
|
||||||
bottom: !BuildUtils.isWeb ? 16 : 0),
|
onOpenSearchViewAction: controller.goToSearchView));
|
||||||
child: SearchBarView(_imagePaths,
|
|
||||||
hintTextSearch: AppLocalizations.of(context).search_emails,
|
|
||||||
onOpenSearchViewAction: () => controller.goToSearchView()));
|
|
||||||
} else {
|
|
||||||
return const SizedBox.shrink();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _buildVacationNotificationMessage(BuildContext context) {
|
Widget _buildVacationNotificationMessage(BuildContext context) {
|
||||||
@@ -251,7 +244,7 @@ class ThreadView extends GetWidget<ThreadController> with AppLoaderMixin,
|
|||||||
return Obx(() => controller.viewState.value.fold(
|
return Obx(() => controller.viewState.value.fold(
|
||||||
(failure) => const SizedBox.shrink(),
|
(failure) => const SizedBox.shrink(),
|
||||||
(success) {
|
(success) {
|
||||||
if (controller.isSearchActive() || controller.isAdvanceSearchActive()) {
|
if (controller.isSearchActive() || controller.searchController.advancedSearchIsActivated.isTrue) {
|
||||||
return success is SearchingState
|
return success is SearchingState
|
||||||
? Padding(padding: const EdgeInsets.symmetric(vertical: 16), child: loadingWidget)
|
? Padding(padding: const EdgeInsets.symmetric(vertical: 16), child: loadingWidget)
|
||||||
: const SizedBox.shrink();
|
: const SizedBox.shrink();
|
||||||
@@ -318,7 +311,7 @@ class ThreadView extends GetWidget<ThreadController> with AppLoaderMixin,
|
|||||||
&& !controller.isLoadingMore
|
&& !controller.isLoadingMore
|
||||||
&& scrollInfo.metrics.pixels == scrollInfo.metrics.maxScrollExtent
|
&& scrollInfo.metrics.pixels == scrollInfo.metrics.maxScrollExtent
|
||||||
) {
|
) {
|
||||||
if (controller.isSearchActive() || controller.isAdvanceSearchActive()) {
|
if (controller.isSearchActive() || controller.searchController.advancedSearchIsActivated.isTrue) {
|
||||||
controller.searchMoreEmails();
|
controller.searchMoreEmails();
|
||||||
} else {
|
} else {
|
||||||
controller.loadMoreEmails();
|
controller.loadMoreEmails();
|
||||||
@@ -341,13 +334,12 @@ class ThreadView extends GetWidget<ThreadController> with AppLoaderMixin,
|
|||||||
context,
|
context,
|
||||||
listPresentationEmail[index],
|
listPresentationEmail[index],
|
||||||
controller.mailboxDashBoardController.currentSelectMode.value,
|
controller.mailboxDashBoardController.currentSelectMode.value,
|
||||||
controller.searchController.searchState.value.searchStatus,
|
|
||||||
controller.searchQuery,
|
controller.searchQuery,
|
||||||
controller.mailboxDashBoardController.selectedEmail.value?.id == listPresentationEmail[index].id,
|
controller.mailboxDashBoardController.selectedEmail.value?.id == listPresentationEmail[index].id,
|
||||||
mailboxCurrent: controller.searchController.isSearchEmailRunning
|
mailboxCurrent: controller.searchController.isSearchEmailRunning
|
||||||
? listPresentationEmail[index].findMailboxContain(controller.mailboxDashBoardController.mapMailboxById)
|
? listPresentationEmail[index].findMailboxContain(controller.mailboxDashBoardController.mapMailboxById)
|
||||||
: controller.currentMailbox,
|
: controller.currentMailbox,
|
||||||
advancedSearchActivated: controller.searchController.isAdvancedSearchHasApply.isTrue)
|
isSearchEmailRunning: controller.searchController.isSearchEmailRunning)
|
||||||
..addOnPressEmailActionClick((action, email) =>
|
..addOnPressEmailActionClick((action, email) =>
|
||||||
controller.pressEmailAction(
|
controller.pressEmailAction(
|
||||||
context,
|
context,
|
||||||
@@ -358,22 +350,22 @@ class ThreadView extends GetWidget<ThreadController> with AppLoaderMixin,
|
|||||||
: controller.currentMailbox))
|
: controller.currentMailbox))
|
||||||
..addOnMoreActionClick((email, position) => _responsiveUtils.isMobile(context)
|
..addOnMoreActionClick((email, position) => _responsiveUtils.isMobile(context)
|
||||||
? controller.openContextMenuAction(context, _contextMenuActionTile(context, email))
|
? controller.openContextMenuAction(context, _contextMenuActionTile(context, email))
|
||||||
: controller.openPopupMenuAction(context, position, _popupMenuActionTile(context, email))))
|
: controller.openPopupMenuAction(context, position, _popupMenuActionTile(context, email)))
|
||||||
.build(),
|
).build(),
|
||||||
feedback: _buildFeedBackWidget(context),
|
feedback: _buildFeedBackWidget(context),
|
||||||
childWhenDragging: (EmailTileBuilder(
|
childWhenDragging: (EmailTileBuilder(
|
||||||
context,
|
context,
|
||||||
listPresentationEmail[index],
|
listPresentationEmail[index],
|
||||||
controller.mailboxDashBoardController.currentSelectMode.value,
|
controller.mailboxDashBoardController.currentSelectMode.value,
|
||||||
controller.searchController.searchState.value.searchStatus,
|
|
||||||
controller.searchQuery,
|
controller.searchQuery,
|
||||||
controller.mailboxDashBoardController.selectedEmail.value?.id == listPresentationEmail[index].id,
|
controller.mailboxDashBoardController.selectedEmail.value?.id == listPresentationEmail[index].id,
|
||||||
mailboxCurrent: controller.searchController.isSearchEmailRunning
|
mailboxCurrent: controller.searchController.isSearchEmailRunning
|
||||||
? listPresentationEmail[index].findMailboxContain(
|
? listPresentationEmail[index].findMailboxContain(
|
||||||
controller.mailboxDashBoardController.mapMailboxById)
|
controller.mailboxDashBoardController.mapMailboxById)
|
||||||
: controller.currentMailbox,
|
: controller.currentMailbox,
|
||||||
advancedSearchActivated: controller.searchController.isAdvancedSearchHasApply.isTrue, isDrag: true))
|
isSearchEmailRunning: controller.searchController.isSearchEmailRunning,
|
||||||
.build(),
|
isDrag: true)
|
||||||
|
).build(),
|
||||||
dragAnchorStrategy: pointerDragAnchorStrategy,
|
dragAnchorStrategy: pointerDragAnchorStrategy,
|
||||||
onDragStarted: () {
|
onDragStarted: () {
|
||||||
controller.calculateDragValue(listPresentationEmail[index]);
|
controller.calculateDragValue(listPresentationEmail[index]);
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
import 'package:core/core.dart';
|
import 'package:core/presentation/extensions/color_extension.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_svg/flutter_svg.dart';
|
import 'package:flutter_svg/flutter_svg.dart';
|
||||||
import 'package:model/model.dart';
|
import 'package:model/email/email_action_type.dart';
|
||||||
|
import 'package:model/email/presentation_email.dart';
|
||||||
|
import 'package:model/mailbox/presentation_mailbox.dart';
|
||||||
|
import 'package:model/mailbox/select_mode.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/domain/model/search_query.dart';
|
import 'package:tmail_ui_user/features/thread/domain/model/search_query.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/presentation/mixin/base_email_item_tile.dart';
|
import 'package:tmail_ui_user/features/thread/presentation/mixin/base_email_item_tile.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/presentation/model/search_status.dart';
|
|
||||||
|
|
||||||
class EmailTileBuilder with BaseEmailItemTile {
|
class EmailTileBuilder with BaseEmailItemTile {
|
||||||
|
|
||||||
@@ -12,9 +14,8 @@ class EmailTileBuilder with BaseEmailItemTile {
|
|||||||
final BuildContext _context;
|
final BuildContext _context;
|
||||||
final SelectMode _selectModeAll;
|
final SelectMode _selectModeAll;
|
||||||
final PresentationMailbox? mailboxCurrent;
|
final PresentationMailbox? mailboxCurrent;
|
||||||
final SearchStatus _searchStatus;
|
|
||||||
final SearchQuery? _searchQuery;
|
final SearchQuery? _searchQuery;
|
||||||
final bool advancedSearchActivated;
|
final bool isSearchEmailRunning;
|
||||||
final EdgeInsets? padding;
|
final EdgeInsets? padding;
|
||||||
final EdgeInsets? paddingDivider;
|
final EdgeInsets? paddingDivider;
|
||||||
final bool isDrag;
|
final bool isDrag;
|
||||||
@@ -26,11 +27,10 @@ class EmailTileBuilder with BaseEmailItemTile {
|
|||||||
this._context,
|
this._context,
|
||||||
this._presentationEmail,
|
this._presentationEmail,
|
||||||
this._selectModeAll,
|
this._selectModeAll,
|
||||||
this._searchStatus,
|
|
||||||
this._searchQuery,
|
this._searchQuery,
|
||||||
this._isShowingEmailContent,
|
this._isShowingEmailContent,
|
||||||
{
|
{
|
||||||
this.advancedSearchActivated = false,
|
this.isSearchEmailRunning = false,
|
||||||
this.mailboxCurrent,
|
this.mailboxCurrent,
|
||||||
this.padding,
|
this.padding,
|
||||||
this.paddingDivider,
|
this.paddingDivider,
|
||||||
@@ -82,11 +82,10 @@ class EmailTileBuilder with BaseEmailItemTile {
|
|||||||
height: 9,
|
height: 9,
|
||||||
fit: BoxFit.fill)),
|
fit: BoxFit.fill)),
|
||||||
Expanded(child: buildInformationSender(
|
Expanded(child: buildInformationSender(
|
||||||
_presentationEmail,
|
_presentationEmail,
|
||||||
mailboxCurrent,
|
mailboxCurrent,
|
||||||
_searchStatus,
|
isSearchEmailRunning,
|
||||||
advancedSearchActivated,
|
_searchQuery)),
|
||||||
_searchQuery)),
|
|
||||||
if (_presentationEmail.hasAttachment == true)
|
if (_presentationEmail.hasAttachment == true)
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.only(left: 8),
|
padding: const EdgeInsets.only(left: 8),
|
||||||
@@ -107,14 +106,12 @@ class EmailTileBuilder with BaseEmailItemTile {
|
|||||||
mainAxisSize: MainAxisSize.min,
|
mainAxisSize: MainAxisSize.min,
|
||||||
children: [
|
children: [
|
||||||
Expanded(child: buildEmailTitle(
|
Expanded(child: buildEmailTitle(
|
||||||
_presentationEmail,
|
_presentationEmail,
|
||||||
_searchStatus,
|
isSearchEmailRunning,
|
||||||
advancedSearchActivated,
|
_searchQuery)),
|
||||||
_searchQuery)),
|
|
||||||
buildMailboxContain(
|
buildMailboxContain(
|
||||||
_searchStatus,
|
isSearchEmailRunning,
|
||||||
advancedSearchActivated,
|
_presentationEmail),
|
||||||
_presentationEmail),
|
|
||||||
if (_presentationEmail.hasStarred)
|
if (_presentationEmail.hasStarred)
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.only(left: 8),
|
padding: const EdgeInsets.only(left: 8),
|
||||||
@@ -126,10 +123,9 @@ class EmailTileBuilder with BaseEmailItemTile {
|
|||||||
padding: const EdgeInsets.only(top: 6),
|
padding: const EdgeInsets.only(top: 6),
|
||||||
child: Row(children: [
|
child: Row(children: [
|
||||||
Expanded(child: buildEmailPartialContent(
|
Expanded(child: buildEmailPartialContent(
|
||||||
_presentationEmail,
|
_presentationEmail,
|
||||||
_searchStatus,
|
isSearchEmailRunning,
|
||||||
advancedSearchActivated,
|
_searchQuery)),
|
||||||
_searchQuery)),
|
|
||||||
])
|
])
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -1,11 +1,15 @@
|
|||||||
|
|
||||||
import 'package:core/core.dart';
|
import 'package:core/presentation/extensions/color_extension.dart';
|
||||||
|
import 'package:core/presentation/views/button/icon_button_web.dart';
|
||||||
|
import 'package:core/presentation/views/responsive/responsive_widget.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_svg/flutter_svg.dart';
|
import 'package:flutter_svg/flutter_svg.dart';
|
||||||
import 'package:model/model.dart';
|
import 'package:model/email/email_action_type.dart';
|
||||||
|
import 'package:model/email/presentation_email.dart';
|
||||||
|
import 'package:model/mailbox/presentation_mailbox.dart';
|
||||||
|
import 'package:model/mailbox/select_mode.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/domain/model/search_query.dart';
|
import 'package:tmail_ui_user/features/thread/domain/model/search_query.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/presentation/mixin/base_email_item_tile.dart';
|
import 'package:tmail_ui_user/features/thread/presentation/mixin/base_email_item_tile.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/presentation/model/search_status.dart';
|
|
||||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
|
|
||||||
class EmailTileBuilder with BaseEmailItemTile {
|
class EmailTileBuilder with BaseEmailItemTile {
|
||||||
@@ -14,9 +18,8 @@ class EmailTileBuilder with BaseEmailItemTile {
|
|||||||
final BuildContext _context;
|
final BuildContext _context;
|
||||||
final SelectMode _selectModeAll;
|
final SelectMode _selectModeAll;
|
||||||
final PresentationMailbox? mailboxCurrent;
|
final PresentationMailbox? mailboxCurrent;
|
||||||
final SearchStatus _searchStatus;
|
|
||||||
final SearchQuery? _searchQuery;
|
final SearchQuery? _searchQuery;
|
||||||
final bool advancedSearchActivated;
|
final bool isSearchEmailRunning;
|
||||||
final EdgeInsets? padding;
|
final EdgeInsets? padding;
|
||||||
final EdgeInsets? paddingDivider;
|
final EdgeInsets? paddingDivider;
|
||||||
final bool isDrag;
|
final bool isDrag;
|
||||||
@@ -32,11 +35,10 @@ class EmailTileBuilder with BaseEmailItemTile {
|
|||||||
this._context,
|
this._context,
|
||||||
this._presentationEmail,
|
this._presentationEmail,
|
||||||
this._selectModeAll,
|
this._selectModeAll,
|
||||||
this._searchStatus,
|
|
||||||
this._searchQuery,
|
this._searchQuery,
|
||||||
this._isShowingEmailContent,
|
this._isShowingEmailContent,
|
||||||
{
|
{
|
||||||
this.advancedSearchActivated = false,
|
this.isSearchEmailRunning = false,
|
||||||
this.mailboxCurrent,
|
this.mailboxCurrent,
|
||||||
this.padding,
|
this.padding,
|
||||||
this.paddingDivider,
|
this.paddingDivider,
|
||||||
@@ -137,11 +139,11 @@ class EmailTileBuilder with BaseEmailItemTile {
|
|||||||
height: 9,
|
height: 9,
|
||||||
fit: BoxFit.fill)),
|
fit: BoxFit.fill)),
|
||||||
Expanded(child: buildInformationSender(
|
Expanded(child: buildInformationSender(
|
||||||
_presentationEmail,
|
_presentationEmail,
|
||||||
mailboxCurrent,
|
mailboxCurrent,
|
||||||
_searchStatus,
|
isSearchEmailRunning,
|
||||||
advancedSearchActivated,
|
_searchQuery
|
||||||
_searchQuery)),
|
)),
|
||||||
if (_presentationEmail.hasAttachment == true)
|
if (_presentationEmail.hasAttachment == true)
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.only(left: 8),
|
padding: const EdgeInsets.only(left: 8),
|
||||||
@@ -160,14 +162,14 @@ class EmailTileBuilder with BaseEmailItemTile {
|
|||||||
mainAxisSize: MainAxisSize.min,
|
mainAxisSize: MainAxisSize.min,
|
||||||
children: [
|
children: [
|
||||||
Expanded(child: buildEmailTitle(
|
Expanded(child: buildEmailTitle(
|
||||||
_presentationEmail,
|
_presentationEmail,
|
||||||
_searchStatus,
|
isSearchEmailRunning,
|
||||||
advancedSearchActivated,
|
_searchQuery
|
||||||
_searchQuery)),
|
)),
|
||||||
buildMailboxContain(
|
buildMailboxContain(
|
||||||
_searchStatus,
|
isSearchEmailRunning,
|
||||||
advancedSearchActivated,
|
_presentationEmail
|
||||||
_presentationEmail),
|
),
|
||||||
if (_presentationEmail.hasStarred)
|
if (_presentationEmail.hasStarred)
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.only(left: 8),
|
padding: const EdgeInsets.only(left: 8),
|
||||||
@@ -178,10 +180,10 @@ class EmailTileBuilder with BaseEmailItemTile {
|
|||||||
const SizedBox(height: 8),
|
const SizedBox(height: 8),
|
||||||
Row(children: [
|
Row(children: [
|
||||||
Expanded(child: buildEmailPartialContent(
|
Expanded(child: buildEmailPartialContent(
|
||||||
_presentationEmail,
|
_presentationEmail,
|
||||||
_searchStatus,
|
isSearchEmailRunning,
|
||||||
advancedSearchActivated,
|
_searchQuery
|
||||||
_searchQuery)),
|
)),
|
||||||
]),
|
]),
|
||||||
]),
|
]),
|
||||||
)
|
)
|
||||||
@@ -233,11 +235,11 @@ class EmailTileBuilder with BaseEmailItemTile {
|
|||||||
height: 9,
|
height: 9,
|
||||||
fit: BoxFit.fill)),
|
fit: BoxFit.fill)),
|
||||||
Expanded(child: buildInformationSender(
|
Expanded(child: buildInformationSender(
|
||||||
_presentationEmail,
|
_presentationEmail,
|
||||||
mailboxCurrent,
|
mailboxCurrent,
|
||||||
_searchStatus,
|
isSearchEmailRunning,
|
||||||
advancedSearchActivated,
|
_searchQuery
|
||||||
_searchQuery)),
|
)),
|
||||||
if (isHoverItem)
|
if (isHoverItem)
|
||||||
const SizedBox(width: 120)
|
const SizedBox(width: 120)
|
||||||
else
|
else
|
||||||
@@ -248,14 +250,14 @@ class EmailTileBuilder with BaseEmailItemTile {
|
|||||||
mainAxisSize: MainAxisSize.min,
|
mainAxisSize: MainAxisSize.min,
|
||||||
children: [
|
children: [
|
||||||
Expanded(child: buildEmailTitle(
|
Expanded(child: buildEmailTitle(
|
||||||
_presentationEmail,
|
_presentationEmail,
|
||||||
_searchStatus,
|
isSearchEmailRunning,
|
||||||
advancedSearchActivated,
|
_searchQuery
|
||||||
_searchQuery)),
|
)),
|
||||||
buildMailboxContain(
|
buildMailboxContain(
|
||||||
_searchStatus,
|
isSearchEmailRunning,
|
||||||
advancedSearchActivated,
|
_presentationEmail
|
||||||
_presentationEmail),
|
),
|
||||||
if (_presentationEmail.hasStarred)
|
if (_presentationEmail.hasStarred)
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.only(left: 8),
|
padding: const EdgeInsets.only(left: 8),
|
||||||
@@ -266,10 +268,10 @@ class EmailTileBuilder with BaseEmailItemTile {
|
|||||||
const SizedBox(height: 8),
|
const SizedBox(height: 8),
|
||||||
Row(children: [
|
Row(children: [
|
||||||
Expanded(child: buildEmailPartialContent(
|
Expanded(child: buildEmailPartialContent(
|
||||||
_presentationEmail,
|
_presentationEmail,
|
||||||
_searchStatus,
|
isSearchEmailRunning,
|
||||||
advancedSearchActivated,
|
_searchQuery
|
||||||
_searchQuery)),
|
)),
|
||||||
]),
|
]),
|
||||||
]),
|
]),
|
||||||
if (_selectModeAll == SelectMode.INACTIVE)
|
if (_selectModeAll == SelectMode.INACTIVE)
|
||||||
@@ -354,11 +356,11 @@ class EmailTileBuilder with BaseEmailItemTile {
|
|||||||
SizedBox(
|
SizedBox(
|
||||||
width: 160,
|
width: 160,
|
||||||
child: buildInformationSender(
|
child: buildInformationSender(
|
||||||
_presentationEmail,
|
_presentationEmail,
|
||||||
mailboxCurrent,
|
mailboxCurrent,
|
||||||
_searchStatus,
|
isSearchEmailRunning,
|
||||||
advancedSearchActivated,
|
_searchQuery
|
||||||
_searchQuery)),
|
)),
|
||||||
const SizedBox(width: 24),
|
const SizedBox(width: 24),
|
||||||
Expanded(child: _buildSubjectAndContent()),
|
Expanded(child: _buildSubjectAndContent()),
|
||||||
const SizedBox(width: 16),
|
const SizedBox(width: 16),
|
||||||
@@ -476,9 +478,9 @@ class EmailTileBuilder with BaseEmailItemTile {
|
|||||||
Widget _buildDateTimeForDesktopScreen() {
|
Widget _buildDateTimeForDesktopScreen() {
|
||||||
return Row(children: [
|
return Row(children: [
|
||||||
buildMailboxContain(
|
buildMailboxContain(
|
||||||
_searchStatus,
|
isSearchEmailRunning,
|
||||||
advancedSearchActivated,
|
_presentationEmail
|
||||||
_presentationEmail),
|
),
|
||||||
if (_presentationEmail.hasAttachment == true)
|
if (_presentationEmail.hasAttachment == true)
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.only(left: 8),
|
padding: const EdgeInsets.only(left: 8),
|
||||||
@@ -508,19 +510,19 @@ class EmailTileBuilder with BaseEmailItemTile {
|
|||||||
return Row(children: [
|
return Row(children: [
|
||||||
if (_presentationEmail.getEmailTitle().isNotEmpty)
|
if (_presentationEmail.getEmailTitle().isNotEmpty)
|
||||||
Container(
|
Container(
|
||||||
constraints: BoxConstraints(maxWidth: constraints.maxWidth / 2),
|
constraints: BoxConstraints(maxWidth: constraints.maxWidth / 2),
|
||||||
padding: const EdgeInsets.only(right: 12),
|
padding: const EdgeInsets.only(right: 12),
|
||||||
child: buildEmailTitle(
|
child: buildEmailTitle(
|
||||||
_presentationEmail,
|
|
||||||
_searchStatus,
|
|
||||||
advancedSearchActivated,
|
|
||||||
_searchQuery)),
|
|
||||||
Expanded(child: Container(
|
|
||||||
child: buildEmailPartialContent(
|
|
||||||
_presentationEmail,
|
_presentationEmail,
|
||||||
_searchStatus,
|
isSearchEmailRunning,
|
||||||
advancedSearchActivated,
|
_searchQuery
|
||||||
_searchQuery))
|
)),
|
||||||
|
Expanded(child: Container(
|
||||||
|
child: buildEmailPartialContent(
|
||||||
|
_presentationEmail,
|
||||||
|
isSearchEmailRunning,
|
||||||
|
_searchQuery
|
||||||
|
))
|
||||||
),
|
),
|
||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user