TF-2101 Handle change date fields
(cherry picked from commit d7966659a6d7f3480297d969f3afef389a2c2c54)
This commit is contained in:
@@ -1,22 +1,16 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
class InputFieldFocusManager {
|
class InputFieldFocusManager {
|
||||||
late FocusNode deletionDateFieldFocusNode;
|
|
||||||
late FocusNode receptionDateFieldFocusNode;
|
|
||||||
late FocusNode subjectFieldFocusNode;
|
late FocusNode subjectFieldFocusNode;
|
||||||
late FocusNode recipientsFieldFocusNode;
|
late FocusNode recipientsFieldFocusNode;
|
||||||
late FocusNode senderFieldFocusNode;
|
late FocusNode senderFieldFocusNode;
|
||||||
late FocusNode attachmentCheckboxFocusNode;
|
late FocusNode attachmentCheckboxFocusNode;
|
||||||
late FocusNode createButtonFocusNode;
|
|
||||||
|
|
||||||
InputFieldFocusManager() {
|
InputFieldFocusManager() {
|
||||||
deletionDateFieldFocusNode = FocusNode();
|
|
||||||
receptionDateFieldFocusNode = FocusNode();
|
|
||||||
subjectFieldFocusNode = FocusNode();
|
subjectFieldFocusNode = FocusNode();
|
||||||
recipientsFieldFocusNode = FocusNode();
|
recipientsFieldFocusNode = FocusNode();
|
||||||
senderFieldFocusNode = FocusNode();
|
senderFieldFocusNode = FocusNode();
|
||||||
attachmentCheckboxFocusNode = FocusNode(skipTraversal: true);
|
attachmentCheckboxFocusNode = FocusNode();
|
||||||
createButtonFocusNode = FocusNode();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
factory InputFieldFocusManager.initial() {
|
factory InputFieldFocusManager.initial() {
|
||||||
@@ -24,12 +18,9 @@ class InputFieldFocusManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void dispose() {
|
void dispose() {
|
||||||
deletionDateFieldFocusNode.dispose();
|
|
||||||
receptionDateFieldFocusNode.dispose();
|
|
||||||
subjectFieldFocusNode.dispose();
|
subjectFieldFocusNode.dispose();
|
||||||
recipientsFieldFocusNode.dispose();
|
recipientsFieldFocusNode.dispose();
|
||||||
senderFieldFocusNode.dispose();
|
senderFieldFocusNode.dispose();
|
||||||
attachmentCheckboxFocusNode.dispose();
|
attachmentCheckboxFocusNode.dispose();
|
||||||
createButtonFocusNode.dispose();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,11 +1,104 @@
|
|||||||
import 'package:core/presentation/utils/keyboard_utils.dart';
|
import 'package:core/presentation/utils/keyboard_utils.dart';
|
||||||
import 'package:flutter/widgets.dart';
|
import 'package:flutter/widgets.dart';
|
||||||
|
import 'package:get/get.dart';
|
||||||
|
import 'package:jmap_dart_client/jmap/mail/email/email_address.dart';
|
||||||
import 'package:tmail_ui_user/features/base/base_controller.dart';
|
import 'package:tmail_ui_user/features/base/base_controller.dart';
|
||||||
|
import 'package:tmail_ui_user/features/base/mixin/date_range_picker_mixin.dart';
|
||||||
|
import 'package:tmail_ui_user/features/email_recovery/presentation/controller/input_field_focus_manager.dart';
|
||||||
|
import 'package:tmail_ui_user/features/email_recovery/presentation/model/email_recovery_field.dart';
|
||||||
|
import 'package:tmail_ui_user/features/email_recovery/presentation/model/email_recovery_time_type.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
||||||
|
|
||||||
class EmailRecoveryController extends BaseController {
|
class EmailRecoveryController extends BaseController with DateRangePickerMixin {
|
||||||
|
|
||||||
|
final deletionDateFieldSelected = EmailRecoveryTimeType.last1Year.obs;
|
||||||
|
final receptionDateFieldSelected = EmailRecoveryTimeType.allTime.obs;
|
||||||
|
final startDeletionDate = Rxn<DateTime>();
|
||||||
|
final endDeletionDate = Rxn<DateTime>();
|
||||||
|
final startReceptionDate = Rxn<DateTime>();
|
||||||
|
final endReceptionDate = Rxn<DateTime>();
|
||||||
|
final focusManager = InputFieldFocusManager.initial();
|
||||||
|
|
||||||
|
List<EmailAddress> listRecipients = <EmailAddress>[];
|
||||||
|
List<EmailAddress> listSenders = <EmailAddress>[];
|
||||||
|
|
||||||
EmailRecoveryController();
|
EmailRecoveryController();
|
||||||
|
|
||||||
|
void onSelectDeletionDateRange(BuildContext context) {
|
||||||
|
showMultipleViewDateRangePicker(
|
||||||
|
context,
|
||||||
|
startDeletionDate.value,
|
||||||
|
endDeletionDate.value,
|
||||||
|
onCallbackAction: (startDate, endDate) {
|
||||||
|
_updateDateRangeTime(
|
||||||
|
EmailRecoveryField.deletionDate,
|
||||||
|
EmailRecoveryTimeType.customRange,
|
||||||
|
startDate: startDate,
|
||||||
|
endDate: endDate,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
void onSelectReceptionDateRange(BuildContext context) {
|
||||||
|
showMultipleViewDateRangePicker(
|
||||||
|
context,
|
||||||
|
startReceptionDate.value,
|
||||||
|
endReceptionDate.value,
|
||||||
|
onCallbackAction: (startDate, endDate) {
|
||||||
|
_updateDateRangeTime(
|
||||||
|
EmailRecoveryField.receptionDate,
|
||||||
|
EmailRecoveryTimeType.customRange,
|
||||||
|
startDate: startDate,
|
||||||
|
endDate: endDate,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
void _updateDateRangeTime(
|
||||||
|
EmailRecoveryField field,
|
||||||
|
EmailRecoveryTimeType recoveryTimeType,
|
||||||
|
{
|
||||||
|
DateTime? startDate,
|
||||||
|
DateTime? endDate,
|
||||||
|
}
|
||||||
|
) {
|
||||||
|
if (field == EmailRecoveryField.deletionDate) {
|
||||||
|
deletionDateFieldSelected.value = recoveryTimeType;
|
||||||
|
startDeletionDate.value = startDate;
|
||||||
|
endDeletionDate.value = endDate;
|
||||||
|
} else {
|
||||||
|
receptionDateFieldSelected.value = recoveryTimeType;
|
||||||
|
startReceptionDate.value = startDate;
|
||||||
|
endReceptionDate.value = endDate;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void onDeletionDateTypeSelected(BuildContext context, EmailRecoveryTimeType type) {
|
||||||
|
if (type == EmailRecoveryTimeType.customRange) {
|
||||||
|
onSelectDeletionDateRange(context);
|
||||||
|
} else {
|
||||||
|
_updateDateRangeTime(
|
||||||
|
EmailRecoveryField.deletionDate,
|
||||||
|
type,
|
||||||
|
startDate: type.toLatestUTCDate()?.value,
|
||||||
|
endDate: DateTime.now(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void onReceptionDateTypeSelected(BuildContext context, EmailRecoveryTimeType type) {
|
||||||
|
if (type == EmailRecoveryTimeType.customRange) {
|
||||||
|
onSelectReceptionDateRange(context);
|
||||||
|
} else {
|
||||||
|
_updateDateRangeTime(
|
||||||
|
EmailRecoveryField.receptionDate,
|
||||||
|
type,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void closeView(BuildContext context) {
|
void closeView(BuildContext context) {
|
||||||
KeyboardUtils.hideKeyboard(context);
|
KeyboardUtils.hideKeyboard(context);
|
||||||
popBack();
|
popBack();
|
||||||
|
|||||||
+3
-3
@@ -12,9 +12,9 @@ class DateSelectionDropdownButtonStyles {
|
|||||||
|
|
||||||
static const Offset dropdownOffset = Offset(0.0, -8.0);
|
static const Offset dropdownOffset = Offset(0.0, -8.0);
|
||||||
|
|
||||||
static const EdgeInsetsGeometry padding = EdgeInsets.only(
|
static const EdgeInsetsGeometry padding = EdgeInsetsDirectional.only(
|
||||||
left: 12,
|
start: 12,
|
||||||
right: 10
|
end: 10
|
||||||
);
|
);
|
||||||
|
|
||||||
static const BorderRadius borderRadius = BorderRadius.all(Radius.circular(10));
|
static const BorderRadius borderRadius = BorderRadius.all(Radius.circular(10));
|
||||||
|
|||||||
+24
-26
@@ -34,32 +34,30 @@ class EmailRecoveryFormDesktopBuilder extends GetWidget<EmailRecoveryController>
|
|||||||
physics: const ClampingScrollPhysics(),
|
physics: const ClampingScrollPhysics(),
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding: EmailRecoveryFormStyles.inputAreaPadding,
|
padding: EmailRecoveryFormStyles.inputAreaPadding,
|
||||||
child: FocusTraversalGroup(
|
child: Column(
|
||||||
child: Column(
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
children: [
|
||||||
children: [
|
Obx(() => DateSelectionFieldWebWidget(
|
||||||
Obx(() => DateSelectionFieldWebWidget(
|
field: EmailRecoveryField.deletionDate,
|
||||||
field: EmailRecoveryField.deletionDate,
|
imagePaths: controller.imagePaths,
|
||||||
imagePaths: controller.imagePaths,
|
responsiveUtils: controller.responsiveUtils,
|
||||||
responsiveUtils: controller.responsiveUtils,
|
startDate: controller.startDeletionDate.value,
|
||||||
startDate: controller.startDeletionDate.value,
|
endDate: controller.endDeletionDate.value,
|
||||||
endDate: controller.endDeletionDate.value,
|
recoveryTimeSelected: controller.deletionDateFieldSelected.value,
|
||||||
recoveryTimeSelected: controller.deletionDateFieldSelected.value,
|
onTapCalendar: () => controller.onSelectDeletionDateRange(context),
|
||||||
onTapCalendar: () => controller.onSelectDeletionDateRange(context),
|
onRecoveryTimeSelected: (type) => controller.onDeletionDateTypeSelected(context, type),
|
||||||
onRecoveryTimeSelected: (type) => controller.onDeletionDateTypeSelected(context, type),
|
)),
|
||||||
)),
|
Obx(() => DateSelectionFieldWebWidget(
|
||||||
Obx(() => DateSelectionFieldWebWidget(
|
field: EmailRecoveryField.receptionDate,
|
||||||
field: EmailRecoveryField.receptionDate,
|
imagePaths: controller.imagePaths,
|
||||||
imagePaths: controller.imagePaths,
|
responsiveUtils: controller.responsiveUtils,
|
||||||
responsiveUtils: controller.responsiveUtils,
|
startDate: controller.startReceptionDate.value,
|
||||||
startDate: controller.startReceptionDate.value,
|
endDate: controller.endReceptionDate.value,
|
||||||
endDate: controller.endReceptionDate.value,
|
recoveryTimeSelected: controller.receptionDateFieldSelected.value,
|
||||||
recoveryTimeSelected: controller.receptionDateFieldSelected.value,
|
onTapCalendar: () => controller.onSelectReceptionDateRange(context),
|
||||||
onTapCalendar: () => controller.onSelectReceptionDateRange(context),
|
onRecoveryTimeSelected: (type) => controller.onReceptionDateTypeSelected(context, type),
|
||||||
onRecoveryTimeSelected: (type) => controller.onReceptionDateTypeSelected(context, type),
|
)),
|
||||||
)),
|
],
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user