refactor code UI follow refactor code controller

This commit is contained in:
ManhNT
2022-06-24 17:14:47 +07:00
committed by Dat H. Pham
parent 2cbe5f163c
commit 203f93ae7f
6 changed files with 76 additions and 118 deletions
@@ -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/state.dart' as jmap;
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_comparator.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/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/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/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/model/email_filter.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();
late Worker mailboxWorker, searchWorker, dashboardActionWorker, viewStateWorker;
SearchQuery? get searchQuery => mailboxDashBoardController.searchQuery;
SearchQuery? get searchQuery => searchController.searchQuery;
Set<Comparator>? get _sortOrder => <Comparator>{}
..add(EmailComparator(EmailComparatorProperty.receivedAt)
@@ -115,9 +116,11 @@ class ThreadController extends BaseController {
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(
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.searchStatus == SearchStatus.ACTIVE) {
cancelSelectEmail();
@@ -793,15 +796,15 @@ class ThreadController extends BaseController {
}
}
bool isSearchActive() => mailboxDashBoardController.isSearchActive();
bool isSearchActive() => searchController.isSearchActive();
void enableSearch(BuildContext context) {
mailboxDashBoardController.enableSearch();
searchController.enableSearch();
}
void disableSearch() {
searchIsActive.value = false;
mailboxDashBoardController.disableSearch();
searchController.disableSearch();
}
void closeSearchEmailAction() {
@@ -811,53 +814,20 @@ class ThreadController extends BaseController {
}
void clearTextSearch() {
mailboxDashBoardController.clearTextSearch();
searchController.clearTextSearch();
}
void _searchEmail({UnsignedInt? limit}) {
if (_accountId != null && searchQuery != null) {
searchIsActive.value = true;
UTCDate? afterTime;
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);
searchController.updateFilterEmail(mailbox: currentMailbox);
consumeState(_searchEmailInteractor.execute(
_accountId!,
limit: limit ?? ThreadConstants.defaultLimit,
sort: _sortOrder,
filter: emailFilterCondition,
filter: _searchEmailFilter.mappingToEmailFilterCondition(),
properties: ThreadConstants.propertiesDefault,
));
}
@@ -1236,7 +1206,7 @@ class ThreadController extends BaseController {
}
void selectQuickSearchFilter(QuickSearchFilter filter) {
mailboxDashBoardController.selectQuickSearchFilter(filter);
searchController.selectQuickSearchFilter(quickSearchFilter: filter);
_searchEmail();
}
@@ -1250,14 +1220,8 @@ class ThreadController extends BaseController {
void selectReceiveTimeQuickSearchFilter(EmailReceiveTimeType? emailReceiveTimeType) {
popBack();
if (emailReceiveTimeType != null) {
if (!mailboxDashBoardController.listFilterQuickSearch.contains(QuickSearchFilter.last7Days)) {
mailboxDashBoardController.selectQuickSearchFilter(QuickSearchFilter.last7Days);
}
} else {
mailboxDashBoardController.listFilterQuickSearch.remove(QuickSearchFilter.last7Days);
}
mailboxDashBoardController.setEmailReceiveTimeType(emailReceiveTimeType);
searchController.updateFilterEmail(emailReceiveTimeType: emailReceiveTimeType);
_searchEmail();
}
@@ -182,16 +182,15 @@ class ThreadView extends GetWidget<ThreadController> with AppLoaderMixin,
height: 45,
child: QuickSearchInputForm<PresentationEmail, RecentSearch>(
textFieldConfiguration: QuickSearchTextFieldConfiguration(
controller: controller.searchController,
controller: controller.searchController.searchInputController,
autofocus: true,
focusNode: controller.mailboxDashBoardController.searchFocus,
focusNode: controller.searchController.searchFocus,
textInputAction: TextInputAction.done,
onSubmitted: (keyword) {
if (keyword.trim().isNotEmpty) {
controller.mailboxDashBoardController
.saveRecentSearch(RecentSearch.now(keyword));
controller.searchController.saveRecentSearch(RecentSearch.now(keyword));
}
controller.mailboxDashBoardController.searchEmail(context, keyword);
controller.mailboxDashBoardController.searchEmail(context);
},
decoration: InputDecoration(
border: InputBorder.none,
@@ -215,10 +214,9 @@ class ThreadView extends GetWidget<ThreadController> with AppLoaderMixin,
onTap: () {
final keyword = controller.currentTextSearch;
if (keyword.trim().isNotEmpty) {
controller.mailboxDashBoardController
.saveRecentSearch(RecentSearch.now(keyword));
controller.searchController.saveRecentSearch(RecentSearch.now(keyword));
}
controller.mailboxDashBoardController.searchEmail(context, keyword);
controller.mailboxDashBoardController.searchEmail(context);
}),
clearTextButton: buildIconWeb(
icon: SvgPicture.asset(
@@ -251,8 +249,7 @@ class ThreadView extends GetWidget<ThreadController> with AppLoaderMixin,
},
buttonActionCallback: (filterAction) {
if (filterAction is QuickSearchFilter) {
controller.mailboxDashBoardController
.selectQuickSearchFilter(filterAction, fromSuggestionBox: true);
controller.searchController.selectQuickSearchFilter(quickSearchFilter: filterAction, fromSuggestionBox: true);
}
},
listActionPadding: const EdgeInsets.only(
@@ -273,10 +270,9 @@ class ThreadView extends GetWidget<ThreadController> with AppLoaderMixin,
return InkWell(
onTap: () {
if (keyword.trim().isNotEmpty) {
controller.mailboxDashBoardController
.saveRecentSearch(RecentSearch.now(keyword));
controller.searchController.saveRecentSearch(RecentSearch.now(keyword));
}
controller.mailboxDashBoardController.searchEmail(context, keyword);
controller.mailboxDashBoardController.searchEmail(context);
},
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 14),
@@ -304,21 +300,17 @@ class ThreadView extends GetWidget<ThreadController> with AppLoaderMixin,
child: loadingWidget,
),
fetchRecentActionCallback: (pattern) async {
return controller.mailboxDashBoardController
.getAllRecentSearchAction(pattern);
return controller.searchController.getAllRecentSearchAction(pattern);
},
itemRecentBuilder: (context, recent) {
return RecentSearchItemTileWidget(recent);
},
onRecentSelected: (recent) {
controller.mailboxDashBoardController
.updateTextSearch(recent.value);
controller.mailboxDashBoardController
.searchEmail(context, recent.value);
controller.searchController.updateTextSearch(recent.value);
controller.mailboxDashBoardController.searchEmail(context);
},
suggestionsCallback: (pattern) async {
return controller.mailboxDashBoardController
.quickSearchEmailsAction(pattern);
return controller.searchController.quickSearchEmails();
},
itemBuilder: (context, email) {
return EmailQuickSearchItemTileWidget(
@@ -523,7 +515,7 @@ class ThreadView extends GetWidget<ThreadController> with AppLoaderMixin,
listPresentationEmail[index],
controller.currentMailbox?.role,
controller.mailboxDashBoardController.currentSelectMode.value,
controller.mailboxDashBoardController.searchState.value.searchStatus,
controller.searchController.searchState.value.searchStatus,
controller.searchQuery)
..addOnPressEmailActionClick((action, email) => controller.pressEmailAction(context, action, email))
..addOnMoreActionClick((email, position) => _responsiveUtils.isMobile(context)
@@ -646,6 +638,8 @@ class ThreadView extends GetWidget<ThreadController> with AppLoaderMixin,
Widget _buildQuickSearchFilterButton(
BuildContext context, QuickSearchFilter filter) {
return Obx(() {
final quickSearchFilterSelected = controller.searchController.checkQuickSearchFilterSelected(quickSearchFilter: filter);
return Padding(
padding: const EdgeInsets.only(right: 8),
child: InkWell(
@@ -674,11 +668,11 @@ class ThreadView extends GetWidget<ThreadController> with AppLoaderMixin,
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10),
color: filter.getBackgroundColor(controller.mailboxDashBoardController.listFilterQuickSearch)),
color: filter.getBackgroundColor(quickSearchFilterSelected)),
padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8),
child: Row(mainAxisAlignment: MainAxisAlignment.center, children: [
SvgPicture.asset(
filter.getIcon(_imagePaths, controller.mailboxDashBoardController.listFilterQuickSearch),
filter.getIcon(_imagePaths, quickSearchFilterSelected),
width: 16,
height: 16,
fit: BoxFit.fill),
@@ -687,7 +681,7 @@ class ThreadView extends GetWidget<ThreadController> with AppLoaderMixin,
filter.getTitle(context, receiveTimeType: controller.mailboxDashBoardController.emailReceiveTimeType.value),
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: filter.getTextStyle(controller.mailboxDashBoardController.listFilterQuickSearch),
style: filter.getTextStyle(quickSearchFilterSelected),
),
if (filter == QuickSearchFilter.last7Days)
... [
@@ -744,14 +738,16 @@ class ThreadView extends GetWidget<ThreadController> with AppLoaderMixin,
Widget _buildQuickSearchFilterButtonSuggestionBox(
BuildContext context, QuickSearchFilter filter) {
return Obx(() {
final quickSearchFilterSelected = controller.searchController.checkQuickSearchFilterSelected(quickSearchFilter: filter);
return Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10),
color: filter.getBackgroundColor(controller.mailboxDashBoardController.listFilterQuickSearch)),
color: filter.getBackgroundColor(quickSearchFilterSelected)),
padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8),
child: Row(mainAxisAlignment: MainAxisAlignment.center, children: [
SvgPicture.asset(
filter.getIcon(_imagePaths, controller.mailboxDashBoardController.listFilterQuickSearch),
filter.getIcon(_imagePaths, quickSearchFilterSelected),
width: 16,
height: 16,
fit: BoxFit.fill),
@@ -760,7 +756,7 @@ class ThreadView extends GetWidget<ThreadController> with AppLoaderMixin,
filter.getTitle(context, receiveTimeType: controller.mailboxDashBoardController.emailReceiveTimeType.value),
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: filter.getTextStyle(controller.mailboxDashBoardController.listFilterQuickSearch),
style: filter.getTextStyle(quickSearchFilterSelected),
)
]));
});