Use common FilterField & EmailReceiveTimeType objects for the entire app

Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
dab246
2025-07-11 01:31:07 +07:00
committed by Dat H. Pham
parent 84e3c526f7
commit da29ff01e3
17 changed files with 253 additions and 378 deletions
+104
View File
@@ -0,0 +1,104 @@
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/email_receive_time_type.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
enum FilterField {
from,
to,
cc,
bcc,
replyTo,
subject,
hasKeyword,
notKeyword,
mailBox,
date,
sortBy,
hasAttachment,
deletionDate,
receptionDate,
recoverSubject,
recipients,
sender;
String getTitle(AppLocalizations appLocalizations) {
switch (this) {
case FilterField.from:
return appLocalizations.from_email_address_prefix;
case FilterField.to:
return appLocalizations.to_email_address_prefix;
case FilterField.subject:
case FilterField.recoverSubject:
return appLocalizations.subject;
case FilterField.hasKeyword:
return appLocalizations.hasTheWords;
case FilterField.notKeyword:
return appLocalizations.doesNotHave;
case FilterField.mailBox:
return appLocalizations.folder;
case FilterField.date:
return appLocalizations.date;
case FilterField.sortBy:
return appLocalizations.sortBy;
case FilterField.hasAttachment:
return appLocalizations.hasAttachment;
case FilterField.deletionDate:
return appLocalizations.deletionDate;
case FilterField.receptionDate:
return appLocalizations.receptionDate;
case FilterField.recipients:
return appLocalizations.headerRecipients;
case FilterField.sender:
return appLocalizations.sender;
default:
return '';
}
}
String getHintText(AppLocalizations appLocalizations) {
switch (this) {
case FilterField.from:
case FilterField.to:
return appLocalizations.nameOrEmailAddress;
case FilterField.subject:
return appLocalizations.enterASubject;
case FilterField.hasKeyword:
case FilterField.notKeyword:
return appLocalizations.enterSomeSuggestions;
case FilterField.mailBox:
return appLocalizations.allFolders;
case FilterField.date:
return appLocalizations.allTime;
case FilterField.sortBy:
return appLocalizations.mostRecent;
case FilterField.hasAttachment:
return appLocalizations.hasAttachment;
case FilterField.recoverSubject:
return appLocalizations.enterSubjectKeywords;
case FilterField.recipients:
case FilterField.sender:
return appLocalizations.addAnEmailAddress;
default:
return '';
}
}
List<EmailReceiveTimeType> getSupportedTimeTypes(
DateTime restorationHorizon,
) {
switch (this) {
case FilterField.deletionDate:
final supportedTypes = EmailReceiveTimeType
.valuesForRecoverDeletionDateField
.where((type) => restorationHorizon
.subtract(const Duration(seconds: 2)) // to allow "15 days" if restorationHorizon is exactly 15
.isBefore(type.toOldestUTCDate()!.value))
.toList();
return [...supportedTypes, EmailReceiveTimeType.customRange];
case FilterField.receptionDate:
return EmailReceiveTimeType.valuesForRecoverReceptionDateDateField;
default:
return [];
}
}
}