TF-1118 Remove EmailForwardCreator not used

This commit is contained in:
dab246
2022-11-04 00:36:18 +07:00
committed by Dat H. Pham
parent b153de5c90
commit a251d91eb6
9 changed files with 1 additions and 596 deletions
@@ -8,9 +8,6 @@ import 'package:tmail_ui_user/features/contact/presentation/model/contact_argume
import 'package:tmail_ui_user/features/destination_picker/presentation/destination_picker_bindings.dart';
import 'package:tmail_ui_user/features/destination_picker/presentation/destination_picker_view.dart';
import 'package:tmail_ui_user/features/destination_picker/presentation/model/destination_picker_arguments.dart';
import 'package:tmail_ui_user/features/emails_forward_creator/presentation/emails_forward_creator_binding.dart';
import 'package:tmail_ui_user/features/emails_forward_creator/presentation/emails_forward_creator_view.dart';
import 'package:tmail_ui_user/features/emails_forward_creator/presentation/model/email_forward_creator_arguments.dart';
import 'package:tmail_ui_user/features/identity_creator/presentation/identity_creator_bindings.dart';
import 'package:tmail_ui_user/features/identity_creator/presentation/identity_creator_view.dart';
import 'package:tmail_ui_user/features/identity_creator/presentation/model/identity_creator_arguments.dart';
@@ -168,34 +165,4 @@ mixin ViewAsDialogActionMixin {
});
});
}
void showDialogEmailForwardCreator({
required BuildContext context,
required EmailForwardCreatorArguments arguments,
required Function(List<EmailAddress>) onAddEmailForward
}) {
EmailsForwardCreatorBindings().dependencies();
showGeneralDialog(
context: context,
barrierDismissible: true,
barrierLabel: '',
barrierColor: Colors.black.withAlpha(24),
pageBuilder: (context, animation, secondaryAnimation) {
return EmailsForwardCreatorView.fromArguments(
arguments,
onDismissCallback: () {
EmailsForwardCreatorBindings().dispose();
popBack();
},
onAddEmailForwardCallback: (listEmailAddress) {
EmailsForwardCreatorBindings().dispose();
popBack();
if (listEmailAddress.isNotEmpty) {
onAddEmailForward.call(listEmailAddress);
}
});
});
}
}
@@ -1,14 +0,0 @@
import 'package:get/get.dart';
import 'package:tmail_ui_user/features/emails_forward_creator/presentation/emails_forward_creator_controller.dart';
class EmailsForwardCreatorBindings extends Bindings {
@override
void dependencies() {
Get.lazyPut(() => EmailsForwardCreatorController());
}
void dispose() {
Get.delete<EmailsForwardCreatorController>();
}
}
@@ -1,152 +0,0 @@
import 'package:core/utils/app_logger.dart';
import 'package:core/utils/build_utils.dart';
import 'package:flutter/cupertino.dart';
import 'package:get/get.dart';
import 'package:jmap_dart_client/jmap/account_id.dart';
import 'package:jmap_dart_client/jmap/core/session/session.dart';
import 'package:jmap_dart_client/jmap/mail/email/email_address.dart';
import 'package:model/model.dart';
import 'package:tmail_ui_user/features/base/base_controller.dart';
import 'package:tmail_ui_user/features/composer/domain/model/contact_suggestion_source.dart';
import 'package:tmail_ui_user/features/composer/domain/state/get_autocomplete_state.dart';
import 'package:tmail_ui_user/features/composer/domain/usecases/get_autocomplete_interactor.dart';
import 'package:tmail_ui_user/features/composer/domain/usecases/get_autocomplete_with_device_contact_interactor.dart';
import 'package:tmail_ui_user/features/emails_forward_creator/presentation/model/email_forward_creator_arguments.dart';
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
typedef OnAddEmailForwardCallback = Function(List<EmailAddress> listEmailAddress);
class EmailsForwardCreatorController extends BaseController {
final ContactSuggestionSource _contactSuggestionSource = ContactSuggestionSource.tMailContact;
GetAutoCompleteWithDeviceContactInteractor? _getAutoCompleteWithDeviceContactInteractor;
GetAutoCompleteInteractor? _getAutoCompleteInteractor;
final listEmailForwards = RxSet<EmailAddress>();
TextEditingController? inputEmailForwardController;
EmailForwardCreatorArguments? arguments;
OnAddEmailForwardCallback? onAddEmailForwardCallback;
VoidCallback? onDismissForwardCreatorCallback;
AccountId? _accountId;
Session? _session;
@override
void onInit() {
super.onInit();
inputEmailForwardController = TextEditingController();
}
@override
void onReady() {
super.onReady();
if (arguments != null) {
_accountId = arguments!.accountId;
_session = arguments!.session;
injectAutoCompleteBindings(_session, _accountId);
}
}
@override
void onClose() {
_disposeWidget();
super.onClose();
}
@override
void onDone() {}
@override
void injectAutoCompleteBindings(Session? session, AccountId? accountId) {
try {
super.injectAutoCompleteBindings(session, accountId);
_getAutoCompleteWithDeviceContactInteractor = Get.find<GetAutoCompleteWithDeviceContactInteractor>();
_getAutoCompleteInteractor = Get.find<GetAutoCompleteInteractor>();
} catch (e) {
logError('EmailsForwardCreatorController::injectAutoCompleteBindings(): $e');
}
}
Future<List<EmailAddress>> getAutoCompleteSuggestion(String word) async {
try {
_getAutoCompleteWithDeviceContactInteractor = Get.find<GetAutoCompleteWithDeviceContactInteractor>();
_getAutoCompleteInteractor = Get.find<GetAutoCompleteInteractor>();
} catch (e) {
logError('EmailsForwardCreatorController::getAutoCompleteSuggestion(): Exception $e');
}
if (_contactSuggestionSource == ContactSuggestionSource.all) {
if (_getAutoCompleteWithDeviceContactInteractor == null || _getAutoCompleteInteractor == null) {
return <EmailAddress>[];
} else {
return await _getAutoCompleteWithDeviceContactInteractor!
.execute(AutoCompletePattern(word: word, accountId: _accountId))
.then((value) => value.fold(
(failure) => <EmailAddress>[],
(success) => success is GetAutoCompleteSuccess
? success.listEmailAddress
: <EmailAddress>[]));
}
} else {
if (_getAutoCompleteInteractor == null) {
return <EmailAddress>[];
} else {
return await _getAutoCompleteInteractor!
.execute(AutoCompletePattern(word: word, accountId: _accountId))
.then((value) => value.fold(
(failure) => <EmailAddress>[],
(success) => success is GetAutoCompleteSuccess
? success.listEmailAddress
: <EmailAddress>[]));
}
}
}
void addToListEmailForwards(EmailAddress emailAddress) {
if (emailAddress.email != null && emailAddress.email!.isNotEmpty) {
listEmailForwards.add(emailAddress);
}
}
void clearAll() {
inputEmailForwardController?.clear();
}
void _disposeWidget() {
inputEmailForwardController?.dispose();
inputEmailForwardController = null;
}
void closeView(BuildContext context) {
FocusScope.of(context).unfocus();
if (BuildUtils.isWeb) {
_disposeWidget();
onDismissForwardCreatorCallback?.call();
} else {
popBack();
}
}
void addEmailForwards(BuildContext context) {
FocusScope.of(context).unfocus();
final emailInput = inputEmailForwardController?.text.trim();
if (emailInput?.isNotEmpty == true && emailInput?.isEmail == true) {
listEmailForwards.add(EmailAddress(null, emailInput));
}
final newListEmailForwardNeedAdded = listEmailForwards.toList();
log('EmailsForwardCreatorController::addEmailForwards(): newListEmailForwardNeedAdded: $newListEmailForwardNeedAdded');
if (BuildUtils.isWeb) {
_disposeWidget();
onAddEmailForwardCallback?.call(newListEmailForwardNeedAdded);
} else {
popBack(result: newListEmailForwardNeedAdded);
}
}
}
@@ -1,198 +0,0 @@
import 'package:core/core.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:get/get.dart';
import 'package:jmap_dart_client/jmap/mail/email/email_address.dart';
import 'package:model/model.dart';
import 'package:tmail_ui_user/features/emails_forward_creator/presentation/emails_forward_creator_controller.dart';
import 'package:tmail_ui_user/features/emails_forward_creator/presentation/model/email_forward_creator_arguments.dart';
import 'package:tmail_ui_user/features/emails_forward_creator/presentation/widgets/email_forward_creator_item_widget.dart';
import 'package:tmail_ui_user/features/emails_forward_creator/presentation/widgets/emails_forward_input_with_drop_list_field_builder.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
class EmailsForwardCreatorView extends GetWidget<EmailsForwardCreatorController> {
final _imagePaths = Get.find<ImagePaths>();
final _responsiveUtils = Get.find<ResponsiveUtils>();
@override
final controller = Get.find<EmailsForwardCreatorController>();
EmailsForwardCreatorView({Key? key}) : super(key: key) {
controller.arguments = Get.arguments;
}
EmailsForwardCreatorView.fromArguments(
EmailForwardCreatorArguments arguments, {
Key? key,
OnAddEmailForwardCallback? onAddEmailForwardCallback,
VoidCallback? onDismissCallback
}) : super(key: key) {
controller.arguments = arguments;
controller.onAddEmailForwardCallback = onAddEmailForwardCallback;
controller.onDismissForwardCreatorCallback = onDismissCallback;
}
@override
Widget build(BuildContext context) {
return ResponsiveWidget(
responsiveUtils: _responsiveUtils,
mobile: Scaffold(
backgroundColor: BuildUtils.isWeb
? Colors.black.withAlpha(24)
: Colors.black38,
body: GestureDetector(
onTap: () => FocusScope.of(context).unfocus(),
child: SafeArea(
bottom: false,
left: false,
right: false,
child: Container(
decoration: const BoxDecoration(
borderRadius: BorderRadius.only(
topLeft: Radius.circular(16),
topRight: Radius.circular(16)),
color: Colors.white),
margin: const EdgeInsets.only(top: BuildUtils.isWeb ? 70 : 0),
child: ClipRRect(
borderRadius: const BorderRadius.only(
topLeft: Radius.circular(16),
topRight: Radius.circular(16)),
child: SafeArea(child: _buildEmailForwardCreatorList(context))
)
),
),
)
),
tablet: Scaffold(
backgroundColor: Colors.black.withAlpha(24),
body: GestureDetector(
onTap: () => FocusScope.of(context).unfocus(),
child: Align(alignment: Alignment.bottomCenter, child: Container(
decoration: const BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.only(
topLeft: Radius.circular(16),
topRight: Radius.circular(16),
)),
width: double.infinity,
height: _responsiveUtils.getSizeScreenHeight(context) * 0.7,
child: ClipRRect(
borderRadius: const BorderRadius.only(
topLeft: Radius.circular(16),
topRight: Radius.circular(16)),
child: _buildEmailForwardCreatorList(context)
)
)),
)
),
desktop: Scaffold(
backgroundColor: Colors.black.withAlpha(24),
body: GestureDetector(
onTap: () => FocusScope.of(context).unfocus(),
child: Center(child: Card(
color: Colors.transparent,
shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(16))),
child: Container(
decoration: const BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.all(Radius.circular(16))),
width: _responsiveUtils.getSizeScreenWidth(context) * 0.6,
height: _responsiveUtils.getSizeScreenHeight(context) * 0.7,
child: ClipRRect(
borderRadius: const BorderRadius.all(Radius.circular(16)),
child: _buildEmailForwardCreatorList(context)
)
)
)),
)
)
);
}
Widget _buildEmailForwardCreatorList(BuildContext context) {
return Stack(
children: [
Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
Container(
padding: const EdgeInsets.only(top: 16),
alignment: Alignment.center,
child: Text(
AppLocalizations.of(context).addRecipients,
style: const TextStyle(
fontWeight: FontWeight.bold,
fontSize: 20,
color: Colors.black))),
Padding(
padding: const EdgeInsets.all(16),
child: (EmailsForwardInputWithDropListFieldBuilder(
AppLocalizations.of(context).recipientsLabel,
controller.inputEmailForwardController)
..addOnSelectedSuggestionAction((newEmailAddress) {
controller.addToListEmailForwards(newEmailAddress);
controller.clearAll();
})
..addOnSummitedCallbackAction((pattern) {
if (pattern != null && pattern.trim().isNotEmpty && pattern.isEmail == true) {
controller.addToListEmailForwards(EmailAddress(null, pattern.trim()));
controller.clearAll();
}
})
..addOnSuggestionCallbackAction(controller.getAutoCompleteSuggestion)).build(),
),
Expanded(
child: Obx(() => ListView.builder(
itemCount: controller.listEmailForwards.length,
itemBuilder: (BuildContext context, int index) {
final item = controller.listEmailForwards.toList()[index];
return EmailForwardCreatorItemWidget(
emailForward: item.emailAddress,
onDelete: () {
controller.listEmailForwards.remove(item);
}
);
},
)),
),
Padding(
padding: const EdgeInsets.all(16),
child: _buildButtonAddNewEmailsForward(context),
),
]),
Positioned(top: 8, right: 8,
child: buildIconWeb(
icon: SvgPicture.asset(
_imagePaths.icCloseMailbox,
fit: BoxFit.fill),
tooltip: AppLocalizations.of(context).close,
onTap: () => controller.closeView(context)))
],
);
}
Widget _buildButtonAddNewEmailsForward(BuildContext context) {
return (ButtonBuilder(_imagePaths.icAddEmailForward)
..key(const Key('button_add_emails_forward_creator'))
..decoration(BoxDecoration(
borderRadius: BorderRadius.circular(10),
color: AppColor.colorTextButton))
..paddingIcon(const EdgeInsets.only(right: 8))
..iconColor(Colors.white)
..size(20)
..radiusSplash(10)
..padding(const EdgeInsets.symmetric(vertical: 12))
..textStyle(const TextStyle(
fontSize: 17,
color: Colors.white,
fontWeight: FontWeight.w500,
))
..onPressActionClick(() => controller.addEmailForwards(context))
..text(
AppLocalizations.of(context).addRecipients,
isVertical: false,
))
.build();
}
}
@@ -1,14 +0,0 @@
import 'package:equatable/equatable.dart';
import 'package:jmap_dart_client/jmap/account_id.dart';
import 'package:jmap_dart_client/jmap/core/session/session.dart';
class EmailForwardCreatorArguments with EquatableMixin {
final AccountId accountId;
final Session? session;
EmailForwardCreatorArguments(this.accountId, this.session);
@override
List<Object?> get props => [accountId, session];
}
@@ -1,48 +0,0 @@
import 'package:core/core.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:get/get.dart';
class EmailForwardCreatorItemWidget extends StatelessWidget {
final _imagePaths = Get.find<ImagePaths>();
final VoidCallback onDelete;
final String emailForward;
EmailForwardCreatorItemWidget({
Key? key,
required this.emailForward,
required this.onDelete,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return Container(
padding: const EdgeInsets.symmetric(vertical: 10, horizontal: 16),
color: Colors.white,
child: Row(crossAxisAlignment: CrossAxisAlignment.center, children: [
CircleAvatar(
backgroundColor: AppColor.colorTextButton,
radius: 16,
child: Text(emailForward[0].toUpperCase(),
style: const TextStyle(
color: Colors.white,
fontSize: 12,
fontWeight: FontWeight.w500))),
const SizedBox(width: 10),
Expanded(child: Text(emailForward,
overflow: CommonTextStyle.defaultTextOverFlow,
softWrap: CommonTextStyle.defaultSoftWrap,
style: const TextStyle(
fontSize: 16,
fontWeight: FontWeight.w400,
color: Colors.black))),
buildIconWeb(
icon: SvgPicture.asset(
_imagePaths.icDeleteEmailAddress,
fit: BoxFit.fill,
),
onTap: onDelete),
]),
);
}
}
@@ -1,37 +0,0 @@
import 'package:core/core.dart';
import 'package:flutter/material.dart';
class EmailsForwardInputDecorationBuilder extends InputDecorationBuilder {
@override
InputDecoration build() {
return InputDecoration(
enabledBorder: enabledBorder ?? const OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(10)),
borderSide: BorderSide(width: 1, color: AppColor.colorInputBorderCreateMailbox)),
focusedBorder: enabledBorder ?? const OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(10)),
borderSide: BorderSide(width: 1, color: AppColor.colorTextButton)),
errorBorder: errorBorder ?? const OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(10)),
borderSide: BorderSide(width: 1, color: AppColor.colorInputBorderErrorVerifyName)),
focusedErrorBorder: errorBorder ?? const OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(10)),
borderSide: BorderSide(width: 1, color: AppColor.colorInputBorderErrorVerifyName)),
prefixText: prefixText,
labelText: labelText,
floatingLabelBehavior: FloatingLabelBehavior.never,
labelStyle: labelStyle ?? const TextStyle(color: Colors.black, fontSize: 16),
hintText: hintText,
isDense: true,
hintStyle: hintStyle ?? const TextStyle(color: AppColor.colorHintInputCreateMailbox, fontSize: 16),
contentPadding: contentPadding ?? const EdgeInsets.symmetric(horizontal: 12, vertical: 12),
errorText: errorText,
errorStyle: errorTextStyle ?? const TextStyle(color: AppColor.colorInputBorderErrorVerifyName, fontSize: 13),
filled: true,
fillColor: errorText?.isNotEmpty == true
? AppColor.colorInputBackgroundErrorVerifyName
: AppColor.colorInputBackgroundCreateMailbox);
}
}
@@ -1,90 +0,0 @@
import 'package:core/core.dart';
import 'package:flutter/material.dart';
import 'package:flutter_typeahead/flutter_typeahead.dart';
import 'package:jmap_dart_client/jmap/mail/email/email_address.dart';
import 'package:tmail_ui_user/features/emails_forward_creator/presentation/widgets/emails_forward_input_decoration_builder.dart';
typedef OnSelectedSuggestionAction = Function(EmailAddress emailAddress);
typedef OnSuggestionCallbackAction = Function(String pattern);
typedef OnSummitedCallbackAction = Function(String? pattern);
class EmailsForwardInputWithDropListFieldBuilder {
final String hintText;
final TextEditingController? editingController;
OnSelectedSuggestionAction? _onSelectedSuggestionAction;
OnSuggestionCallbackAction? _onSuggestionCallbackAction;
OnSummitedCallbackAction? _onSummitedCallbackAction;
EmailsForwardInputWithDropListFieldBuilder(
this.hintText,
this.editingController,
);
void addOnSelectedSuggestionAction(OnSelectedSuggestionAction action) {
_onSelectedSuggestionAction = action;
}
void addOnSuggestionCallbackAction(OnSuggestionCallbackAction action) {
_onSuggestionCallbackAction = action;
}
void addOnSummitedCallbackAction(OnSummitedCallbackAction action) {
_onSummitedCallbackAction = action;
}
Widget build() {
return Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
const SizedBox(height: 8),
TypeAheadFormField<EmailAddress>(
textFieldConfiguration: TextFieldConfiguration(
controller: editingController,
onSubmitted: (pattern) {
if (_onSummitedCallbackAction != null) {
_onSummitedCallbackAction!(pattern);
}
},
textInputAction: TextInputAction.done,
decoration: (EmailsForwardInputDecorationBuilder()
..setContentPadding(const EdgeInsets.symmetric(
vertical: BuildUtils.isWeb ? 16 : 12,
horizontal: 12))
..setHintText(hintText))
.build()
),
debounceDuration: const Duration(milliseconds: 500),
suggestionsCallback: (pattern) async {
if (_onSuggestionCallbackAction != null) {
return _onSuggestionCallbackAction!(pattern);
} else {
return [];
}
},
itemBuilder: (BuildContext context, emailAddress) {
return Padding(
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 14),
child: Text(emailAddress.email ?? '',
style: const TextStyle(
fontSize: 14,
fontWeight: FontWeight.normal,
color: Colors.black)),
);
},
onSuggestionSelected: (emailSelected) {
if (_onSelectedSuggestionAction != null) {
_onSelectedSuggestionAction!(emailSelected);
}
},
suggestionsBoxDecoration: SuggestionsBoxDecoration(
borderRadius: BorderRadius.circular(14)
),
noItemsFoundBuilder: (context) => const SizedBox(),
hideOnEmpty: true,
hideOnError: true,
hideOnLoading: true,
)
]);
}
}
+1 -10
View File
@@ -10,8 +10,6 @@ import 'package:tmail_ui_user/features/home/presentation/home_bindings.dart';
import 'package:tmail_ui_user/features/home/presentation/home_view.dart';
import 'package:tmail_ui_user/features/identity_creator/presentation/identity_creator_bindings.dart';
import 'package:tmail_ui_user/features/identity_creator/presentation/identity_creator_view.dart' deferred as identity_creator;
import 'package:tmail_ui_user/features/emails_forward_creator/presentation/emails_forward_creator_binding.dart';
import 'package:tmail_ui_user/features/emails_forward_creator/presentation/emails_forward_creator_view.dart' deferred as emails_forward_creator;
import 'package:tmail_ui_user/features/contact/presentation/contact_view.dart' deferred as contact_view;
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/rules_filter_creator_bindings.dart';
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/rules_filter_creator_view.dart' deferred as rules_filter_creator;
@@ -99,14 +97,7 @@ class AppPages {
page: () => DeferredWidget(
rules_filter_creator.loadLibrary,
() => rules_filter_creator.RuleFilterCreatorView()),
binding: RulesFilterCreatorBindings()),
GetPage(
name: AppRoutes.emailsForwardCreator,
opaque: false,
page: () => DeferredWidget(
emails_forward_creator.loadLibrary,
() => emails_forward_creator.EmailsForwardCreatorView()),
binding: EmailsForwardCreatorBindings()),
binding: RulesFilterCreatorBindings())
]
];
}