refactor code UI follow refactor code controller
This commit is contained in:
@@ -339,8 +339,8 @@ class MailboxController extends BaseMailboxController {
|
|||||||
mailboxDashBoardController.setSelectedMailbox(presentationMailboxSelected);
|
mailboxDashBoardController.setSelectedMailbox(presentationMailboxSelected);
|
||||||
mailboxDashBoardController.clearSelectedEmail();
|
mailboxDashBoardController.clearSelectedEmail();
|
||||||
|
|
||||||
if (mailboxDashBoardController.isSearchActive()) {
|
if (mailboxDashBoardController.searchController.isSearchActive()) {
|
||||||
mailboxDashBoardController.disableSearch();
|
mailboxDashBoardController.searchController.disableSearch();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!_responsiveUtils.isDesktop(context) && !_responsiveUtils.isTabletLarge(context)) {
|
if (!_responsiveUtils.isDesktop(context) && !_responsiveUtils.isTabletLarge(context)) {
|
||||||
|
|||||||
@@ -20,14 +20,16 @@ abstract class BaseMailboxDashBoardView extends GetWidget<MailboxDashBoardContro
|
|||||||
Widget buildQuickSearchFilterButton(
|
Widget buildQuickSearchFilterButton(
|
||||||
BuildContext context, QuickSearchFilter filter) {
|
BuildContext context, QuickSearchFilter filter) {
|
||||||
return Obx(() {
|
return Obx(() {
|
||||||
|
final isSelected = controller.searchController.checkQuickSearchFilterSelected(quickSearchFilter: filter);
|
||||||
|
|
||||||
return Container(
|
return Container(
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
borderRadius: BorderRadius.circular(10),
|
borderRadius: BorderRadius.circular(10),
|
||||||
color: filter.getBackgroundColor(controller.listFilterQuickSearch)),
|
color: filter.getBackgroundColor(isSelected)),
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8),
|
padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8),
|
||||||
child: Row(mainAxisAlignment: MainAxisAlignment.center, children: [
|
child: Row(mainAxisAlignment: MainAxisAlignment.center, children: [
|
||||||
SvgPicture.asset(
|
SvgPicture.asset(
|
||||||
filter.getIcon(imagePaths, controller.listFilterQuickSearch),
|
filter.getIcon(imagePaths, isSelected),
|
||||||
width: 16,
|
width: 16,
|
||||||
height: 16,
|
height: 16,
|
||||||
fit: BoxFit.fill),
|
fit: BoxFit.fill),
|
||||||
@@ -36,7 +38,7 @@ abstract class BaseMailboxDashBoardView extends GetWidget<MailboxDashBoardContro
|
|||||||
filter.getTitle(context, receiveTimeType: controller.emailReceiveTimeType.value),
|
filter.getTitle(context, receiveTimeType: controller.emailReceiveTimeType.value),
|
||||||
maxLines: 1,
|
maxLines: 1,
|
||||||
overflow: TextOverflow.ellipsis,
|
overflow: TextOverflow.ellipsis,
|
||||||
style: filter.getTextStyle(controller.listFilterQuickSearch),
|
style: filter.getTextStyle(isSelected),
|
||||||
)
|
)
|
||||||
]));
|
]));
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -72,23 +72,20 @@ class SearchController extends BaseController {
|
|||||||
required QuickSearchFilter quickSearchFilter,
|
required QuickSearchFilter quickSearchFilter,
|
||||||
bool fromSuggestionBox = false,
|
bool fromSuggestionBox = false,
|
||||||
}) {
|
}) {
|
||||||
final isSelected = checkQuickSearchFilterSelected(
|
final quickSearchFilterSelected = checkQuickSearchFilterSelected(quickSearchFilter: quickSearchFilter, fromSuggestionBox: fromSuggestionBox);
|
||||||
quickSearchFilter,
|
|
||||||
fromSuggestionBox,
|
|
||||||
);
|
|
||||||
|
|
||||||
switch (quickSearchFilter) {
|
switch (quickSearchFilter) {
|
||||||
case QuickSearchFilter.hasAttachment:
|
case QuickSearchFilter.hasAttachment:
|
||||||
updateFilterEmail(hasAttachment: !isSelected);
|
updateFilterEmail(hasAttachment: !quickSearchFilterSelected);
|
||||||
return;
|
return;
|
||||||
case QuickSearchFilter.last7Days:
|
case QuickSearchFilter.last7Days:
|
||||||
final EmailReceiveTimeType? emailReceiveTimeType = isSelected
|
final EmailReceiveTimeType? emailReceiveTimeType = quickSearchFilterSelected
|
||||||
? EmailReceiveTimeType.allTime
|
? EmailReceiveTimeType.allTime
|
||||||
: EmailReceiveTimeType.last7Days;
|
: EmailReceiveTimeType.last7Days;
|
||||||
updateFilterEmail(emailReceiveTimeType: emailReceiveTimeType);
|
updateFilterEmail(emailReceiveTimeType: emailReceiveTimeType);
|
||||||
return;
|
return;
|
||||||
case QuickSearchFilter.fromMe:
|
case QuickSearchFilter.fromMe:
|
||||||
isSelected
|
quickSearchFilterSelected
|
||||||
? searchEmailFilter.value.from.remove(_userProfile.email)
|
? searchEmailFilter.value.from.remove(_userProfile.email)
|
||||||
: searchEmailFilter.value.from.add(_userProfile.email);
|
: searchEmailFilter.value.from.add(_userProfile.email);
|
||||||
updateFilterEmail(from: searchEmailFilter.value.from);
|
updateFilterEmail(from: searchEmailFilter.value.from);
|
||||||
@@ -179,13 +176,12 @@ class SearchController extends BaseController {
|
|||||||
searchInputController.text = value;
|
searchInputController.text = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool checkQuickSearchFilterSelected(
|
bool checkQuickSearchFilterSelected({required QuickSearchFilter quickSearchFilter, bool fromSuggestionBox = false}) {
|
||||||
QuickSearchFilter quickSearchFilter, bool fromSuggestBox) {
|
|
||||||
switch (quickSearchFilter) {
|
switch (quickSearchFilter) {
|
||||||
case QuickSearchFilter.hasAttachment:
|
case QuickSearchFilter.hasAttachment:
|
||||||
return searchEmailFilter.value.hasAttachment == true;
|
return searchEmailFilter.value.hasAttachment == true;
|
||||||
case QuickSearchFilter.last7Days:
|
case QuickSearchFilter.last7Days:
|
||||||
if (fromSuggestBox) {
|
if (fromSuggestionBox) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return searchEmailFilter.value.emailReceiveTimeType == EmailReceiveTimeType.last7Days;
|
return searchEmailFilter.value.emailReceiveTimeType == EmailReceiveTimeType.last7Days;
|
||||||
|
|||||||
@@ -150,21 +150,21 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
|
|||||||
if (controller.isSelectionEnabled()) {
|
if (controller.isSelectionEnabled()) {
|
||||||
return _buildListButtonTopBarSelection(context);
|
return _buildListButtonTopBarSelection(context);
|
||||||
} else {
|
} else {
|
||||||
return controller.isSearchActive()
|
return controller.searchController.isSearchActive()
|
||||||
? _buildListButtonTopBarSearchActive(context)
|
? _buildListButtonTopBarSearchActive(context)
|
||||||
: _buildListButtonTopBar(context);
|
: _buildListButtonTopBar(context);
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
const SizedBox(width: 16),
|
const SizedBox(width: 16),
|
||||||
Obx(() => !controller.isSearchActive() ? const Spacer() : const SizedBox.shrink()),
|
Obx(() => !controller.searchController.isSearchActive() ? const Spacer() : const SizedBox.shrink()),
|
||||||
Obx(() => controller.isSearchActive()
|
Obx(() => controller.searchController.isSearchActive()
|
||||||
? Expanded(child: _buildSearchForm(context))
|
? Expanded(child: _buildSearchForm(context))
|
||||||
: (SearchBarView(imagePaths)
|
: (SearchBarView(imagePaths)
|
||||||
..hintTextSearch(AppLocalizations.of(context).search_emails)
|
..hintTextSearch(AppLocalizations.of(context).search_emails)
|
||||||
..maxSizeWidth(240)
|
..maxSizeWidth(240)
|
||||||
..addOnOpenSearchViewAction(() => controller.enableSearch()))
|
..addOnOpenSearchViewAction(() => controller.searchController.enableSearch()))
|
||||||
.build()),
|
.build()),
|
||||||
Obx(() => !controller.isSearchActive() ? const SizedBox(width: 16) : const SizedBox.shrink()),
|
Obx(() => !controller.searchController.isSearchActive() ? const SizedBox(width: 16) : const SizedBox.shrink()),
|
||||||
Obx(() => (AvatarBuilder()
|
Obx(() => (AvatarBuilder()
|
||||||
..text(controller.userProfile.value?.getAvatarText() ?? '')
|
..text(controller.userProfile.value?.getAvatarText() ?? '')
|
||||||
..backgroundColor(Colors.white)
|
..backgroundColor(Colors.white)
|
||||||
@@ -410,19 +410,19 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
|
|||||||
height: 45,
|
height: 45,
|
||||||
child: QuickSearchInputForm<PresentationEmail, RecentSearch>(
|
child: QuickSearchInputForm<PresentationEmail, RecentSearch>(
|
||||||
textFieldConfiguration: QuickSearchTextFieldConfiguration(
|
textFieldConfiguration: QuickSearchTextFieldConfiguration(
|
||||||
controller: controller.searchInputController,
|
controller: controller.searchController.searchInputController,
|
||||||
autofocus: true,
|
autofocus: true,
|
||||||
focusNode: controller.searchFocus,
|
focusNode: controller.searchController.searchFocus,
|
||||||
textInputAction: TextInputAction.done,
|
textInputAction: TextInputAction.done,
|
||||||
onSubmitted: (keyword) {
|
onSubmitted: (keyword) {
|
||||||
if (keyword.trim().isNotEmpty) {
|
if (keyword.trim().isNotEmpty) {
|
||||||
controller.saveRecentSearch(RecentSearch.now(keyword));
|
controller.searchController.saveRecentSearch(RecentSearch.now(keyword));
|
||||||
}
|
}
|
||||||
controller.searchEmail(context, keyword);
|
controller.searchEmail(context);
|
||||||
},
|
},
|
||||||
onChanged: (query) {
|
onChanged: (query) {
|
||||||
log('MailboxDashBoardView::_buildSearchForm(): onChanged: $query');
|
log('MailboxDashBoardView::_buildSearchForm(): onChanged: $query');
|
||||||
controller.onChangeTextSearch(query);
|
controller.searchController.onChangeTextSearch(query);
|
||||||
},
|
},
|
||||||
decoration: InputDecoration(
|
decoration: InputDecoration(
|
||||||
border: InputBorder.none,
|
border: InputBorder.none,
|
||||||
@@ -444,11 +444,11 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
|
|||||||
height: 16,
|
height: 16,
|
||||||
fit: BoxFit.fill),
|
fit: BoxFit.fill),
|
||||||
onTap: () {
|
onTap: () {
|
||||||
final keyword = controller.searchInputController.text;
|
final keyword = controller.searchController.searchInputController.text;
|
||||||
if (keyword.trim().isNotEmpty) {
|
if (keyword.trim().isNotEmpty) {
|
||||||
controller.saveRecentSearch(RecentSearch.now(keyword));
|
controller.searchController.saveRecentSearch(RecentSearch.now(keyword));
|
||||||
}
|
}
|
||||||
controller.searchEmail(context, keyword);
|
controller.searchEmail(context);
|
||||||
}),
|
}),
|
||||||
clearTextButton: buildIconWeb(
|
clearTextButton: buildIconWeb(
|
||||||
icon: SvgPicture.asset(
|
icon: SvgPicture.asset(
|
||||||
@@ -457,7 +457,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
|
|||||||
height: 16,
|
height: 16,
|
||||||
fit: BoxFit.fill),
|
fit: BoxFit.fill),
|
||||||
onTap: () {
|
onTap: () {
|
||||||
controller.clearTextSearch();
|
controller.searchController.clearTextSearch();
|
||||||
})
|
})
|
||||||
),
|
),
|
||||||
suggestionsBoxDecoration: QuickSearchSuggestionsBoxDecoration(
|
suggestionsBoxDecoration: QuickSearchSuggestionsBoxDecoration(
|
||||||
@@ -482,8 +482,8 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
|
|||||||
},
|
},
|
||||||
buttonActionCallback: (filterAction) {
|
buttonActionCallback: (filterAction) {
|
||||||
if (filterAction is QuickSearchFilter) {
|
if (filterAction is QuickSearchFilter) {
|
||||||
controller.selectQuickSearchFilter(
|
controller.searchController.selectQuickSearchFilter(
|
||||||
filterAction,
|
quickSearchFilter: filterAction,
|
||||||
fromSuggestionBox: true);
|
fromSuggestionBox: true);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -505,9 +505,9 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
|
|||||||
return InkWell(
|
return InkWell(
|
||||||
onTap: () {
|
onTap: () {
|
||||||
if (keyword.trim().isNotEmpty) {
|
if (keyword.trim().isNotEmpty) {
|
||||||
controller.saveRecentSearch(RecentSearch.now(keyword));
|
controller.searchController.saveRecentSearch(RecentSearch.now(keyword));
|
||||||
}
|
}
|
||||||
controller.searchEmail(context, keyword);
|
controller.searchEmail(context);
|
||||||
},
|
},
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding: const EdgeInsets.symmetric(
|
padding: const EdgeInsets.symmetric(
|
||||||
@@ -537,17 +537,17 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
|
|||||||
child: loadingWidget,
|
child: loadingWidget,
|
||||||
),
|
),
|
||||||
fetchRecentActionCallback: (pattern) async {
|
fetchRecentActionCallback: (pattern) async {
|
||||||
return controller.getAllRecentSearchAction(pattern);
|
return controller.searchController.getAllRecentSearchAction(pattern);
|
||||||
},
|
},
|
||||||
itemRecentBuilder: (context, recent) {
|
itemRecentBuilder: (context, recent) {
|
||||||
return RecentSearchItemTileWidget(recent);
|
return RecentSearchItemTileWidget(recent);
|
||||||
},
|
},
|
||||||
onRecentSelected: (recent) {
|
onRecentSelected: (recent) {
|
||||||
controller.searchInputController.text = recent.value;
|
controller.searchController.searchInputController.text = recent.value;
|
||||||
controller.searchEmail(context, recent.value);
|
controller.searchEmail(context);
|
||||||
},
|
},
|
||||||
suggestionsCallback: (pattern) async {
|
suggestionsCallback: (pattern) async {
|
||||||
return controller.quickSearchEmailsAction(pattern);
|
return controller.searchController.quickSearchEmails();
|
||||||
},
|
},
|
||||||
itemBuilder: (context, email) {
|
itemBuilder: (context, email) {
|
||||||
return EmailQuickSearchItemTileWidget(
|
return EmailQuickSearchItemTileWidget(
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ import 'package:jmap_dart_client/jmap/account_id.dart';
|
|||||||
import 'package:jmap_dart_client/jmap/core/sort/comparator.dart';
|
import 'package:jmap_dart_client/jmap/core/sort/comparator.dart';
|
||||||
import 'package:jmap_dart_client/jmap/core/state.dart' as jmap;
|
import 'package:jmap_dart_client/jmap/core/state.dart' as jmap;
|
||||||
import 'package:jmap_dart_client/jmap/core/unsigned_int.dart';
|
import 'package:jmap_dart_client/jmap/core/unsigned_int.dart';
|
||||||
import 'package:jmap_dart_client/jmap/core/utc_date.dart';
|
|
||||||
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
||||||
import 'package:jmap_dart_client/jmap/mail/email/email_comparator.dart';
|
import 'package:jmap_dart_client/jmap/mail/email/email_comparator.dart';
|
||||||
import 'package:jmap_dart_client/jmap/mail/email/email_comparator_property.dart';
|
import 'package:jmap_dart_client/jmap/mail/email/email_comparator_property.dart';
|
||||||
@@ -40,8 +39,10 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/mark_as_ma
|
|||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/remove_email_drafts_state.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/remove_email_drafts_state.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/action/dashboard_action.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/action/dashboard_action.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/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';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/search_email_filter.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/domain/constants/thread_constants.dart';
|
import 'package:tmail_ui_user/features/thread/domain/constants/thread_constants.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/domain/model/email_filter.dart';
|
import 'package:tmail_ui_user/features/thread/domain/model/email_filter.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/domain/model/filter_message_option.dart';
|
import 'package:tmail_ui_user/features/thread/domain/model/filter_message_option.dart';
|
||||||
@@ -105,7 +106,7 @@ class ThreadController extends BaseController {
|
|||||||
final ScrollController listEmailController = ScrollController();
|
final ScrollController listEmailController = ScrollController();
|
||||||
late Worker mailboxWorker, searchWorker, dashboardActionWorker, viewStateWorker;
|
late Worker mailboxWorker, searchWorker, dashboardActionWorker, viewStateWorker;
|
||||||
|
|
||||||
SearchQuery? get searchQuery => mailboxDashBoardController.searchQuery;
|
SearchQuery? get searchQuery => searchController.searchQuery;
|
||||||
|
|
||||||
Set<Comparator>? get _sortOrder => <Comparator>{}
|
Set<Comparator>? get _sortOrder => <Comparator>{}
|
||||||
..add(EmailComparator(EmailComparatorProperty.receivedAt)
|
..add(EmailComparator(EmailComparatorProperty.receivedAt)
|
||||||
@@ -115,9 +116,11 @@ class ThreadController extends BaseController {
|
|||||||
|
|
||||||
PresentationMailbox? get currentMailbox => mailboxDashBoardController.selectedMailbox.value;
|
PresentationMailbox? get currentMailbox => mailboxDashBoardController.selectedMailbox.value;
|
||||||
|
|
||||||
TextEditingController get searchController => mailboxDashBoardController.searchInputController;
|
SearchController get searchController => mailboxDashBoardController.searchController;
|
||||||
|
|
||||||
String get currentTextSearch => mailboxDashBoardController.searchInputController.text;
|
SearchEmailFilter get _searchEmailFilter => searchController.searchEmailFilter.value;
|
||||||
|
|
||||||
|
String get currentTextSearch => searchController.searchInputController.text;
|
||||||
|
|
||||||
ThreadController(
|
ThreadController(
|
||||||
this._getEmailsInMailboxInteractor,
|
this._getEmailsInMailboxInteractor,
|
||||||
@@ -241,7 +244,7 @@ class ThreadController extends BaseController {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
searchWorker = ever(mailboxDashBoardController.searchState, (searchState) {
|
searchWorker = ever(searchController.searchState, (searchState) {
|
||||||
if (searchState is SearchState) {
|
if (searchState is SearchState) {
|
||||||
if (searchState.searchStatus == SearchStatus.ACTIVE) {
|
if (searchState.searchStatus == SearchStatus.ACTIVE) {
|
||||||
cancelSelectEmail();
|
cancelSelectEmail();
|
||||||
@@ -793,15 +796,15 @@ class ThreadController extends BaseController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isSearchActive() => mailboxDashBoardController.isSearchActive();
|
bool isSearchActive() => searchController.isSearchActive();
|
||||||
|
|
||||||
void enableSearch(BuildContext context) {
|
void enableSearch(BuildContext context) {
|
||||||
mailboxDashBoardController.enableSearch();
|
searchController.enableSearch();
|
||||||
}
|
}
|
||||||
|
|
||||||
void disableSearch() {
|
void disableSearch() {
|
||||||
searchIsActive.value = false;
|
searchIsActive.value = false;
|
||||||
mailboxDashBoardController.disableSearch();
|
searchController.disableSearch();
|
||||||
}
|
}
|
||||||
|
|
||||||
void closeSearchEmailAction() {
|
void closeSearchEmailAction() {
|
||||||
@@ -811,53 +814,20 @@ class ThreadController extends BaseController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void clearTextSearch() {
|
void clearTextSearch() {
|
||||||
mailboxDashBoardController.clearTextSearch();
|
searchController.clearTextSearch();
|
||||||
}
|
}
|
||||||
|
|
||||||
void _searchEmail({UnsignedInt? limit}) {
|
void _searchEmail({UnsignedInt? limit}) {
|
||||||
if (_accountId != null && searchQuery != null) {
|
if (_accountId != null && searchQuery != null) {
|
||||||
searchIsActive.value = true;
|
searchIsActive.value = true;
|
||||||
|
|
||||||
UTCDate? afterTime;
|
searchController.updateFilterEmail(mailbox: currentMailbox);
|
||||||
bool? hasAttachment;
|
|
||||||
String? fromAddress;
|
|
||||||
String? keywordUnread;
|
|
||||||
String? keywordStarred;
|
|
||||||
|
|
||||||
if (mailboxDashBoardController.quickSearchFilterForLast7DaysIsActive()) {
|
|
||||||
afterTime = mailboxDashBoardController.emailReceiveTimeType.value!.toUTCDate();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mailboxDashBoardController.filterForHasAttachmentIsActive()) {
|
|
||||||
hasAttachment = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mailboxDashBoardController.quickSearchFilterForFromMeIsActive()) {
|
|
||||||
fromAddress = mailboxDashBoardController.userProfile.value?.email;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mailboxDashBoardController.filterMessageUnreadIsActive()) {
|
|
||||||
keywordUnread = KeyWordIdentifier.emailSeen.value;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mailboxDashBoardController.filterMessageStarredIsActive()) {
|
|
||||||
keywordStarred = KeyWordIdentifier.emailFlagged.value;
|
|
||||||
}
|
|
||||||
|
|
||||||
final emailFilterCondition = EmailFilterCondition(
|
|
||||||
text: searchQuery!.value,
|
|
||||||
hasAttachment: hasAttachment,
|
|
||||||
from: fromAddress,
|
|
||||||
after: afterTime,
|
|
||||||
hasKeyword: keywordStarred,
|
|
||||||
notKeyword: keywordUnread,
|
|
||||||
inMailbox: _currentMailboxId);
|
|
||||||
|
|
||||||
consumeState(_searchEmailInteractor.execute(
|
consumeState(_searchEmailInteractor.execute(
|
||||||
_accountId!,
|
_accountId!,
|
||||||
limit: limit ?? ThreadConstants.defaultLimit,
|
limit: limit ?? ThreadConstants.defaultLimit,
|
||||||
sort: _sortOrder,
|
sort: _sortOrder,
|
||||||
filter: emailFilterCondition,
|
filter: _searchEmailFilter.mappingToEmailFilterCondition(),
|
||||||
properties: ThreadConstants.propertiesDefault,
|
properties: ThreadConstants.propertiesDefault,
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
@@ -1236,7 +1206,7 @@ class ThreadController extends BaseController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void selectQuickSearchFilter(QuickSearchFilter filter) {
|
void selectQuickSearchFilter(QuickSearchFilter filter) {
|
||||||
mailboxDashBoardController.selectQuickSearchFilter(filter);
|
searchController.selectQuickSearchFilter(quickSearchFilter: filter);
|
||||||
_searchEmail();
|
_searchEmail();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1250,14 +1220,8 @@ class ThreadController extends BaseController {
|
|||||||
void selectReceiveTimeQuickSearchFilter(EmailReceiveTimeType? emailReceiveTimeType) {
|
void selectReceiveTimeQuickSearchFilter(EmailReceiveTimeType? emailReceiveTimeType) {
|
||||||
popBack();
|
popBack();
|
||||||
|
|
||||||
if (emailReceiveTimeType != null) {
|
searchController.updateFilterEmail(emailReceiveTimeType: emailReceiveTimeType);
|
||||||
if (!mailboxDashBoardController.listFilterQuickSearch.contains(QuickSearchFilter.last7Days)) {
|
|
||||||
mailboxDashBoardController.selectQuickSearchFilter(QuickSearchFilter.last7Days);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
mailboxDashBoardController.listFilterQuickSearch.remove(QuickSearchFilter.last7Days);
|
|
||||||
}
|
|
||||||
mailboxDashBoardController.setEmailReceiveTimeType(emailReceiveTimeType);
|
|
||||||
_searchEmail();
|
_searchEmail();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -182,16 +182,15 @@ class ThreadView extends GetWidget<ThreadController> with AppLoaderMixin,
|
|||||||
height: 45,
|
height: 45,
|
||||||
child: QuickSearchInputForm<PresentationEmail, RecentSearch>(
|
child: QuickSearchInputForm<PresentationEmail, RecentSearch>(
|
||||||
textFieldConfiguration: QuickSearchTextFieldConfiguration(
|
textFieldConfiguration: QuickSearchTextFieldConfiguration(
|
||||||
controller: controller.searchController,
|
controller: controller.searchController.searchInputController,
|
||||||
autofocus: true,
|
autofocus: true,
|
||||||
focusNode: controller.mailboxDashBoardController.searchFocus,
|
focusNode: controller.searchController.searchFocus,
|
||||||
textInputAction: TextInputAction.done,
|
textInputAction: TextInputAction.done,
|
||||||
onSubmitted: (keyword) {
|
onSubmitted: (keyword) {
|
||||||
if (keyword.trim().isNotEmpty) {
|
if (keyword.trim().isNotEmpty) {
|
||||||
controller.mailboxDashBoardController
|
controller.searchController.saveRecentSearch(RecentSearch.now(keyword));
|
||||||
.saveRecentSearch(RecentSearch.now(keyword));
|
|
||||||
}
|
}
|
||||||
controller.mailboxDashBoardController.searchEmail(context, keyword);
|
controller.mailboxDashBoardController.searchEmail(context);
|
||||||
},
|
},
|
||||||
decoration: InputDecoration(
|
decoration: InputDecoration(
|
||||||
border: InputBorder.none,
|
border: InputBorder.none,
|
||||||
@@ -215,10 +214,9 @@ class ThreadView extends GetWidget<ThreadController> with AppLoaderMixin,
|
|||||||
onTap: () {
|
onTap: () {
|
||||||
final keyword = controller.currentTextSearch;
|
final keyword = controller.currentTextSearch;
|
||||||
if (keyword.trim().isNotEmpty) {
|
if (keyword.trim().isNotEmpty) {
|
||||||
controller.mailboxDashBoardController
|
controller.searchController.saveRecentSearch(RecentSearch.now(keyword));
|
||||||
.saveRecentSearch(RecentSearch.now(keyword));
|
|
||||||
}
|
}
|
||||||
controller.mailboxDashBoardController.searchEmail(context, keyword);
|
controller.mailboxDashBoardController.searchEmail(context);
|
||||||
}),
|
}),
|
||||||
clearTextButton: buildIconWeb(
|
clearTextButton: buildIconWeb(
|
||||||
icon: SvgPicture.asset(
|
icon: SvgPicture.asset(
|
||||||
@@ -251,8 +249,7 @@ class ThreadView extends GetWidget<ThreadController> with AppLoaderMixin,
|
|||||||
},
|
},
|
||||||
buttonActionCallback: (filterAction) {
|
buttonActionCallback: (filterAction) {
|
||||||
if (filterAction is QuickSearchFilter) {
|
if (filterAction is QuickSearchFilter) {
|
||||||
controller.mailboxDashBoardController
|
controller.searchController.selectQuickSearchFilter(quickSearchFilter: filterAction, fromSuggestionBox: true);
|
||||||
.selectQuickSearchFilter(filterAction, fromSuggestionBox: true);
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
listActionPadding: const EdgeInsets.only(
|
listActionPadding: const EdgeInsets.only(
|
||||||
@@ -273,10 +270,9 @@ class ThreadView extends GetWidget<ThreadController> with AppLoaderMixin,
|
|||||||
return InkWell(
|
return InkWell(
|
||||||
onTap: () {
|
onTap: () {
|
||||||
if (keyword.trim().isNotEmpty) {
|
if (keyword.trim().isNotEmpty) {
|
||||||
controller.mailboxDashBoardController
|
controller.searchController.saveRecentSearch(RecentSearch.now(keyword));
|
||||||
.saveRecentSearch(RecentSearch.now(keyword));
|
|
||||||
}
|
}
|
||||||
controller.mailboxDashBoardController.searchEmail(context, keyword);
|
controller.mailboxDashBoardController.searchEmail(context);
|
||||||
},
|
},
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 14),
|
padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 14),
|
||||||
@@ -304,21 +300,17 @@ class ThreadView extends GetWidget<ThreadController> with AppLoaderMixin,
|
|||||||
child: loadingWidget,
|
child: loadingWidget,
|
||||||
),
|
),
|
||||||
fetchRecentActionCallback: (pattern) async {
|
fetchRecentActionCallback: (pattern) async {
|
||||||
return controller.mailboxDashBoardController
|
return controller.searchController.getAllRecentSearchAction(pattern);
|
||||||
.getAllRecentSearchAction(pattern);
|
|
||||||
},
|
},
|
||||||
itemRecentBuilder: (context, recent) {
|
itemRecentBuilder: (context, recent) {
|
||||||
return RecentSearchItemTileWidget(recent);
|
return RecentSearchItemTileWidget(recent);
|
||||||
},
|
},
|
||||||
onRecentSelected: (recent) {
|
onRecentSelected: (recent) {
|
||||||
controller.mailboxDashBoardController
|
controller.searchController.updateTextSearch(recent.value);
|
||||||
.updateTextSearch(recent.value);
|
controller.mailboxDashBoardController.searchEmail(context);
|
||||||
controller.mailboxDashBoardController
|
|
||||||
.searchEmail(context, recent.value);
|
|
||||||
},
|
},
|
||||||
suggestionsCallback: (pattern) async {
|
suggestionsCallback: (pattern) async {
|
||||||
return controller.mailboxDashBoardController
|
return controller.searchController.quickSearchEmails();
|
||||||
.quickSearchEmailsAction(pattern);
|
|
||||||
},
|
},
|
||||||
itemBuilder: (context, email) {
|
itemBuilder: (context, email) {
|
||||||
return EmailQuickSearchItemTileWidget(
|
return EmailQuickSearchItemTileWidget(
|
||||||
@@ -523,7 +515,7 @@ class ThreadView extends GetWidget<ThreadController> with AppLoaderMixin,
|
|||||||
listPresentationEmail[index],
|
listPresentationEmail[index],
|
||||||
controller.currentMailbox?.role,
|
controller.currentMailbox?.role,
|
||||||
controller.mailboxDashBoardController.currentSelectMode.value,
|
controller.mailboxDashBoardController.currentSelectMode.value,
|
||||||
controller.mailboxDashBoardController.searchState.value.searchStatus,
|
controller.searchController.searchState.value.searchStatus,
|
||||||
controller.searchQuery)
|
controller.searchQuery)
|
||||||
..addOnPressEmailActionClick((action, email) => controller.pressEmailAction(context, action, email))
|
..addOnPressEmailActionClick((action, email) => controller.pressEmailAction(context, action, email))
|
||||||
..addOnMoreActionClick((email, position) => _responsiveUtils.isMobile(context)
|
..addOnMoreActionClick((email, position) => _responsiveUtils.isMobile(context)
|
||||||
@@ -646,6 +638,8 @@ class ThreadView extends GetWidget<ThreadController> with AppLoaderMixin,
|
|||||||
Widget _buildQuickSearchFilterButton(
|
Widget _buildQuickSearchFilterButton(
|
||||||
BuildContext context, QuickSearchFilter filter) {
|
BuildContext context, QuickSearchFilter filter) {
|
||||||
return Obx(() {
|
return Obx(() {
|
||||||
|
final quickSearchFilterSelected = controller.searchController.checkQuickSearchFilterSelected(quickSearchFilter: filter);
|
||||||
|
|
||||||
return Padding(
|
return Padding(
|
||||||
padding: const EdgeInsets.only(right: 8),
|
padding: const EdgeInsets.only(right: 8),
|
||||||
child: InkWell(
|
child: InkWell(
|
||||||
@@ -674,11 +668,11 @@ class ThreadView extends GetWidget<ThreadController> with AppLoaderMixin,
|
|||||||
child: Container(
|
child: Container(
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
borderRadius: BorderRadius.circular(10),
|
borderRadius: BorderRadius.circular(10),
|
||||||
color: filter.getBackgroundColor(controller.mailboxDashBoardController.listFilterQuickSearch)),
|
color: filter.getBackgroundColor(quickSearchFilterSelected)),
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8),
|
padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8),
|
||||||
child: Row(mainAxisAlignment: MainAxisAlignment.center, children: [
|
child: Row(mainAxisAlignment: MainAxisAlignment.center, children: [
|
||||||
SvgPicture.asset(
|
SvgPicture.asset(
|
||||||
filter.getIcon(_imagePaths, controller.mailboxDashBoardController.listFilterQuickSearch),
|
filter.getIcon(_imagePaths, quickSearchFilterSelected),
|
||||||
width: 16,
|
width: 16,
|
||||||
height: 16,
|
height: 16,
|
||||||
fit: BoxFit.fill),
|
fit: BoxFit.fill),
|
||||||
@@ -687,7 +681,7 @@ class ThreadView extends GetWidget<ThreadController> with AppLoaderMixin,
|
|||||||
filter.getTitle(context, receiveTimeType: controller.mailboxDashBoardController.emailReceiveTimeType.value),
|
filter.getTitle(context, receiveTimeType: controller.mailboxDashBoardController.emailReceiveTimeType.value),
|
||||||
maxLines: 1,
|
maxLines: 1,
|
||||||
overflow: TextOverflow.ellipsis,
|
overflow: TextOverflow.ellipsis,
|
||||||
style: filter.getTextStyle(controller.mailboxDashBoardController.listFilterQuickSearch),
|
style: filter.getTextStyle(quickSearchFilterSelected),
|
||||||
),
|
),
|
||||||
if (filter == QuickSearchFilter.last7Days)
|
if (filter == QuickSearchFilter.last7Days)
|
||||||
... [
|
... [
|
||||||
@@ -744,14 +738,16 @@ class ThreadView extends GetWidget<ThreadController> with AppLoaderMixin,
|
|||||||
Widget _buildQuickSearchFilterButtonSuggestionBox(
|
Widget _buildQuickSearchFilterButtonSuggestionBox(
|
||||||
BuildContext context, QuickSearchFilter filter) {
|
BuildContext context, QuickSearchFilter filter) {
|
||||||
return Obx(() {
|
return Obx(() {
|
||||||
|
final quickSearchFilterSelected = controller.searchController.checkQuickSearchFilterSelected(quickSearchFilter: filter);
|
||||||
|
|
||||||
return Container(
|
return Container(
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
borderRadius: BorderRadius.circular(10),
|
borderRadius: BorderRadius.circular(10),
|
||||||
color: filter.getBackgroundColor(controller.mailboxDashBoardController.listFilterQuickSearch)),
|
color: filter.getBackgroundColor(quickSearchFilterSelected)),
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8),
|
padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8),
|
||||||
child: Row(mainAxisAlignment: MainAxisAlignment.center, children: [
|
child: Row(mainAxisAlignment: MainAxisAlignment.center, children: [
|
||||||
SvgPicture.asset(
|
SvgPicture.asset(
|
||||||
filter.getIcon(_imagePaths, controller.mailboxDashBoardController.listFilterQuickSearch),
|
filter.getIcon(_imagePaths, quickSearchFilterSelected),
|
||||||
width: 16,
|
width: 16,
|
||||||
height: 16,
|
height: 16,
|
||||||
fit: BoxFit.fill),
|
fit: BoxFit.fill),
|
||||||
@@ -760,7 +756,7 @@ class ThreadView extends GetWidget<ThreadController> with AppLoaderMixin,
|
|||||||
filter.getTitle(context, receiveTimeType: controller.mailboxDashBoardController.emailReceiveTimeType.value),
|
filter.getTitle(context, receiveTimeType: controller.mailboxDashBoardController.emailReceiveTimeType.value),
|
||||||
maxLines: 1,
|
maxLines: 1,
|
||||||
overflow: TextOverflow.ellipsis,
|
overflow: TextOverflow.ellipsis,
|
||||||
style: filter.getTextStyle(controller.mailboxDashBoardController.listFilterQuickSearch),
|
style: filter.getTextStyle(quickSearchFilterSelected),
|
||||||
)
|
)
|
||||||
]));
|
]));
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user