TF-933 Remove advanced search filter on search query in mobile/tablet

This commit is contained in:
dab246
2022-09-19 16:36:47 +07:00
committed by Dat H. Pham
parent b9d1d6cc7b
commit 639ac62bad
2 changed files with 113 additions and 38 deletions
@@ -0,0 +1,83 @@
import 'package:equatable/equatable.dart';
import 'package:jmap_dart_client/jmap/core/filter/filter.dart';
import 'package:jmap_dart_client/jmap/core/filter/filter_operator.dart';
import 'package:jmap_dart_client/jmap/core/filter/operator/logic_filter_operator.dart';
import 'package:jmap_dart_client/jmap/core/utc_date.dart';
import 'package:jmap_dart_client/jmap/mail/email/email_filter_condition.dart';
import 'package:model/model.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/email_receive_time_type.dart';
import 'package:tmail_ui_user/features/thread/domain/model/search_query.dart';
class SimpleSearchFilter with EquatableMixin {
final Set<String> from;
final SearchQuery? text;
final EmailReceiveTimeType emailReceiveTimeType;
final bool hasAttachment;
final UTCDate? before;
SimpleSearchFilter({
Set<String>? from,
EmailReceiveTimeType? emailReceiveTimeType,
bool? hasAttachment,
this.text,
this.before,
}) : from = from ?? <String>{},
hasAttachment = hasAttachment ?? false,
emailReceiveTimeType =emailReceiveTimeType ?? EmailReceiveTimeType.allTime;
SimpleSearchFilter copyWith({
Set<String>? from,
SearchQuery? text,
EmailReceiveTimeType? emailReceiveTimeType,
bool? hasAttachment,
UTCDate? before,
}) {
return SimpleSearchFilter(
from: from ?? this.from,
text: text ?? this.text,
emailReceiveTimeType: emailReceiveTimeType ?? this.emailReceiveTimeType,
hasAttachment: hasAttachment ?? this.hasAttachment,
before: before ?? this.before,
);
}
Filter? mappingToEmailFilterCondition() {
final emailEmailFilterConditionShared = EmailFilterCondition(
text: text?.value.trim().isNotEmpty == true
? text?.value
: null,
after: emailReceiveTimeType.toUTCDate(),
hasAttachment: hasAttachment == false ? null : hasAttachment,
before: before,
);
final listEmailCondition = {
if (emailEmailFilterConditionShared.hasCondition)
emailEmailFilterConditionShared,
if (from.isNotEmpty)
LogicFilterOperator(
Operator.AND,
from.map((e) => EmailFilterCondition(from: e)).toSet()),
};
return listEmailCondition.isNotEmpty
? LogicFilterOperator(Operator.AND, listEmailCondition)
: null;
}
@override
List<Object?> get props => [from, text, emailReceiveTimeType, hasAttachment, before];
}
extension SearchEmailFilterExtension on SimpleSearchFilter {
SimpleSearchFilter toSimpleSearchFilter({UTCDate? newBefore}) {
return SimpleSearchFilter(
from: from,
text: text,
emailReceiveTimeType: emailReceiveTimeType,
hasAttachment: hasAttachment,
before: newBefore,
);
}
}