TF-267 Fix bug display a full page for sorting results

This commit is contained in:
dab246
2022-03-08 09:09:30 +07:00
committed by Dat H. Pham
parent 7beebfebc8
commit 5f2799ee79
22 changed files with 323 additions and 107 deletions
@@ -6,6 +6,7 @@ import 'package:jmap_dart_client/jmap/core/state.dart';
import 'package:jmap_dart_client/jmap/core/unsigned_int.dart';
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
import 'package:model/model.dart';
import 'package:tmail_ui_user/features/thread/data/model/email_change_response.dart';
import 'package:tmail_ui_user/features/thread/domain/model/email_response.dart';
@@ -29,7 +30,7 @@ abstract class ThreadDataSource {
}
);
Future<List<Email>> getAllEmailCache({MailboxId? inMailboxId, Set<Comparator>? sort});
Future<List<Email>> getAllEmailCache({MailboxId? inMailboxId, Set<Comparator>? sort, FilterMessageOption? filterOption});
Future<void> update({List<Email>? updated, List<Email>? created, List<EmailId>? destroyed});
}
@@ -6,6 +6,7 @@ import 'package:jmap_dart_client/jmap/core/state.dart';
import 'package:jmap_dart_client/jmap/core/unsigned_int.dart';
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
import 'package:model/model.dart';
import 'package:tmail_ui_user/features/thread/data/datasource/thread_datasource.dart';
import 'package:tmail_ui_user/features/thread/data/local/email_cache_manager.dart';
import 'package:tmail_ui_user/features/thread/data/model/email_change_response.dart';
@@ -43,9 +44,9 @@ class LocalThreadDataSourceImpl extends ThreadDataSource {
}
@override
Future<List<Email>> getAllEmailCache({MailboxId? inMailboxId, Set<Comparator>? sort}) {
Future<List<Email>> getAllEmailCache({MailboxId? inMailboxId, Set<Comparator>? sort, FilterMessageOption? filterOption}) {
return Future.sync(() async {
return await _emailCacheManager.getAllEmail(inMailboxId: inMailboxId, sort: sort);
return await _emailCacheManager.getAllEmail(inMailboxId: inMailboxId, sort: sort, filterOption: filterOption ?? FilterMessageOption.all);
}).catchError((error) {
throw error;
});
@@ -6,6 +6,7 @@ import 'package:jmap_dart_client/jmap/core/state.dart';
import 'package:jmap_dart_client/jmap/core/unsigned_int.dart';
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
import 'package:model/model.dart';
import 'package:tmail_ui_user/features/thread/data/datasource/thread_datasource.dart';
import 'package:tmail_ui_user/features/thread/data/model/email_change_response.dart';
import 'package:tmail_ui_user/features/thread/domain/model/email_response.dart';
@@ -60,7 +61,7 @@ class ThreadDataSourceImpl extends ThreadDataSource {
}
@override
Future<List<Email>> getAllEmailCache({MailboxId? inMailboxId, Set<Comparator>? sort, UnsignedInt? limit}) {
Future<List<Email>> getAllEmailCache({MailboxId? inMailboxId, Set<Comparator>? sort, FilterMessageOption? filterOption}) {
throw UnimplementedError();
}
@@ -16,11 +16,18 @@ class EmailCacheManager {
EmailCacheManager(this._emailCacheClient);
Future<List<Email>> getAllEmail({MailboxId? inMailboxId, Set<Comparator>? sort}) async {
Future<List<Email>> getAllEmail({
MailboxId? inMailboxId,
Set<Comparator>? sort,
FilterMessageOption filterOption = FilterMessageOption.all
}) async {
final emailCacheList = inMailboxId != null
? await _emailCacheClient.getListEmailCacheByMailboxId(inMailboxId)
: await _emailCacheClient.getAll();
final emailList = emailCacheList.map((emailCache) => emailCache.toEmail()).toList();
final emailList = emailCacheList
.map((emailCache) => emailCache.toEmail())
.where((email) => filterOption.filterEmail(email))
.toList();
if (sort != null) {
sort.forEach((comparator) {
emailList.sortBy(comparator);
@@ -36,7 +36,10 @@ class ThreadRepositoryImpl extends ThreadRepository {
}
) async* {
final localEmailResponse = await Future.wait([
mapDataSource[DataSourceType.local]!.getAllEmailCache(inMailboxId: emailFilter?.mailboxId, sort: sort),
mapDataSource[DataSourceType.local]!.getAllEmailCache(
inMailboxId: emailFilter?.mailboxId,
sort: sort,
filterOption: emailFilter?.filterOption),
stateDataSource.getState(StateType.email)
]).then((List response) {
return EmailsResponse(emailList: response.first, state: response.last);
@@ -110,7 +113,10 @@ class ThreadRepositoryImpl extends ThreadRepository {
}
final newEmailResponse = await Future.wait([
mapDataSource[DataSourceType.local]!.getAllEmailCache(inMailboxId: emailFilter?.mailboxId, sort: sort),
mapDataSource[DataSourceType.local]!.getAllEmailCache(
inMailboxId: emailFilter?.mailboxId,
sort: sort,
filterOption: emailFilter?.filterOption),
stateDataSource.getState(StateType.email)
]).then((List response) {
return EmailsResponse(emailList: response.first, state: response.last);
@@ -167,12 +173,14 @@ class ThreadRepositoryImpl extends ThreadRepository {
Set<Comparator>? sort,
Properties? propertiesCreated,
Properties? propertiesUpdated,
MailboxId? inMailboxId
MailboxId? inMailboxId,
FilterMessageOption? filterOption,
}
) async* {
final localEmailList = await mapDataSource[DataSourceType.local]!.getAllEmailCache(
inMailboxId: inMailboxId,
sort: sort);
sort: sort,
filterOption: filterOption);
EmailChangeResponse? emailChangeResponse;
bool hasMoreChanges = true;
@@ -212,7 +220,7 @@ class ThreadRepositoryImpl extends ThreadRepository {
}
final newEmailResponse = await Future.wait([
mapDataSource[DataSourceType.local]!.getAllEmailCache(inMailboxId: inMailboxId, sort: sort),
mapDataSource[DataSourceType.local]!.getAllEmailCache(inMailboxId: inMailboxId, sort: sort, filterOption: filterOption),
stateDataSource.getState(StateType.email)
]).then((List response) {
return EmailsResponse(emailList: response.first, state: response.last);
@@ -270,4 +278,40 @@ class ThreadRepositoryImpl extends ThreadRepository {
return emailResponse.emailList ?? List.empty();
}
@override
Stream<EmailsResponse> refreshAll(
AccountId accountId,
{
UnsignedInt? limit,
Set<Comparator>? sort,
EmailFilter? emailFilter,
Properties? propertiesCreated,
Properties? propertiesUpdated,
}
) async* {
EmailsResponse? networkEmailResponse = await mapDataSource[DataSourceType.network]!.getAllEmail(
accountId,
limit: limit,
sort: sort,
filter: emailFilter?.filter,
properties: propertiesCreated);
await _updateEmailCache(newCreated: networkEmailResponse.emailList);
if (networkEmailResponse.state != null) {
await _updateState(networkEmailResponse.state!);
}
final newEmailResponse = await Future.wait([
mapDataSource[DataSourceType.local]!.getAllEmailCache(
inMailboxId: emailFilter?.mailboxId,
sort: sort,
filterOption: emailFilter?.filterOption),
stateDataSource.getState(StateType.email)
]).then((List response) {
return EmailsResponse(emailList: response.first, state: response.last);
});
yield newEmailResponse;
}
}
@@ -21,6 +21,17 @@ abstract class ThreadRepository {
}
);
Stream<EmailsResponse> refreshAll(
AccountId accountId,
{
UnsignedInt? limit,
Set<Comparator>? sort,
EmailFilter? emailFilter,
Properties? propertiesCreated,
Properties? propertiesUpdated,
}
);
Stream<EmailsResponse> refreshChanges(
AccountId accountId,
jmap.State currentState,
@@ -28,7 +39,8 @@ abstract class ThreadRepository {
Set<Comparator>? sort,
Properties? propertiesCreated,
Properties? propertiesUpdated,
MailboxId? inMailboxId
MailboxId? inMailboxId,
FilterMessageOption? filterOption,
}
);
@@ -0,0 +1,52 @@
import 'package:core/core.dart';
import 'package:dartz/dartz.dart';
import 'package:jmap_dart_client/jmap/account_id.dart';
import 'package:jmap_dart_client/jmap/core/properties/properties.dart';
import 'package:jmap_dart_client/jmap/core/sort/comparator.dart';
import 'package:jmap_dart_client/jmap/core/unsigned_int.dart';
import 'package:tmail_ui_user/features/thread/domain/model/email_response.dart';
import 'package:tmail_ui_user/features/thread/domain/repository/thread_repository.dart';
import 'package:tmail_ui_user/features/thread/domain/state/get_all_email_state.dart';
import 'package:model/model.dart';
class RefreshAllEmailsInMailboxInteractor {
final ThreadRepository threadRepository;
RefreshAllEmailsInMailboxInteractor(this.threadRepository);
Stream<Either<Failure, Success>> execute(
AccountId accountId,
{
UnsignedInt? limit,
Set<Comparator>? sort,
EmailFilter? emailFilter,
Properties? propertiesCreated,
Properties? propertiesUpdated,
}
) async* {
try {
yield Right<Failure, Success>(LoadingState());
yield* threadRepository
.refreshAll(
accountId,
limit: limit,
sort: sort,
emailFilter: emailFilter,
propertiesCreated: propertiesCreated,
propertiesUpdated: propertiesUpdated)
.map(_toGetEmailState);
} catch (e) {
yield Left(GetAllEmailFailure(e));
}
}
Either<Failure, Success> _toGetEmailState(EmailsResponse emailResponse) {
final presentationEmailList = emailResponse.emailList
?.map((email) => email.toPresentationEmail()).toList() ?? List.empty();
return Right<Failure, Success>(GetAllEmailSuccess(
emailList: presentationEmailList,
currentEmailState: emailResponse.state));
}
}
@@ -22,7 +22,8 @@ class RefreshChangesEmailsInMailboxInteractor {
Set<Comparator>? sort,
Properties? propertiesCreated,
Properties? propertiesUpdated,
MailboxId? inMailboxId
MailboxId? inMailboxId,
FilterMessageOption? filterOption,
}
) async* {
yield Right<Failure, Success>(RefreshingState());
@@ -35,7 +36,8 @@ class RefreshChangesEmailsInMailboxInteractor {
sort: sort,
propertiesCreated: propertiesCreated,
propertiesUpdated: propertiesUpdated,
inMailboxId: inMailboxId)
inMailboxId: inMailboxId,
filterOption: filterOption)
.map(_toGetEmailState);
} catch (e) {
yield Left(GetAllEmailFailure(e));
@@ -1,31 +1,11 @@
import 'package:core/core.dart';
import 'package:flutter/cupertino.dart';
import 'package:model/email/presentation_email.dart';
import 'package:model/model.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
enum FilterMessageOption {
all,
unread,
attachments,
starred,
}
extension FilterMessageOptionExtension on FilterMessageOption {
bool filterEmail(PresentationEmail email) {
switch(this) {
case FilterMessageOption.all:
return true;
case FilterMessageOption.unread:
return email.isUnReadEmail();
case FilterMessageOption.attachments:
return email.withAttachments;
case FilterMessageOption.starred:
return email.isFlaggedEmail();
}
}
String getIconToast(ImagePaths imagePaths) {
switch(this) {
case FilterMessageOption.all:
@@ -28,6 +28,7 @@ import 'package:tmail_ui_user/features/thread/domain/usecases/load_more_emails_i
import 'package:tmail_ui_user/features/thread/domain/usecases/mark_as_multiple_email_read_interactor.dart';
import 'package:tmail_ui_user/features/thread/domain/usecases/move_multiple_email_to_mailbox_interactor.dart';
import 'package:tmail_ui_user/features/thread/domain/usecases/mark_as_star_multiple_email_interactor.dart';
import 'package:tmail_ui_user/features/thread/domain/usecases/refresh_all_emails_in_mailbox_interactor.dart';
import 'package:tmail_ui_user/features/thread/domain/usecases/refresh_changes_emails_in_mailbox_interactor.dart';
import 'package:tmail_ui_user/features/thread/domain/usecases/search_email_interactor.dart';
import 'package:tmail_ui_user/features/thread/domain/usecases/search_more_email_interactor.dart';
@@ -46,6 +47,7 @@ class ThreadBindings extends BaseBindings {
Get.put(ThreadController(
Get.find<ResponsiveUtils>(),
Get.find<GetEmailsInMailboxInteractor>(),
Get.find<RefreshAllEmailsInMailboxInteractor>(),
Get.find<ScrollController>(),
Get.find<MarkAsMultipleEmailReadInteractor>(),
Get.find<AppToast>(),
@@ -83,6 +85,7 @@ class ThreadBindings extends BaseBindings {
@override
void bindingsInteractor() {
Get.lazyPut(() => GetEmailsInMailboxInteractor(Get.find<ThreadRepository>()));
Get.lazyPut(() => RefreshAllEmailsInMailboxInteractor(Get.find<ThreadRepository>()));
Get.lazyPut(() => MarkAsEmailReadInteractor(Get.find<EmailRepository>()));
Get.lazyPut(() => MarkAsMultipleEmailReadInteractor(Get.find<EmailRepository>()));
Get.lazyPut(() => MoveToMailboxInteractor(Get.find<EmailRepository>()));
@@ -11,6 +11,7 @@ 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';
import 'package:jmap_dart_client/jmap/mail/email/email_filter_condition.dart';
import 'package:jmap_dart_client/jmap/mail/email/keyword_identifier.dart';
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
import 'package:model/model.dart';
import 'package:tmail_ui_user/features/base/base_controller.dart';
@@ -41,10 +42,11 @@ import 'package:tmail_ui_user/features/thread/domain/usecases/load_more_emails_i
import 'package:tmail_ui_user/features/thread/domain/usecases/mark_as_multiple_email_read_interactor.dart';
import 'package:tmail_ui_user/features/thread/domain/usecases/move_multiple_email_to_mailbox_interactor.dart';
import 'package:tmail_ui_user/features/thread/domain/usecases/mark_as_star_multiple_email_interactor.dart';
import 'package:tmail_ui_user/features/thread/domain/usecases/refresh_all_emails_in_mailbox_interactor.dart';
import 'package:tmail_ui_user/features/thread/domain/usecases/refresh_changes_emails_in_mailbox_interactor.dart';
import 'package:tmail_ui_user/features/thread/domain/usecases/search_email_interactor.dart';
import 'package:tmail_ui_user/features/thread/domain/usecases/search_more_email_interactor.dart';
import 'package:tmail_ui_user/features/thread/presentation/model/filter_message_option.dart';
import 'package:tmail_ui_user/features/thread/presentation/extensions/filter_message_option_extension.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
import 'package:tmail_ui_user/main/routes/app_routes.dart';
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
@@ -54,6 +56,7 @@ class ThreadController extends BaseController {
final mailboxDashBoardController = Get.find<MailboxDashBoardController>();
final GetEmailsInMailboxInteractor _getEmailsInMailboxInteractor;
final RefreshAllEmailsInMailboxInteractor _refreshAllEmailsInMailboxInteractor;
final MarkAsMultipleEmailReadInteractor _markAsMultipleEmailReadInteractor;
final AppToast _appToast;
final ResponsiveUtils responsiveUtils;
@@ -69,7 +72,6 @@ class ThreadController extends BaseController {
final emailList = <PresentationEmail>[].obs;
final emailListSearch = <PresentationEmail>[].obs;
final emailListFiltered = <PresentationEmail>[].obs;
final currentSelectMode = SelectMode.INACTIVE.obs;
final filterMessageOption = FilterMessageOption.all.obs;
@@ -82,9 +84,6 @@ class ThreadController extends BaseController {
SearchQuery? get searchQuery => mailboxDashBoardController.searchQuery;
EmailFilterCondition? get _filterCondition => EmailFilterCondition(
inMailbox: mailboxDashBoardController.selectedMailbox.value?.id);
Set<Comparator>? get _sortOrder => Set()
..add(EmailComparator(EmailComparatorProperty.receivedAt)
..setIsAscending(false));
@@ -94,6 +93,7 @@ class ThreadController extends BaseController {
ThreadController(
this.responsiveUtils,
this._getEmailsInMailboxInteractor,
this._refreshAllEmailsInMailboxInteractor,
this.listEmailController,
this._markAsMultipleEmailReadInteractor,
this._appToast,
@@ -220,7 +220,6 @@ class ThreadController extends BaseController {
void _resetToOriginalValue() {
dispatchState(Right(LoadingState()));
emailList.clear();
emailListFiltered.clear();
canLoadMore = true;
disableSearch();
cancelSelectEmail();
@@ -232,12 +231,6 @@ class ThreadController extends BaseController {
.map((email) => email.asAvatarGradientColor(random))
.toList();
emailList.value = listEmailHaveAvatarGradientColor;
if (isFilterMessagesEnabled) {
final emailsFiltered = listEmailHaveAvatarGradientColor
.where((email) => filterMessageOption.value.filterEmail(email))
.toList();
emailListFiltered.addAll(emailsFiltered);
}
}
void _getAllEmailAction(AccountId accountId, {MailboxId? mailboxId}) {
@@ -246,16 +239,60 @@ class ThreadController extends BaseController {
limit: ThreadConstants.defaultLimit,
sort: _sortOrder,
emailFilter: EmailFilter(
filter: _filterCondition,
filter: _getFilterCondition(),
filterOption: filterMessageOption.value,
mailboxId: mailboxId ?? _currentMailboxId),
propertiesCreated: ThreadConstants.propertiesDefault,
propertiesUpdated: ThreadConstants.propertiesUpdatedDefault,
));
}
EmailFilterCondition _getFilterCondition({bool isLoadMore = false}) {
switch(filterMessageOption.value) {
case FilterMessageOption.all:
return EmailFilterCondition(
inMailbox: mailboxDashBoardController.selectedMailbox.value?.id,
before: isLoadMore ? emailList.last.receivedAt : null
);
case FilterMessageOption.unread:
return EmailFilterCondition(
inMailbox: mailboxDashBoardController.selectedMailbox.value?.id,
notKeyword: KeyWordIdentifier.emailSeen.value,
before: isLoadMore ? emailList.last.receivedAt : null
);
case FilterMessageOption.attachments:
return EmailFilterCondition(
inMailbox: mailboxDashBoardController.selectedMailbox.value?.id,
hasAttachment: true,
before: isLoadMore ? emailList.last.receivedAt : null
);
case FilterMessageOption.starred:
return EmailFilterCondition(
inMailbox: mailboxDashBoardController.selectedMailbox.value?.id,
hasKeyword: KeyWordIdentifier.emailFlagged.value,
before: isLoadMore ? emailList.last.receivedAt : null
);
}
}
void refreshAllEmail() {
dispatchState(Right(LoadingState()));
_getAllEmail();
canLoadMore = true;
cancelSelectEmail();
if (_accountId != null) {
consumeState(_refreshAllEmailsInMailboxInteractor.execute(
_accountId!,
limit: ThreadConstants.defaultLimit,
sort: _sortOrder,
emailFilter: EmailFilter(
filter: _getFilterCondition(),
filterOption: filterMessageOption.value,
mailboxId: _currentMailboxId),
propertiesCreated: ThreadConstants.propertiesDefault,
propertiesUpdated: ThreadConstants.propertiesUpdatedDefault,
));
}
}
void _refreshEmailChanges() {
@@ -279,6 +316,7 @@ class ThreadController extends BaseController {
propertiesCreated: ThreadConstants.propertiesDefault,
propertiesUpdated: ThreadConstants.propertiesUpdatedDefault,
inMailboxId: _currentMailboxId,
filterOption: filterMessageOption.value
));
}
}
@@ -290,9 +328,7 @@ class ThreadController extends BaseController {
_accountId!,
limit: ThreadConstants.defaultLimit,
sort: _sortOrder,
filter: EmailFilterCondition(
inMailbox: mailboxDashBoardController.selectedMailbox.value?.id,
before: emailList.last.receivedAt),
filter: _getFilterCondition(isLoadMore: true),
properties: ThreadConstants.propertiesDefault,
lastEmailId: emailList.last.id
));
@@ -305,13 +341,6 @@ class ThreadController extends BaseController {
.map((email) => email.asAvatarGradientColor(random))
.toList();
emailList.addAll(listEmailHaveAvatarGradientColor);
if (isFilterMessagesEnabled) {
final emailsFilteredMore = listEmailHaveAvatarGradientColor
.where((email) => filterMessageOption.value.filterEmail(email))
.toList();
emailListFiltered.addAll(emailsFilteredMore);
}
} else {
canLoadMore = false;
}
@@ -336,15 +365,9 @@ class ThreadController extends BaseController {
.map((email) => email.id == presentationEmailSelected.id ? email.toggleSelect() : email)
.toList();
} else {
if (isFilterMessagesEnabled) {
emailListFiltered.value = emailListFiltered
.map((email) => email.id == presentationEmailSelected.id ? email.toggleSelect() : email)
.toList();
} else {
emailList.value = emailList
.map((email) => email.id == presentationEmailSelected.id ? email.toggleSelect() : email)
.toList();
}
emailList.value = emailList
.map((email) => email.id == presentationEmailSelected.id ? email.toggleSelect() : email)
.toList();
}
if (_isUnSelectedAll()) {
@@ -364,11 +387,7 @@ class ThreadController extends BaseController {
if (isSearchActive()) {
return emailListSearch.where((email) => email.selectMode == SelectMode.ACTIVE).toList();
} else {
if (isFilterMessagesEnabled) {
return emailListFiltered.where((email) => email.selectMode == SelectMode.ACTIVE).toList();
} else {
return emailList.where((email) => email.selectMode == SelectMode.ACTIVE).toList();
}
return emailList.where((email) => email.selectMode == SelectMode.ACTIVE).toList();
}
}
@@ -376,11 +395,7 @@ class ThreadController extends BaseController {
if (isSearchActive()) {
return emailListSearch.every((email) => email.selectMode == SelectMode.INACTIVE);
} else {
if (isFilterMessagesEnabled) {
return emailListFiltered.every((email) => email.selectMode == SelectMode.INACTIVE);
} else {
return emailList.every((email) => email.selectMode == SelectMode.INACTIVE);
}
return emailList.every((email) => email.selectMode == SelectMode.INACTIVE);
}
}
@@ -392,11 +407,7 @@ class ThreadController extends BaseController {
if (isSearchActive()) {
emailListSearch.value = emailListSearch.map((email) => email.toSelectedEmail(selectMode: SelectMode.INACTIVE)).toList();
} else {
if (isFilterMessagesEnabled) {
emailListFiltered.value = emailListFiltered.map((email) => email.toSelectedEmail(selectMode: SelectMode.INACTIVE)).toList();
} else {
emailList.value = emailList.map((email) => email.toSelectedEmail(selectMode: SelectMode.INACTIVE)).toList();
}
emailList.value = emailList.map((email) => email.toSelectedEmail(selectMode: SelectMode.INACTIVE)).toList();
}
currentSelectMode.value = SelectMode.INACTIVE;
}
@@ -465,22 +476,18 @@ class ThreadController extends BaseController {
popBack();
}
bool get isFilterMessagesEnabled => filterMessageOption != FilterMessageOption.all;
void filterMessagesAction(BuildContext context, FilterMessageOption filterOption) {
popBack();
final newFilterOption = filterMessageOption.value == filterOption ? FilterMessageOption.all : filterOption;
final emailsFiltered = emailList.where((email) => newFilterOption.filterEmail(email)).toList();
emailListFiltered.value = emailsFiltered;
filterMessageOption.value = newFilterOption;
_appToast.showToastWithIcon(
Get.overlayContext!,
message: newFilterOption.getMessageToast(context),
icon: newFilterOption.getIconToast(_imagePaths));
refreshAllEmail();
}
void moveSelectedMultipleEmailToMailboxAction(List<PresentationEmail> listEmail) async {
@@ -6,7 +6,6 @@ import 'package:get/get.dart';
import 'package:model/model.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/presentation/model/filter_message_option.dart';
import 'package:tmail_ui_user/features/thread/presentation/thread_controller.dart';
import 'package:tmail_ui_user/features/thread/presentation/widgets/app_bar_thread_widget_builder.dart';
import 'package:tmail_ui_user/features/thread/presentation/widgets/bottom_bar_thread_selection_widget.dart';
@@ -317,9 +316,7 @@ class ThreadView extends GetWidget<ThreadController> {
return _buildResultSearchEmails(context, controller.emailListSearch);
}
} else {
return _buildResultListEmail(
context,
controller.isFilterMessagesEnabled ? controller.emailListFiltered : controller.emailList);
return _buildResultListEmail(context, controller.emailList);
}
})
);
@@ -4,7 +4,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:get/get.dart';
import 'package:model/model.dart';
import 'package:tmail_ui_user/features/thread/presentation/model/filter_message_option.dart';
import 'package:tmail_ui_user/features/thread/presentation/extensions/filter_message_option_extension.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
typedef OnFilterEmailAction = void Function(FilterMessageOption, RelativeRect? position);
@@ -3,7 +3,7 @@ import 'package:core/core.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
import 'package:tmail_ui_user/features/thread/presentation/model/filter_message_option.dart';
import 'package:model/model.dart';
class FilterMessageCupertinoActionSheetActionBuilder extends CupertinoActionSheetActionBuilder<FilterMessageOption> {