TF-3767 Use TupleKey to save recent search for each account
Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
+2
-2
@@ -8,9 +8,9 @@ import 'package:core/utils/print_utils.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:tmail_ui_user/features/base/base_bindings.dart';
|
||||
import 'package:tmail_ui_user/features/caching/caching_manager.dart';
|
||||
import 'package:tmail_ui_user/features/caching/clients/recent_search_cache_client.dart';
|
||||
import 'package:tmail_ui_user/features/caching/utils/local_storage_manager.dart';
|
||||
import 'package:tmail_ui_user/features/caching/utils/session_storage_manager.dart';
|
||||
import 'package:tmail_ui_user/features/cleanup/data/local/recent_search_cache_manager.dart';
|
||||
import 'package:tmail_ui_user/features/composer/data/repository/contact_repository_impl.dart';
|
||||
import 'package:tmail_ui_user/features/composer/domain/repository/contact_repository.dart';
|
||||
import 'package:tmail_ui_user/features/composer/domain/usecases/send_email_interactor.dart';
|
||||
@@ -233,7 +233,7 @@ class MailboxDashBoardBindings extends BaseBindings {
|
||||
Get.find<HtmlAnalyzer>(),
|
||||
Get.find<CacheExceptionThrower>()));
|
||||
Get.lazyPut(() => SearchDataSourceImpl(
|
||||
Get.find<RecentSearchCacheClient>(),
|
||||
Get.find<RecentSearchCacheManager>(),
|
||||
Get.find<CacheExceptionThrower>()));
|
||||
Get.lazyPut(() => ThreadDataSourceImpl(
|
||||
Get.find<ThreadAPI>(),
|
||||
|
||||
@@ -9,6 +9,7 @@ import 'package:jmap_dart_client/jmap/core/filter/filter.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/session/session.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/sort/comparator.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/unsigned_int.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/user_name.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/utc_date.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email_comparator.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email_comparator_property.dart';
|
||||
@@ -245,13 +246,25 @@ class SearchController extends BaseController with DateRangePickerMixin {
|
||||
searchInputController.text = value;
|
||||
}
|
||||
|
||||
void saveRecentSearch(RecentSearch recentSearch) {
|
||||
consumeState(_saveRecentSearchInteractor.execute(recentSearch));
|
||||
void saveRecentSearch(
|
||||
AccountId accountId,
|
||||
UserName userName,
|
||||
RecentSearch recentSearch,
|
||||
) {
|
||||
consumeState(_saveRecentSearchInteractor.execute(
|
||||
accountId,
|
||||
userName,
|
||||
recentSearch,
|
||||
));
|
||||
}
|
||||
|
||||
Future<List<RecentSearch>> getAllRecentSearchAction(String pattern) async {
|
||||
Future<List<RecentSearch>> getAllRecentSearchAction(
|
||||
AccountId accountId,
|
||||
UserName userName,
|
||||
String pattern,
|
||||
) async {
|
||||
return await _getAllRecentSearchLatestInteractor
|
||||
.execute(pattern: pattern)
|
||||
.execute(accountId, userName, pattern: pattern)
|
||||
.then((result) => result.fold(
|
||||
(failure) => <RecentSearch>[],
|
||||
(success) => success is GetAllRecentSearchLatestSuccess
|
||||
|
||||
@@ -119,7 +119,21 @@ class SearchInputFormWidget extends StatelessWidget with AppLoaderMixin {
|
||||
padding: const EdgeInsets.only(bottom: 16),
|
||||
child: loadingWidget
|
||||
),
|
||||
fetchRecentActionCallback: _searchController.getAllRecentSearchAction,
|
||||
fetchRecentActionCallback: (pattern) {
|
||||
final accountId = _dashBoardController.accountId.value;
|
||||
final userName = _dashBoardController.sessionCurrent?.username;
|
||||
|
||||
if (accountId == null || userName == null) {
|
||||
logError('SearchInputFormWidget::fetchRecentActionCallback: accountId or userName is null');
|
||||
return <RecentSearch>[];
|
||||
} else {
|
||||
return _searchController.getAllRecentSearchAction(
|
||||
accountId,
|
||||
userName,
|
||||
pattern,
|
||||
);
|
||||
}
|
||||
},
|
||||
itemRecentBuilder: (context, recent) => RecentSearchItemTileWidget(recent),
|
||||
onRecentSelected: _invokeSelectRecentItem,
|
||||
suggestionsCallback: _dashBoardController.quickSearchEmails,
|
||||
@@ -143,7 +157,7 @@ class SearchInputFormWidget extends StatelessWidget with AppLoaderMixin {
|
||||
_searchController.enableSearch();
|
||||
|
||||
if (queryString.isNotEmpty) {
|
||||
_searchController.saveRecentSearch(RecentSearch.now(queryString));
|
||||
_saveRecentSearch(queryString);
|
||||
}
|
||||
|
||||
if (queryString.isNotEmpty || _searchController.listFilterOnSuggestionForm.isNotEmpty) {
|
||||
@@ -157,6 +171,22 @@ class SearchInputFormWidget extends StatelessWidget with AppLoaderMixin {
|
||||
}
|
||||
}
|
||||
|
||||
void _saveRecentSearch(String queryString) {
|
||||
final accountId = _dashBoardController.accountId.value;
|
||||
final userName = _dashBoardController.sessionCurrent?.username;
|
||||
|
||||
if (accountId == null || userName == null) {
|
||||
logError('SearchInputFormWidget::_saveRecentSearch: accountId or userName is null');
|
||||
return;
|
||||
}
|
||||
|
||||
_searchController.saveRecentSearch(
|
||||
accountId,
|
||||
userName,
|
||||
RecentSearch.now(queryString),
|
||||
);
|
||||
}
|
||||
|
||||
void _invokeSelectSuggestionItem(PresentationEmail presentationEmail) {
|
||||
_dashBoardController.dispatchAction(
|
||||
OpenEmailDetailedFromSuggestionQuickSearchAction(
|
||||
|
||||
Reference in New Issue
Block a user