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
@@ -1,99 +0,0 @@
import 'package:core/presentation/extensions/color_extension.dart';
import 'package:core/presentation/utils/theme_utils.dart';
import 'package:flutter/material.dart';
import 'package:tmail_ui_user/features/email_recovery/presentation/model/email_recovery_time_type.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
enum EmailRecoveryField {
deletionDate,
receptionDate,
subject,
recipients,
sender;
String getTitle(BuildContext context) {
switch (this) {
case EmailRecoveryField.deletionDate:
return AppLocalizations.of(context).deletionDate;
case EmailRecoveryField.receptionDate:
return AppLocalizations.of(context).receptionDate;
case EmailRecoveryField.subject:
return AppLocalizations.of(context).subject;
case EmailRecoveryField.recipients:
return AppLocalizations.of(context).headerRecipients;
case EmailRecoveryField.sender:
return AppLocalizations.of(context).sender;
}
}
String getHintText(BuildContext context) {
switch (this) {
case EmailRecoveryField.deletionDate:
return AppLocalizations.of(context).last7Days;
case EmailRecoveryField.receptionDate:
return AppLocalizations.of(context).allTime;
case EmailRecoveryField.subject:
return AppLocalizations.of(context).enterSomeSuggestions;
case EmailRecoveryField.recipients:
return AppLocalizations.of(context).addRecipientButton;
case EmailRecoveryField.sender:
return AppLocalizations.of(context).addSender;
}
}
List<EmailRecoveryTimeType> getSupportedTimeTypes(DateTime restorationHorizon) {
switch (this) {
case EmailRecoveryField.deletionDate:
final supportedTypes = [
EmailRecoveryTimeType.last7Days,
EmailRecoveryTimeType.last15Days,
EmailRecoveryTimeType.last30Days,
EmailRecoveryTimeType.last6Months,
EmailRecoveryTimeType.last1Year,
].where((type) => restorationHorizon
.subtract(const Duration(seconds: 2)) // to allow "15 days" if restorationHorizon is exactly 15
.isBefore(type.toOldestUTCDate()!.value)).toList();
return [...supportedTypes, EmailRecoveryTimeType.customRange];
case EmailRecoveryField.receptionDate:
return [
EmailRecoveryTimeType.allTime,
EmailRecoveryTimeType.last7Days,
EmailRecoveryTimeType.last30Days,
EmailRecoveryTimeType.last6Months,
EmailRecoveryTimeType.lastYear,
EmailRecoveryTimeType.customRange,
];
default:
return [];
}
}
TextStyle getTitleTextStyle() {
return ThemeUtils.defaultTextStyleInterFont.copyWith(
fontSize: 14,
fontWeight: FontWeight.w400,
color: AppColor.colorContentEmail,
);
}
TextStyle getHintTextStyle() {
final Color color;
switch (this) {
case EmailRecoveryField.deletionDate:
case EmailRecoveryField.receptionDate:
color = Colors.black;
break;
case EmailRecoveryField.subject:
case EmailRecoveryField.recipients:
case EmailRecoveryField.sender:
color = AppColor.colorHintSearchBar;
break;
}
return ThemeUtils.defaultTextStyleInterFont.copyWith(
fontSize: 16,
fontWeight: FontWeight.w400,
color: color,
);
}
}
@@ -1,105 +0,0 @@
import 'package:flutter/material.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/datetime_extension.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
import 'package:jmap_dart_client/jmap/core/utc_date.dart';
enum EmailRecoveryTimeType {
allTime,
last7Days,
last15Days,
last30Days,
last6Months,
last1Year,
lastYear,
customRange;
String getTitle(BuildContext context, {DateTime? startDate, DateTime? endDate}) {
switch(this) {
case EmailRecoveryTimeType.allTime:
return AppLocalizations.of(context).allTime;
case EmailRecoveryTimeType.last7Days:
return AppLocalizations.of(context).last7Days;
case EmailRecoveryTimeType.last15Days:
return AppLocalizations.of(context).last15Days;
case EmailRecoveryTimeType.last30Days:
return AppLocalizations.of(context).last30Days;
case EmailRecoveryTimeType.last6Months:
return AppLocalizations.of(context).last6Months;
case EmailRecoveryTimeType.last1Year:
return AppLocalizations.of(context).last1Year;
case EmailRecoveryTimeType.lastYear:
return AppLocalizations.of(context).lastYears;
case EmailRecoveryTimeType.customRange:
if (startDate != null && endDate != null) {
final startDateString = startDate.formatDate(pattern: 'yyyy-dd-MM');
final endDateString = endDate.formatDate(pattern: 'yyyy-dd-MM');
return AppLocalizations.of(context).dateRangeAdvancedSearchFilter(
startDateString,
endDateString
);
} else {
return AppLocalizations.of(context).customRange;
}
}
}
UTCDate? toOldestUTCDate() {
switch(this) {
case EmailRecoveryTimeType.last7Days:
final today = DateTime.now();
final last7Days = today.subtract(const Duration(days: 7));
return last7Days.toUTCDate();
case EmailRecoveryTimeType.last15Days:
final today = DateTime.now();
final last15Days = today.subtract(const Duration(days: 15));
return last15Days.toUTCDate();
case EmailRecoveryTimeType.last30Days:
final today = DateTime.now();
final last30Days = today.subtract(const Duration(days: 30));
return last30Days.toUTCDate();
case EmailRecoveryTimeType.last6Months:
final today = DateTime.now();
final last6months = DateTime(today.year, today.month - 6, today.day);
return last6months.toUTCDate();
case EmailRecoveryTimeType.last1Year:
case EmailRecoveryTimeType.lastYear:
final today = DateTime.now();
final lastYear = DateTime(today.year - 1, today.month, today.day);
return lastYear.toUTCDate();
default:
return null;
}
}
UTCDate? toLatestUTCDate() {
switch(this) {
case EmailRecoveryTimeType.last7Days:
case EmailRecoveryTimeType.last15Days:
case EmailRecoveryTimeType.last30Days:
case EmailRecoveryTimeType.last6Months:
case EmailRecoveryTimeType.last1Year:
case EmailRecoveryTimeType.lastYear:
final today = DateTime.now();
return today.toUTCDate();
default:
return null;
}
}
UTCDate? getAfterDate(UTCDate? startDate) {
if (startDate != null) {
return startDate;
} else {
return toOldestUTCDate();
}
}
UTCDate? getBeforeDate(UTCDate? endDate) {
if (endDate != null) {
return endDate;
} else {
return toLatestUTCDate();
}
}
}