From a6e859f2b69ba82dfdfead37200146b703710d16 Mon Sep 17 00:00:00 2001 From: hieubt Date: Thu, 21 Dec 2023 00:11:44 +0700 Subject: [PATCH] TF-2101 Add `email_recovery_time_type` enum (cherry picked from commit a11e33c33208d07d7c18115cec9ec48fe0799a0d) --- .../model/email_recovery_time_type.dart | 97 +++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 lib/features/email_recovery/presentation/model/email_recovery_time_type.dart diff --git a/lib/features/email_recovery/presentation/model/email_recovery_time_type.dart b/lib/features/email_recovery/presentation/model/email_recovery_time_type.dart new file mode 100644 index 000000000..a9f553100 --- /dev/null +++ b/lib/features/email_recovery/presentation/model/email_recovery_time_type.dart @@ -0,0 +1,97 @@ +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, + 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.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.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.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(); + } + } +} \ No newline at end of file