TF-3834 Implement remember user sort order after search
Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/user_name.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/model/recent_search.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/email_sort_order_type.dart';
|
||||
|
||||
abstract class SearchDataSource {
|
||||
Future<void> saveRecentSearch(
|
||||
@@ -17,4 +18,8 @@ abstract class SearchDataSource {
|
||||
String? pattern,
|
||||
}
|
||||
);
|
||||
|
||||
Future<void> storeEmailSortOrder(EmailSortOrderType sortOrderType);
|
||||
|
||||
Future<EmailSortOrderType> getStoredEmailSortOrder();
|
||||
}
|
||||
@@ -3,15 +3,22 @@ import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/user_name.dart';
|
||||
import 'package:tmail_ui_user/features/cleanup/data/local/recent_search_cache_manager.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource/search_datasource.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/data/local/local_sort_order_manager.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/model/recent_search.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/email_sort_order_type.dart';
|
||||
import 'package:tmail_ui_user/main/exceptions/exception_thrower.dart';
|
||||
|
||||
class SearchDataSourceImpl extends SearchDataSource {
|
||||
|
||||
final RecentSearchCacheManager _recentSearchCacheManager;
|
||||
final LocalSortOrderManager _localSortOrderManager;
|
||||
final ExceptionThrower _exceptionThrower;
|
||||
|
||||
SearchDataSourceImpl(this._recentSearchCacheManager, this._exceptionThrower);
|
||||
SearchDataSourceImpl(
|
||||
this._recentSearchCacheManager,
|
||||
this._localSortOrderManager,
|
||||
this._exceptionThrower,
|
||||
);
|
||||
|
||||
@override
|
||||
Future<void> saveRecentSearch(
|
||||
@@ -46,4 +53,18 @@ class SearchDataSourceImpl extends SearchDataSource {
|
||||
);
|
||||
}).catchError(_exceptionThrower.throwException);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> storeEmailSortOrder(EmailSortOrderType sortOrderType) {
|
||||
return Future.sync(() async {
|
||||
return await _localSortOrderManager.storeEmailSortOrderIfChanged(sortOrderType);
|
||||
}).catchError(_exceptionThrower.throwException);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<EmailSortOrderType> getStoredEmailSortOrder() {
|
||||
return Future.sync(() {
|
||||
return _localSortOrderManager.getStoredEmailSortOrder();
|
||||
}).catchError(_exceptionThrower.throwException);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
import 'package:core/utils/app_logger.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/email_sort_order_type.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/search_email_filter.dart';
|
||||
|
||||
class LocalSortOrderManager {
|
||||
static const String _emailSortOrderKey = 'email.sort_order';
|
||||
|
||||
final SharedPreferences _sharedPreferences;
|
||||
|
||||
LocalSortOrderManager(this._sharedPreferences);
|
||||
|
||||
Future<bool> storeEmailSortOrder(
|
||||
EmailSortOrderType emailSortOrderType,
|
||||
) async {
|
||||
return await _sharedPreferences.setString(
|
||||
_emailSortOrderKey,
|
||||
emailSortOrderType.name,
|
||||
);
|
||||
}
|
||||
|
||||
bool isEmailSortOrderStored(EmailSortOrderType emailSortOrderType) {
|
||||
final stored = _sharedPreferences.getString(_emailSortOrderKey);
|
||||
return stored == emailSortOrderType.name;
|
||||
}
|
||||
|
||||
Future<bool> storeEmailSortOrderIfChanged(
|
||||
EmailSortOrderType emailSortOrderType,
|
||||
) async {
|
||||
if (isEmailSortOrderStored(emailSortOrderType)) {
|
||||
return false;
|
||||
}
|
||||
return await storeEmailSortOrder(emailSortOrderType);
|
||||
}
|
||||
|
||||
EmailSortOrderType getStoredEmailSortOrder() {
|
||||
final value = _sharedPreferences.getString(_emailSortOrderKey);
|
||||
log('LocalSortOrderManager::getStoredEmailSortOrder: $value');
|
||||
if (value == null) {
|
||||
return SearchEmailFilter.defaultSortOrder;
|
||||
}
|
||||
return EmailSortOrderType.values.firstWhere(
|
||||
(e) => e.name == value,
|
||||
orElse: () => SearchEmailFilter.defaultSortOrder,
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -4,6 +4,7 @@ import 'package:jmap_dart_client/jmap/core/user_name.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource/search_datasource.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/model/recent_search.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/repository/search_repository.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/email_sort_order_type.dart';
|
||||
|
||||
class SearchRepositoryImpl extends SearchRepository {
|
||||
|
||||
@@ -36,4 +37,14 @@ class SearchRepositoryImpl extends SearchRepository {
|
||||
pattern: pattern,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> storeEmailSortOrder(EmailSortOrderType sortOrderType) {
|
||||
return searchDataSource.storeEmailSortOrder(sortOrderType);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<EmailSortOrderType> getStoredEmailSortOrder() {
|
||||
return searchDataSource.getStoredEmailSortOrder();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user