TF-3219 display limits of email recovery in a yellow banner and filter out invalid suggestions

This commit is contained in:
Florent Azavant
2024-11-14 15:13:56 +01:00
committed by Dat H. Pham
parent 2fcb5f03d0
commit 68e9fc2f16
15 changed files with 270 additions and 13 deletions
@@ -18,6 +18,7 @@ class DateSelectionFieldWebWidget extends StatelessWidget {
final EmailRecoveryTimeType? recoveryTimeSelected;
final OnRecoveryTimeSelected? onRecoveryTimeSelected;
final VoidCallback? onTapCalendar;
final DateTime restorationHorizon;
const DateSelectionFieldWebWidget({
super.key,
@@ -29,6 +30,7 @@ class DateSelectionFieldWebWidget extends StatelessWidget {
this.recoveryTimeSelected,
this.onRecoveryTimeSelected,
this.onTapCalendar,
required this.restorationHorizon
});
@override
@@ -54,7 +56,7 @@ class DateSelectionFieldWebWidget extends StatelessWidget {
endDate: endDate,
recoveryTimeSelected: recoveryTimeSelected,
onRecoveryTimeSelected: onRecoveryTimeSelected,
items: field.getSupportedTimeTypes(),
items: field.getSupportedTimeTypes(restorationHorizon),
),
),
const SizedBox(width: DateSelectionFieldStyles.icCalenderSpace),
@@ -7,6 +7,7 @@ import 'package:tmail_ui_user/features/email_recovery/presentation/model/email_r
import 'package:tmail_ui_user/features/email_recovery/presentation/styles/email_recovery_form_styles.dart';
import 'package:tmail_ui_user/features/email_recovery/presentation/widgets/check_box_has_attachment_widget.dart';
import 'package:tmail_ui_user/features/email_recovery/presentation/widgets/date_selection_field/date_selection_field_web_widget.dart';
import 'package:tmail_ui_user/features/email_recovery/presentation/widgets/limits_banner.dart';
import 'package:tmail_ui_user/features/email_recovery/presentation/widgets/list_button_widget.dart';
import 'package:tmail_ui_user/features/email_recovery/presentation/widgets/text_input_field/text_input_field_suggestion_widget.dart';
import 'package:tmail_ui_user/features/email_recovery/presentation/widgets/text_input_field/text_input_field_widget.dart';
@@ -41,6 +42,10 @@ class EmailRecoveryFormDesktopBuilder extends GetWidget<EmailRecoveryController>
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
LimitsBanner(
bannerContent: AppLocalizations.of(context).recoverDeletedMessagesBannerContent(controller.getRestorationHorizonAsString()),
),
const SizedBox(height: 16.0),
Obx(() => DateSelectionFieldWebWidget(
field: EmailRecoveryField.deletionDate,
imagePaths: controller.imagePaths,
@@ -50,6 +55,7 @@ class EmailRecoveryFormDesktopBuilder extends GetWidget<EmailRecoveryController>
recoveryTimeSelected: controller.deletionDateFieldSelected.value,
onTapCalendar: () => controller.onSelectDeletionDateRange(context),
onRecoveryTimeSelected: (type) => controller.onDeletionDateTypeSelected(context, type),
restorationHorizon: controller.getRestorationHorizonAsDateTime(),
)),
Obx(() => DateSelectionFieldWebWidget(
field: EmailRecoveryField.receptionDate,
@@ -60,6 +66,7 @@ class EmailRecoveryFormDesktopBuilder extends GetWidget<EmailRecoveryController>
recoveryTimeSelected: controller.receptionDateFieldSelected.value,
onTapCalendar: () => controller.onSelectReceptionDateRange(context),
onRecoveryTimeSelected: (type) => controller.onReceptionDateTypeSelected(context, type),
restorationHorizon: controller.getRestorationHorizonAsDateTime(),
)),
TextInputFieldWidget(
field: EmailRecoveryField.subject,
@@ -7,6 +7,7 @@ import 'package:tmail_ui_user/features/email_recovery/presentation/model/email_r
import 'package:tmail_ui_user/features/email_recovery/presentation/styles/email_recovery_form_styles.dart';
import 'package:tmail_ui_user/features/email_recovery/presentation/widgets/check_box_has_attachment_widget.dart';
import 'package:tmail_ui_user/features/email_recovery/presentation/widgets/date_selection_field/date_selection_field_mobile_widget.dart';
import 'package:tmail_ui_user/features/email_recovery/presentation/widgets/limits_banner.dart';
import 'package:tmail_ui_user/features/email_recovery/presentation/widgets/list_button_widget.dart';
import 'package:tmail_ui_user/features/email_recovery/presentation/widgets/text_input_field/text_input_field_suggestion_widget.dart';
import 'package:tmail_ui_user/features/email_recovery/presentation/widgets/text_input_field/text_input_field_widget.dart';
@@ -41,6 +42,10 @@ class EmailRecoveryFormMobileBuilder extends GetWidget<EmailRecoveryController>
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
LimitsBanner(
bannerContent: AppLocalizations.of(context).recoverDeletedMessagesBannerContent(controller.getRestorationHorizonAsString()),
),
const SizedBox(height: 16.0),
Obx(() => DateSelectionFieldMobileWidget(
field: EmailRecoveryField.deletionDate,
recoveryTimeSelected: controller.deletionDateFieldSelected.value,
@@ -7,6 +7,7 @@ import 'package:tmail_ui_user/features/email_recovery/presentation/model/email_r
import 'package:tmail_ui_user/features/email_recovery/presentation/styles/email_recovery_form_styles.dart';
import 'package:tmail_ui_user/features/email_recovery/presentation/widgets/check_box_has_attachment_widget.dart';
import 'package:tmail_ui_user/features/email_recovery/presentation/widgets/date_selection_field/date_selection_field_web_widget.dart';
import 'package:tmail_ui_user/features/email_recovery/presentation/widgets/limits_banner.dart';
import 'package:tmail_ui_user/features/email_recovery/presentation/widgets/list_button_widget.dart';
import 'package:tmail_ui_user/features/email_recovery/presentation/widgets/text_input_field/text_input_field_suggestion_widget.dart';
import 'package:tmail_ui_user/features/email_recovery/presentation/widgets/text_input_field/text_input_field_widget.dart';
@@ -41,6 +42,10 @@ class EmailRecoveryFormTabletBuilder extends GetWidget<EmailRecoveryController>
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
LimitsBanner(
bannerContent: AppLocalizations.of(context).recoverDeletedMessagesBannerContent(controller.getRestorationHorizonAsString()),
),
const SizedBox(height: 16.0),
Obx(() => DateSelectionFieldWebWidget(
field: EmailRecoveryField.deletionDate,
imagePaths: controller.imagePaths,
@@ -50,6 +55,7 @@ class EmailRecoveryFormTabletBuilder extends GetWidget<EmailRecoveryController>
recoveryTimeSelected: controller.deletionDateFieldSelected.value,
onTapCalendar: () => controller.onSelectDeletionDateRange(context),
onRecoveryTimeSelected: (type) => controller.onDeletionDateTypeSelected(context, type),
restorationHorizon: controller.getRestorationHorizonAsDateTime(),
)),
Obx(() => DateSelectionFieldWebWidget(
field: EmailRecoveryField.receptionDate,
@@ -60,6 +66,7 @@ class EmailRecoveryFormTabletBuilder extends GetWidget<EmailRecoveryController>
recoveryTimeSelected: controller.receptionDateFieldSelected.value,
onTapCalendar: () => controller.onSelectReceptionDateRange(context),
onRecoveryTimeSelected: (type) => controller.onReceptionDateTypeSelected(context, type),
restorationHorizon: controller.getRestorationHorizonAsDateTime(),
)),
TextInputFieldWidget(
field: EmailRecoveryField.subject,
@@ -0,0 +1,33 @@
import 'package:flutter/material.dart';
class LimitsBanner extends StatelessWidget {
final String bannerContent;
const LimitsBanner({
super.key,
required this.bannerContent,
});
@override
Widget build(BuildContext context) {
return Container(
width: double.infinity,
padding: const EdgeInsets.symmetric(vertical: 12.0, horizontal: 16.0),
decoration: BoxDecoration(
color: Colors.yellow[400],
borderRadius: const BorderRadius.all(Radius.circular(8.0)),
),
child: Center(
child: Text(
bannerContent,
style: const TextStyle(
fontSize: 16,
color: Colors.black,
fontWeight: FontWeight.bold,
),
textAlign: TextAlign.center,
),
),
);
}
}