TF-1877 Fix error TextEditingController was used after being disposed on some screen
(cherry picked from commit 50e4c6ec55eea21a45a5a8dd31cd239245248df3)
This commit is contained in:
@@ -60,15 +60,13 @@ class _TextFieldBuilderState extends State<TextFieldBuilder> {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
|
super.initState();
|
||||||
if (widget.fromValue != null) {
|
if (widget.fromValue != null) {
|
||||||
_controller = TextEditingController.fromValue(TextEditingValue(text: widget.fromValue!));
|
_controller = TextEditingController.fromValue(TextEditingValue(text: widget.fromValue!));
|
||||||
} else if (widget.controller != null) {
|
|
||||||
_controller = widget.controller!;
|
|
||||||
} else {
|
} else {
|
||||||
_controller = TextEditingController();
|
_controller = widget.controller ?? TextEditingController();
|
||||||
}
|
}
|
||||||
_textDirection = widget.textDirection;
|
_textDirection = widget.textDirection;
|
||||||
super.initState();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
|||||||
@@ -58,9 +58,9 @@ class _TypeAheadFormFieldBuilderState<T> extends State<TypeAheadFormFieldBuilder
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
|
super.initState();
|
||||||
_textDirection = widget.textDirection;
|
_textDirection = widget.textDirection;
|
||||||
_controller = widget.controller ?? TextEditingController();
|
_controller = widget.controller ?? TextEditingController();
|
||||||
super.initState();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
|
|
||||||
|
import 'package:core/utils/app_logger.dart';
|
||||||
import 'package:get/get_instance/src/bindings_interface.dart';
|
import 'package:get/get_instance/src/bindings_interface.dart';
|
||||||
|
|
||||||
abstract class BaseBindings extends Bindings {
|
abstract class BaseBindings extends Bindings {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void dependencies() {
|
void dependencies() {
|
||||||
|
log('BaseBindings::dependencies():');
|
||||||
bindingsDataSourceImpl();
|
bindingsDataSourceImpl();
|
||||||
bindingsDataSource();
|
bindingsDataSource();
|
||||||
bindingsRepositoryImpl();
|
bindingsRepositoryImpl();
|
||||||
|
|||||||
@@ -20,7 +20,6 @@ import 'package:model/account/authentication_type.dart';
|
|||||||
import 'package:rule_filter/rule_filter/capability_rule_filter.dart';
|
import 'package:rule_filter/rule_filter/capability_rule_filter.dart';
|
||||||
import 'package:tmail_ui_user/features/base/mixin/message_dialog_action_mixin.dart';
|
import 'package:tmail_ui_user/features/base/mixin/message_dialog_action_mixin.dart';
|
||||||
import 'package:tmail_ui_user/features/base/mixin/popup_context_menu_action_mixin.dart';
|
import 'package:tmail_ui_user/features/base/mixin/popup_context_menu_action_mixin.dart';
|
||||||
import 'package:tmail_ui_user/features/base/mixin/view_as_dialog_action_mixin.dart';
|
|
||||||
import 'package:tmail_ui_user/features/caching/caching_manager.dart';
|
import 'package:tmail_ui_user/features/caching/caching_manager.dart';
|
||||||
import 'package:tmail_ui_user/features/email/presentation/mdn_interactor_bindings.dart';
|
import 'package:tmail_ui_user/features/email/presentation/mdn_interactor_bindings.dart';
|
||||||
import 'package:tmail_ui_user/features/login/data/network/config/authorization_interceptors.dart';
|
import 'package:tmail_ui_user/features/login/data/network/config/authorization_interceptors.dart';
|
||||||
@@ -55,8 +54,7 @@ import 'package:tmail_ui_user/main/utils/app_utils.dart';
|
|||||||
|
|
||||||
abstract class BaseController extends GetxController
|
abstract class BaseController extends GetxController
|
||||||
with MessageDialogActionMixin,
|
with MessageDialogActionMixin,
|
||||||
PopupContextMenuActionMixin,
|
PopupContextMenuActionMixin {
|
||||||
ViewAsDialogActionMixin {
|
|
||||||
|
|
||||||
final CachingManager cachingManager = Get.find<CachingManager>();
|
final CachingManager cachingManager = Get.find<CachingManager>();
|
||||||
final languageCacheManager = Get.find<LanguageCacheManager>();
|
final languageCacheManager = Get.find<LanguageCacheManager>();
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ import 'package:tmail_ui_user/features/mailbox_creator/domain/usecases/verify_na
|
|||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart';
|
||||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/app_routes.dart';
|
import 'package:tmail_ui_user/main/routes/app_routes.dart';
|
||||||
|
import 'package:tmail_ui_user/main/routes/dialog_router.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
||||||
import 'package:jmap_dart_client/jmap/core/state.dart' as jmap;
|
import 'package:jmap_dart_client/jmap/core/state.dart' as jmap;
|
||||||
|
|
||||||
@@ -378,32 +379,17 @@ abstract class BaseMailboxController extends BaseController {
|
|||||||
mailboxIdSelected: mailboxSelected.id
|
mailboxIdSelected: mailboxSelected.id
|
||||||
);
|
);
|
||||||
|
|
||||||
if (PlatformInfo.isWeb) {
|
final destinationMailbox = PlatformInfo.isWeb
|
||||||
showDialogDestinationPicker(
|
? await DialogRouter.pushGeneralDialog(routeName: AppRoutes.destinationPicker, arguments: arguments)
|
||||||
context: context,
|
: await push(AppRoutes.destinationPicker, arguments: arguments);
|
||||||
arguments: arguments,
|
|
||||||
onSelectedMailbox: (destinationMailbox) {
|
|
||||||
onMovingMailboxAction(
|
|
||||||
mailboxSelected,
|
|
||||||
destinationMailbox == PresentationMailbox.unifiedMailbox
|
|
||||||
? null
|
|
||||||
: destinationMailbox
|
|
||||||
);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
final destinationMailbox = await push(
|
|
||||||
AppRoutes.destinationPicker,
|
|
||||||
arguments: arguments);
|
|
||||||
|
|
||||||
if (destinationMailbox is PresentationMailbox) {
|
if (destinationMailbox is PresentationMailbox) {
|
||||||
onMovingMailboxAction(
|
onMovingMailboxAction(
|
||||||
mailboxSelected,
|
mailboxSelected,
|
||||||
destinationMailbox == PresentationMailbox.unifiedMailbox
|
destinationMailbox == PresentationMailbox.unifiedMailbox
|
||||||
? null
|
? null
|
||||||
: destinationMailbox
|
: destinationMailbox
|
||||||
);
|
);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,168 +0,0 @@
|
|||||||
|
|
||||||
import 'package:flutter/material.dart';
|
|
||||||
import 'package:jmap_dart_client/jmap/mail/email/email_address.dart';
|
|
||||||
import 'package:model/mailbox/presentation_mailbox.dart';
|
|
||||||
import 'package:tmail_ui_user/features/contact/presentation/contact_bindings.dart';
|
|
||||||
import 'package:tmail_ui_user/features/contact/presentation/contact_view.dart';
|
|
||||||
import 'package:tmail_ui_user/features/contact/presentation/model/contact_arguments.dart';
|
|
||||||
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/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';
|
|
||||||
import 'package:tmail_ui_user/features/mailbox_creator/presentation/mailbox_creator_bindings.dart';
|
|
||||||
import 'package:tmail_ui_user/features/mailbox_creator/presentation/mailbox_creator_view.dart';
|
|
||||||
import 'package:tmail_ui_user/features/mailbox_creator/presentation/model/mailbox_creator_arguments.dart';
|
|
||||||
import 'package:tmail_ui_user/features/mailbox_creator/presentation/model/new_mailbox_arguments.dart';
|
|
||||||
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/model/rules_filter_creator_arguments.dart';
|
|
||||||
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';
|
|
||||||
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
|
||||||
|
|
||||||
mixin ViewAsDialogActionMixin {
|
|
||||||
|
|
||||||
void showDialogDestinationPicker({
|
|
||||||
required BuildContext context,
|
|
||||||
required DestinationPickerArguments arguments,
|
|
||||||
required Function(PresentationMailbox) onSelectedMailbox
|
|
||||||
}) {
|
|
||||||
DestinationPickerBindings().dependencies();
|
|
||||||
|
|
||||||
showGeneralDialog(
|
|
||||||
context: context,
|
|
||||||
barrierDismissible: true,
|
|
||||||
barrierLabel: '',
|
|
||||||
barrierColor: Colors.black.withAlpha(24),
|
|
||||||
pageBuilder: (context, animation, secondaryAnimation) {
|
|
||||||
return DestinationPickerView.fromArguments(
|
|
||||||
arguments,
|
|
||||||
onDismissCallback: () {
|
|
||||||
DestinationPickerBindings().dispose();
|
|
||||||
popBack();
|
|
||||||
},
|
|
||||||
onSelectedMailboxCallback: (destinationMailbox) {
|
|
||||||
DestinationPickerBindings().dispose();
|
|
||||||
popBack();
|
|
||||||
|
|
||||||
if (destinationMailbox is PresentationMailbox) {
|
|
||||||
onSelectedMailbox.call(destinationMailbox);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
void showDialogMailboxCreator({
|
|
||||||
required BuildContext context,
|
|
||||||
required MailboxCreatorArguments arguments,
|
|
||||||
required Function(NewMailboxArguments) onCreatedMailbox
|
|
||||||
}) {
|
|
||||||
MailboxCreatorBindings().dependencies();
|
|
||||||
|
|
||||||
showGeneralDialog(
|
|
||||||
context: context,
|
|
||||||
barrierDismissible: true,
|
|
||||||
barrierLabel: '',
|
|
||||||
barrierColor: Colors.black.withAlpha(24),
|
|
||||||
pageBuilder: (context, animation, secondaryAnimation) {
|
|
||||||
return MailboxCreatorView.fromArguments(
|
|
||||||
arguments,
|
|
||||||
onDismissCallback: () {
|
|
||||||
MailboxCreatorBindings().dispose();
|
|
||||||
popBack();
|
|
||||||
},
|
|
||||||
onCreatedMailboxCallback: (arguments) {
|
|
||||||
MailboxCreatorBindings().dispose();
|
|
||||||
popBack();
|
|
||||||
|
|
||||||
if (arguments is NewMailboxArguments) {
|
|
||||||
onCreatedMailbox.call(arguments);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
void showDialogContactView({
|
|
||||||
required BuildContext context,
|
|
||||||
required ContactArguments arguments,
|
|
||||||
required Function(EmailAddress) onSelectedContact
|
|
||||||
}) {
|
|
||||||
ContactBindings().dependencies();
|
|
||||||
|
|
||||||
showGeneralDialog(
|
|
||||||
context: context,
|
|
||||||
barrierDismissible: true,
|
|
||||||
barrierLabel: '',
|
|
||||||
barrierColor: Colors.black.withAlpha(24),
|
|
||||||
pageBuilder: (context, animation, secondaryAnimation) {
|
|
||||||
return ContactView.fromArguments(
|
|
||||||
arguments,
|
|
||||||
onDismissCallback: () {
|
|
||||||
ContactBindings().dispose();
|
|
||||||
popBack();
|
|
||||||
},
|
|
||||||
onSelectedContactCallback: (emailAddress) {
|
|
||||||
ContactBindings().dispose();
|
|
||||||
popBack();
|
|
||||||
|
|
||||||
onSelectedContact.call(emailAddress);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
void showDialogIdentityCreator({
|
|
||||||
required BuildContext context,
|
|
||||||
required IdentityCreatorArguments arguments,
|
|
||||||
required Function(dynamic) onCreatedIdentity
|
|
||||||
}) {
|
|
||||||
IdentityCreatorBindings().dependencies();
|
|
||||||
|
|
||||||
showGeneralDialog(
|
|
||||||
context: context,
|
|
||||||
barrierDismissible: true,
|
|
||||||
barrierLabel: '',
|
|
||||||
barrierColor: Colors.black.withAlpha(24),
|
|
||||||
pageBuilder: (context, animation, secondaryAnimation) {
|
|
||||||
return IdentityCreatorView.fromArguments(
|
|
||||||
arguments,
|
|
||||||
onDismissCallback: () {
|
|
||||||
IdentityCreatorBindings().dispose();
|
|
||||||
popBack();
|
|
||||||
},
|
|
||||||
onCreatedIdentityCallback: (args) {
|
|
||||||
IdentityCreatorBindings().dispose();
|
|
||||||
popBack();
|
|
||||||
|
|
||||||
onCreatedIdentity.call(args);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
void showDialogRuleFilterCreator({
|
|
||||||
required BuildContext context,
|
|
||||||
required RulesFilterCreatorArguments arguments,
|
|
||||||
required Function(dynamic) onCreatedRuleFilter
|
|
||||||
}) {
|
|
||||||
RulesFilterCreatorBindings().dependencies();
|
|
||||||
|
|
||||||
showGeneralDialog(
|
|
||||||
context: context,
|
|
||||||
barrierDismissible: true,
|
|
||||||
barrierLabel: '',
|
|
||||||
barrierColor: Colors.black.withAlpha(24),
|
|
||||||
pageBuilder: (context, animation, secondaryAnimation) {
|
|
||||||
return RuleFilterCreatorView.fromArguments(
|
|
||||||
arguments,
|
|
||||||
onDismissCallback: () {
|
|
||||||
RulesFilterCreatorBindings().dispose();
|
|
||||||
popBack();
|
|
||||||
},
|
|
||||||
onCreatedRuleFilterCallback: (args) {
|
|
||||||
RulesFilterCreatorBindings().dispose();
|
|
||||||
popBack();
|
|
||||||
|
|
||||||
onCreatedRuleFilter.call(args);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -22,8 +22,8 @@ import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
|||||||
|
|
||||||
class ContactController extends BaseController {
|
class ContactController extends BaseController {
|
||||||
|
|
||||||
TextEditingController? textInputSearchController;
|
final TextEditingController textInputSearchController = TextEditingController();
|
||||||
FocusNode? textInputSearchFocus;
|
final FocusNode textInputSearchFocus = FocusNode();
|
||||||
ContactSuggestionSource _contactSuggestionSource = ContactSuggestionSource.tMailContact;
|
ContactSuggestionSource _contactSuggestionSource = ContactSuggestionSource.tMailContact;
|
||||||
|
|
||||||
final searchQuery = SearchQuery.initial().obs;
|
final searchQuery = SearchQuery.initial().obs;
|
||||||
@@ -32,9 +32,9 @@ class ContactController extends BaseController {
|
|||||||
GetAutoCompleteWithDeviceContactInteractor? _getAutoCompleteWithDeviceContactInteractor;
|
GetAutoCompleteWithDeviceContactInteractor? _getAutoCompleteWithDeviceContactInteractor;
|
||||||
GetAutoCompleteInteractor? _getAutoCompleteInteractor;
|
GetAutoCompleteInteractor? _getAutoCompleteInteractor;
|
||||||
|
|
||||||
late Debouncer<String> _deBouncerTime;
|
final Debouncer<String> _deBouncerTime = Debouncer<String>(const Duration(milliseconds: 500), initialValue: '');
|
||||||
late AccountId _accountId;
|
AccountId? _accountId;
|
||||||
late Session _session;
|
Session? _session;
|
||||||
|
|
||||||
ContactArguments? arguments;
|
ContactArguments? arguments;
|
||||||
EmailAddress? contactSelected;
|
EmailAddress? contactSelected;
|
||||||
@@ -44,14 +44,19 @@ class ContactController extends BaseController {
|
|||||||
@override
|
@override
|
||||||
void onInit() {
|
void onInit() {
|
||||||
super.onInit();
|
super.onInit();
|
||||||
textInputSearchController = TextEditingController();
|
log('ContactController::onInit():arguments: ${Get.arguments}');
|
||||||
textInputSearchFocus = FocusNode();
|
arguments = Get.arguments;
|
||||||
_initializeDebounceTimeTextSearchChange();
|
_deBouncerTime.values.listen((value) {
|
||||||
|
searchQuery.value = SearchQuery(value);
|
||||||
|
_searchContactByNameOrEmail(searchQuery.value.value);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void onReady() async {
|
void onReady() async {
|
||||||
textInputSearchFocus?.requestFocus();
|
super.onReady();
|
||||||
|
log('ContactController::onReady():');
|
||||||
|
textInputSearchFocus.requestFocus();
|
||||||
if (arguments != null) {
|
if (arguments != null) {
|
||||||
_accountId = arguments!.accountId;
|
_accountId = arguments!.accountId;
|
||||||
_session = arguments!.session;
|
_session = arguments!.session;
|
||||||
@@ -68,25 +73,17 @@ class ContactController extends BaseController {
|
|||||||
const Duration(milliseconds: 500),
|
const Duration(milliseconds: 500),
|
||||||
() => _checkContactPermission());
|
() => _checkContactPermission());
|
||||||
}
|
}
|
||||||
super.onReady();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void onClose() {
|
void onClose() {
|
||||||
_disposeWidget();
|
log('ContactController::onClose():');
|
||||||
|
textInputSearchFocus.dispose();
|
||||||
|
textInputSearchController.dispose();
|
||||||
|
_deBouncerTime.cancel();
|
||||||
super.onClose();
|
super.onClose();
|
||||||
}
|
}
|
||||||
|
|
||||||
void _initializeDebounceTimeTextSearchChange() {
|
|
||||||
_deBouncerTime = Debouncer<String>(
|
|
||||||
const Duration(milliseconds: 500),
|
|
||||||
initialValue: '');
|
|
||||||
_deBouncerTime.values.listen((value) async {
|
|
||||||
searchQuery.value = SearchQuery(value);
|
|
||||||
_searchContactByNameOrEmail(searchQuery.value.value);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
void onTextSearchChange(String text) {
|
void onTextSearchChange(String text) {
|
||||||
_deBouncerTime.value = text;
|
_deBouncerTime.value = text;
|
||||||
}
|
}
|
||||||
@@ -96,9 +93,9 @@ class ContactController extends BaseController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void clearAllTextInputSearchForm() {
|
void clearAllTextInputSearchForm() {
|
||||||
textInputSearchController?.clear();
|
textInputSearchController.clear();
|
||||||
searchQuery.value = SearchQuery.initial();
|
searchQuery.value = SearchQuery.initial();
|
||||||
textInputSearchFocus?.requestFocus();
|
textInputSearchFocus.requestFocus();
|
||||||
}
|
}
|
||||||
|
|
||||||
void _checkContactPermission() async {
|
void _checkContactPermission() async {
|
||||||
@@ -167,32 +164,14 @@ class ContactController extends BaseController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void _disposeWidget() {
|
|
||||||
textInputSearchFocus?.dispose();
|
|
||||||
textInputSearchFocus = null;
|
|
||||||
textInputSearchController?.dispose();
|
|
||||||
textInputSearchController = null;
|
|
||||||
_deBouncerTime.cancel();
|
|
||||||
}
|
|
||||||
|
|
||||||
void selectContact(BuildContext context, EmailAddress emailAddress) {
|
void selectContact(BuildContext context, EmailAddress emailAddress) {
|
||||||
KeyboardUtils.hideKeyboard(context);
|
KeyboardUtils.hideKeyboard(context);
|
||||||
|
popBack(result: emailAddress);
|
||||||
if (PlatformInfo.isWeb) {
|
|
||||||
onSelectedContactCallback?.call(emailAddress);
|
|
||||||
} else {
|
|
||||||
popBack(result: emailAddress);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void closeContactView(BuildContext context) {
|
void closeContactView(BuildContext context) {
|
||||||
clearAllTextInputSearchForm();
|
clearAllTextInputSearchForm();
|
||||||
KeyboardUtils.hideKeyboard(context);
|
KeyboardUtils.hideKeyboard(context);
|
||||||
|
popBack();
|
||||||
if (PlatformInfo.isWeb) {
|
|
||||||
onDismissContactView?.call();
|
|
||||||
} else {
|
|
||||||
popBack();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -8,7 +8,6 @@ import 'package:get/get.dart';
|
|||||||
import 'package:jmap_dart_client/jmap/mail/email/email_address.dart';
|
import 'package:jmap_dart_client/jmap/mail/email/email_address.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/presentation/widgets/suggestion_email_address.dart';
|
import 'package:tmail_ui_user/features/composer/presentation/widgets/suggestion_email_address.dart';
|
||||||
import 'package:tmail_ui_user/features/contact/presentation/contact_controller.dart';
|
import 'package:tmail_ui_user/features/contact/presentation/contact_controller.dart';
|
||||||
import 'package:tmail_ui_user/features/contact/presentation/model/contact_arguments.dart';
|
|
||||||
import 'package:tmail_ui_user/features/contact/presentation/utils/contact_utils.dart';
|
import 'package:tmail_ui_user/features/contact/presentation/utils/contact_utils.dart';
|
||||||
import 'package:tmail_ui_user/features/contact/presentation/widgets/app_bar_contact_widget.dart';
|
import 'package:tmail_ui_user/features/contact/presentation/widgets/app_bar_contact_widget.dart';
|
||||||
import 'package:tmail_ui_user/features/contact/presentation/widgets/contact_suggestion_box_item.dart';
|
import 'package:tmail_ui_user/features/contact/presentation/widgets/contact_suggestion_box_item.dart';
|
||||||
@@ -20,23 +19,7 @@ class ContactView extends GetWidget<ContactController> {
|
|||||||
final _responsiveUtils = Get.find<ResponsiveUtils>();
|
final _responsiveUtils = Get.find<ResponsiveUtils>();
|
||||||
final _imagePaths = Get.find<ImagePaths>();
|
final _imagePaths = Get.find<ImagePaths>();
|
||||||
|
|
||||||
@override
|
ContactView({super.key});
|
||||||
final controller = Get.find<ContactController>();
|
|
||||||
|
|
||||||
ContactView({Key? key}) : super(key: key) {
|
|
||||||
controller.arguments = Get.arguments;
|
|
||||||
}
|
|
||||||
|
|
||||||
ContactView.fromArguments(
|
|
||||||
ContactArguments arguments, {
|
|
||||||
Key? key,
|
|
||||||
SelectedContactCallbackAction? onSelectedContactCallback,
|
|
||||||
VoidCallback? onDismissCallback
|
|
||||||
}) : super(key: key) {
|
|
||||||
controller.arguments = arguments;
|
|
||||||
controller.onSelectedContactCallback = onSelectedContactCallback;
|
|
||||||
controller.onDismissContactView = onDismissCallback;
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
@@ -82,7 +65,7 @@ class ContactView extends GetWidget<ContactController> {
|
|||||||
imagePaths: _imagePaths,
|
imagePaths: _imagePaths,
|
||||||
searchQuery: controller.searchQuery.value,
|
searchQuery: controller.searchQuery.value,
|
||||||
searchFocusNode: controller.textInputSearchFocus,
|
searchFocusNode: controller.textInputSearchFocus,
|
||||||
searchInputController :controller.textInputSearchController,
|
searchInputController: controller.textInputSearchController,
|
||||||
hasBackButton: false,
|
hasBackButton: false,
|
||||||
hasSearchButton: true,
|
hasSearchButton: true,
|
||||||
padding: EdgeInsets.zero,
|
padding: EdgeInsets.zero,
|
||||||
|
|||||||
@@ -104,8 +104,4 @@ class DestinationPickerBindings extends BaseBindings {
|
|||||||
Get.find<StateDataSource>(),
|
Get.find<StateDataSource>(),
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
void dispose() {
|
|
||||||
Get.delete<DestinationPickerController>();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -3,7 +3,7 @@ import 'package:core/presentation/state/failure.dart';
|
|||||||
import 'package:core/presentation/state/success.dart';
|
import 'package:core/presentation/state/success.dart';
|
||||||
import 'package:core/presentation/utils/app_toast.dart';
|
import 'package:core/presentation/utils/app_toast.dart';
|
||||||
import 'package:core/presentation/utils/keyboard_utils.dart';
|
import 'package:core/presentation/utils/keyboard_utils.dart';
|
||||||
import 'package:core/utils/platform_info.dart';
|
import 'package:core/utils/app_logger.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||||
@@ -41,8 +41,6 @@ import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
|||||||
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
||||||
import 'package:uuid/uuid.dart';
|
import 'package:uuid/uuid.dart';
|
||||||
|
|
||||||
typedef OnSelectedMailboxCallback = Function(PresentationMailbox? destinationMailbox);
|
|
||||||
|
|
||||||
class DestinationPickerController extends BaseMailboxController {
|
class DestinationPickerController extends BaseMailboxController {
|
||||||
|
|
||||||
final _uuid = Get.find<Uuid>();
|
final _uuid = Get.find<Uuid>();
|
||||||
@@ -59,19 +57,16 @@ class DestinationPickerController extends BaseMailboxController {
|
|||||||
final mailboxDestination = Rxn<PresentationMailbox>();
|
final mailboxDestination = Rxn<PresentationMailbox>();
|
||||||
final newNameMailbox = Rxn<String>();
|
final newNameMailbox = Rxn<String>();
|
||||||
|
|
||||||
FocusNode? nameInputFocusNode;
|
|
||||||
TextEditingController? nameInputController;
|
|
||||||
TextEditingController? searchInputController;
|
|
||||||
FocusNode? searchFocus;
|
|
||||||
DestinationPickerArguments? arguments;
|
DestinationPickerArguments? arguments;
|
||||||
Session? _session;
|
Session? _session;
|
||||||
AccountId? accountId;
|
AccountId? accountId;
|
||||||
MailboxId? mailboxIdSelected;
|
MailboxId? mailboxIdSelected;
|
||||||
OnSelectedMailboxCallback? onSelectedMailboxCallback;
|
|
||||||
VoidCallback? onDismissDestinationPicker;
|
|
||||||
|
|
||||||
List<String> listMailboxNameAsStringExist = <String>[];
|
List<String> listMailboxNameAsStringExist = <String>[];
|
||||||
|
final FocusNode nameInputFocusNode = FocusNode();
|
||||||
|
final FocusNode searchFocus = FocusNode();
|
||||||
|
final TextEditingController nameInputController = TextEditingController();
|
||||||
|
final TextEditingController searchInputController = TextEditingController();
|
||||||
final destinationListScrollController = ScrollController();
|
final destinationListScrollController = ScrollController();
|
||||||
|
|
||||||
DestinationPickerController(
|
DestinationPickerController(
|
||||||
@@ -91,17 +86,14 @@ class DestinationPickerController extends BaseMailboxController {
|
|||||||
@override
|
@override
|
||||||
void onInit() {
|
void onInit() {
|
||||||
super.onInit();
|
super.onInit();
|
||||||
nameInputFocusNode = FocusNode();
|
log('DestinationPickerController::onInit():arguments: ${Get.arguments}');
|
||||||
nameInputController = TextEditingController();
|
arguments = Get.arguments;
|
||||||
searchInputController = TextEditingController();
|
|
||||||
searchFocus = FocusNode();
|
|
||||||
searchFocus?.unfocus();
|
|
||||||
nameInputFocusNode?.unfocus();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void onReady() {
|
void onReady() {
|
||||||
super.onReady();
|
super.onReady();
|
||||||
|
log('DestinationPickerController::onReady():');
|
||||||
if (arguments != null) {
|
if (arguments != null) {
|
||||||
mailboxAction.value = arguments!.mailboxAction;
|
mailboxAction.value = arguments!.mailboxAction;
|
||||||
mailboxIdSelected = arguments!.mailboxIdSelected;
|
mailboxIdSelected = arguments!.mailboxIdSelected;
|
||||||
@@ -143,7 +135,11 @@ class DestinationPickerController extends BaseMailboxController {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
void onClose() {
|
void onClose() {
|
||||||
_disposeWidget();
|
log('DestinationPickerController::onClose():');
|
||||||
|
nameInputFocusNode.dispose();
|
||||||
|
nameInputController.dispose();
|
||||||
|
searchFocus.dispose();
|
||||||
|
searchInputController.dispose();
|
||||||
destinationListScrollController.dispose();
|
destinationListScrollController.dispose();
|
||||||
super.onClose();
|
super.onClose();
|
||||||
}
|
}
|
||||||
@@ -199,7 +195,7 @@ class DestinationPickerController extends BaseMailboxController {
|
|||||||
String? getErrorInputNameString(BuildContext context) {
|
String? getErrorInputNameString(BuildContext context) {
|
||||||
final nameMailbox = newNameMailbox.value;
|
final nameMailbox = newNameMailbox.value;
|
||||||
|
|
||||||
if (nameInputFocusNode?.hasFocus == false && nameMailbox == null) {
|
if (nameInputFocusNode.hasFocus == false && nameMailbox == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -224,7 +220,7 @@ class DestinationPickerController extends BaseMailboxController {
|
|||||||
bool isCreateMailboxValidated(BuildContext context) {
|
bool isCreateMailboxValidated(BuildContext context) {
|
||||||
final nameValidated = getErrorInputNameString(context);
|
final nameValidated = getErrorInputNameString(context);
|
||||||
|
|
||||||
if (nameInputFocusNode?.hasFocus == false && newNameMailbox.value == null) {
|
if (nameInputFocusNode.hasFocus == false && newNameMailbox.value == null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -265,13 +261,13 @@ class DestinationPickerController extends BaseMailboxController {
|
|||||||
listMailboxSearched.clear();
|
listMailboxSearched.clear();
|
||||||
searchState.value = searchState.value.disableSearchState();
|
searchState.value = searchState.value.disableSearchState();
|
||||||
searchQuery.value = SearchQuery.initial();
|
searchQuery.value = SearchQuery.initial();
|
||||||
searchInputController?.clear();
|
searchInputController.clear();
|
||||||
KeyboardUtils.hideKeyboard(context);
|
KeyboardUtils.hideKeyboard(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
void clearSearchText() {
|
void clearSearchText() {
|
||||||
searchQuery.value = SearchQuery.initial();
|
searchQuery.value = SearchQuery.initial();
|
||||||
searchFocus?.requestFocus();
|
searchFocus.requestFocus();
|
||||||
listMailboxSearched.clear();
|
listMailboxSearched.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -377,12 +373,7 @@ class DestinationPickerController extends BaseMailboxController {
|
|||||||
AppLocalizations.of(context).toastMessageErrorNotSelectedFolderWhenCreateNewMailbox);
|
AppLocalizations.of(context).toastMessageErrorNotSelectedFolderWhenCreateNewMailbox);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
popBack(result: mailboxDestination.value);
|
||||||
if (PlatformInfo.isWeb) {
|
|
||||||
onSelectedMailboxCallback?.call(mailboxDestination.value);
|
|
||||||
} else {
|
|
||||||
popBack(result: mailboxDestination.value);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void createNewMailboxAction(BuildContext context) {
|
void createNewMailboxAction(BuildContext context) {
|
||||||
@@ -408,29 +399,13 @@ class DestinationPickerController extends BaseMailboxController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void backToDestinationScreen(BuildContext context) {
|
void backToDestinationScreen(BuildContext context) {
|
||||||
nameInputController?.clear();
|
nameInputController.clear();
|
||||||
KeyboardUtils.hideKeyboard(context);
|
KeyboardUtils.hideKeyboard(context);
|
||||||
destinationScreenType.value = DestinationScreenType.destinationPicker;
|
destinationScreenType.value = DestinationScreenType.destinationPicker;
|
||||||
}
|
}
|
||||||
|
|
||||||
void _disposeWidget() {
|
|
||||||
nameInputFocusNode?.dispose();
|
|
||||||
nameInputFocusNode = null;
|
|
||||||
nameInputController?.dispose();
|
|
||||||
nameInputController = null;
|
|
||||||
searchFocus?.dispose();
|
|
||||||
searchFocus = null;
|
|
||||||
searchInputController?.dispose();
|
|
||||||
searchInputController = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
void closeDestinationPicker(BuildContext context) {
|
void closeDestinationPicker(BuildContext context) {
|
||||||
KeyboardUtils.hideKeyboard(context);
|
KeyboardUtils.hideKeyboard(context);
|
||||||
|
popBack();
|
||||||
if (PlatformInfo.isWeb) {
|
|
||||||
onDismissDestinationPicker?.call();
|
|
||||||
} else {
|
|
||||||
popBack();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -19,7 +19,6 @@ import 'package:model/mailbox/presentation_mailbox.dart';
|
|||||||
import 'package:pointer_interceptor/pointer_interceptor.dart';
|
import 'package:pointer_interceptor/pointer_interceptor.dart';
|
||||||
import 'package:tmail_ui_user/features/base/mixin/app_loader_mixin.dart';
|
import 'package:tmail_ui_user/features/base/mixin/app_loader_mixin.dart';
|
||||||
import 'package:tmail_ui_user/features/destination_picker/presentation/destination_picker_controller.dart';
|
import 'package:tmail_ui_user/features/destination_picker/presentation/destination_picker_controller.dart';
|
||||||
import 'package:tmail_ui_user/features/destination_picker/presentation/model/destination_picker_arguments.dart';
|
|
||||||
import 'package:tmail_ui_user/features/destination_picker/presentation/model/destination_screen_type.dart';
|
import 'package:tmail_ui_user/features/destination_picker/presentation/model/destination_screen_type.dart';
|
||||||
import 'package:tmail_ui_user/features/destination_picker/presentation/widgets/destination_picker_search_mailbox_item_builder.dart';
|
import 'package:tmail_ui_user/features/destination_picker/presentation/widgets/destination_picker_search_mailbox_item_builder.dart';
|
||||||
import 'package:tmail_ui_user/features/destination_picker/presentation/widgets/top_bar_destination_picker_builder.dart';
|
import 'package:tmail_ui_user/features/destination_picker/presentation/widgets/top_bar_destination_picker_builder.dart';
|
||||||
@@ -45,20 +44,7 @@ class DestinationPickerView extends GetWidget<DestinationPickerController>
|
|||||||
@override
|
@override
|
||||||
final controller = Get.find<DestinationPickerController>();
|
final controller = Get.find<DestinationPickerController>();
|
||||||
|
|
||||||
DestinationPickerView({Key? key}) : super(key: key) {
|
DestinationPickerView({super.key});
|
||||||
controller.arguments = Get.arguments;
|
|
||||||
}
|
|
||||||
|
|
||||||
DestinationPickerView.fromArguments(
|
|
||||||
DestinationPickerArguments arguments, {
|
|
||||||
Key? key,
|
|
||||||
OnSelectedMailboxCallback? onSelectedMailboxCallback,
|
|
||||||
VoidCallback? onDismissCallback
|
|
||||||
}) : super(key: key) {
|
|
||||||
controller.arguments = arguments;
|
|
||||||
controller.onSelectedMailboxCallback = onSelectedMailboxCallback;
|
|
||||||
controller.onDismissDestinationPicker = onDismissCallback;
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
|||||||
@@ -68,6 +68,7 @@ import 'package:tmail_ui_user/features/thread/domain/constants/thread_constants.
|
|||||||
import 'package:tmail_ui_user/features/thread/presentation/model/delete_action_type.dart';
|
import 'package:tmail_ui_user/features/thread/presentation/model/delete_action_type.dart';
|
||||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/app_routes.dart';
|
import 'package:tmail_ui_user/main/routes/app_routes.dart';
|
||||||
|
import 'package:tmail_ui_user/main/routes/dialog_router.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/navigation_router.dart';
|
import 'package:tmail_ui_user/main/routes/navigation_router.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/route_utils.dart';
|
import 'package:tmail_ui_user/main/routes/route_utils.dart';
|
||||||
@@ -678,39 +679,23 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
|
|||||||
session,
|
session,
|
||||||
mailboxIdSelected: currentMailbox.mailboxId
|
mailboxIdSelected: currentMailbox.mailboxId
|
||||||
);
|
);
|
||||||
if (PlatformInfo.isWeb) {
|
|
||||||
showDialogDestinationPicker(
|
|
||||||
context: context,
|
|
||||||
arguments: arguments,
|
|
||||||
onSelectedMailbox: (destinationMailbox) {
|
|
||||||
if (mailboxDashBoardController.sessionCurrent != null) {
|
|
||||||
_dispatchMoveToAction(
|
|
||||||
context,
|
|
||||||
accountId,
|
|
||||||
mailboxDashBoardController.sessionCurrent!,
|
|
||||||
email,
|
|
||||||
currentMailbox,
|
|
||||||
destinationMailbox);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
final destinationMailbox = await push(
|
|
||||||
AppRoutes.destinationPicker,
|
|
||||||
arguments: arguments);
|
|
||||||
|
|
||||||
if (destinationMailbox != null &&
|
final destinationMailbox = PlatformInfo.isWeb
|
||||||
|
? await DialogRouter.pushGeneralDialog(routeName: AppRoutes.destinationPicker, arguments: arguments)
|
||||||
|
: await push(AppRoutes.destinationPicker, arguments: arguments);
|
||||||
|
|
||||||
|
if (destinationMailbox != null &&
|
||||||
destinationMailbox is PresentationMailbox &&
|
destinationMailbox is PresentationMailbox &&
|
||||||
mailboxDashBoardController.sessionCurrent != null &&
|
mailboxDashBoardController.sessionCurrent != null &&
|
||||||
context.mounted
|
context.mounted
|
||||||
) {
|
) {
|
||||||
_dispatchMoveToAction(
|
_dispatchMoveToAction(
|
||||||
context,
|
context,
|
||||||
accountId,
|
accountId,
|
||||||
mailboxDashBoardController.sessionCurrent!,
|
mailboxDashBoardController.sessionCurrent!,
|
||||||
email,
|
email,
|
||||||
currentMailbox,
|
currentMailbox,
|
||||||
destinationMailbox);
|
destinationMailbox);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1182,25 +1167,12 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
|
|||||||
session,
|
session,
|
||||||
emailAddress: emailAddress);
|
emailAddress: emailAddress);
|
||||||
|
|
||||||
if (PlatformInfo.isWeb) {
|
final newRuleFilterRequest = PlatformInfo.isWeb
|
||||||
showDialogRuleFilterCreator(
|
? await DialogRouter.pushGeneralDialog(routeName: AppRoutes.rulesFilterCreator, arguments: arguments)
|
||||||
context: context,
|
: await push(AppRoutes.rulesFilterCreator, arguments: arguments);
|
||||||
arguments: arguments,
|
|
||||||
onCreatedRuleFilter: (arguments) {
|
|
||||||
if (arguments is CreateNewEmailRuleFilterRequest) {
|
|
||||||
_createNewRuleFilterAction(accountId, arguments);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
final newRuleFilterRequest = await push(
|
|
||||||
AppRoutes.rulesFilterCreator,
|
|
||||||
arguments: arguments
|
|
||||||
);
|
|
||||||
|
|
||||||
if (newRuleFilterRequest is CreateNewEmailRuleFilterRequest) {
|
if (newRuleFilterRequest is CreateNewEmailRuleFilterRequest) {
|
||||||
_createNewRuleFilterAction(accountId, newRuleFilterRequest);
|
_createNewRuleFilterAction(accountId, newRuleFilterRequest);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,8 +18,4 @@ class IdentityCreatorBindings extends Bindings {
|
|||||||
Get.find<IdentityUtils>()
|
Get.find<IdentityUtils>()
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
void dispose() {
|
|
||||||
Get.delete<IdentityCreatorController>();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -5,10 +5,7 @@ import 'package:core/presentation/state/success.dart';
|
|||||||
import 'package:core/utils/app_logger.dart';
|
import 'package:core/utils/app_logger.dart';
|
||||||
import 'package:core/utils/platform_info.dart';
|
import 'package:core/utils/platform_info.dart';
|
||||||
import 'package:flutter/cupertino.dart';
|
import 'package:flutter/cupertino.dart';
|
||||||
import 'package:get/get_core/get_core.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:get/get_instance/get_instance.dart';
|
|
||||||
import 'package:get/get_rx/get_rx.dart';
|
|
||||||
import 'package:html_editor_enhanced/html_editor.dart';
|
|
||||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||||
import 'package:jmap_dart_client/jmap/core/capability/capability_identifier.dart';
|
import 'package:jmap_dart_client/jmap/core/capability/capability_identifier.dart';
|
||||||
import 'package:jmap_dart_client/jmap/core/id.dart';
|
import 'package:jmap_dart_client/jmap/core/id.dart';
|
||||||
@@ -40,8 +37,6 @@ import 'package:tmail_ui_user/main/error/capability_validator.dart';
|
|||||||
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
||||||
import 'package:uuid/uuid.dart';
|
import 'package:uuid/uuid.dart';
|
||||||
|
|
||||||
typedef OnCreatedIdentityCallback = Function(dynamic arguments);
|
|
||||||
|
|
||||||
class IdentityCreatorController extends BaseController {
|
class IdentityCreatorController extends BaseController {
|
||||||
|
|
||||||
final VerifyNameInteractor _verifyNameInteractor;
|
final VerifyNameInteractor _verifyNameInteractor;
|
||||||
@@ -62,13 +57,13 @@ class IdentityCreatorController extends BaseController {
|
|||||||
final isDefaultIdentity = RxBool(false);
|
final isDefaultIdentity = RxBool(false);
|
||||||
final isDefaultIdentitySupported = RxBool(false);
|
final isDefaultIdentitySupported = RxBool(false);
|
||||||
|
|
||||||
late RichTextController keyboardRichTextController;
|
final RichTextController keyboardRichTextController = RichTextController();
|
||||||
late RichTextWebController richTextWebController;
|
final RichTextWebController richTextWebController = RichTextWebController();
|
||||||
late HtmlEditorController signatureHtmlEditorController;
|
final TextEditingController inputNameIdentityController = TextEditingController();
|
||||||
TextEditingController? inputNameIdentityController;
|
final TextEditingController inputBccIdentityController = TextEditingController();
|
||||||
TextEditingController? inputBccIdentityController;
|
final FocusNode inputNameIdentityFocusNode = FocusNode();
|
||||||
FocusNode? inputNameIdentityFocusNode;
|
final FocusNode inputBccIdentityFocusNode = FocusNode();
|
||||||
FocusNode? inputBccIdentityFocusNode;
|
final ScrollController scrollController = ScrollController();
|
||||||
|
|
||||||
String? _nameIdentity;
|
String? _nameIdentity;
|
||||||
String? _contentHtmlEditor;
|
String? _contentHtmlEditor;
|
||||||
@@ -77,9 +72,6 @@ class IdentityCreatorController extends BaseController {
|
|||||||
UserProfile? userProfile;
|
UserProfile? userProfile;
|
||||||
Identity? identity;
|
Identity? identity;
|
||||||
IdentityCreatorArguments? arguments;
|
IdentityCreatorArguments? arguments;
|
||||||
OnCreatedIdentityCallback? onCreatedIdentityCallback;
|
|
||||||
VoidCallback? onDismissIdentityCreator;
|
|
||||||
ScrollController? scrollController;
|
|
||||||
|
|
||||||
final GlobalKey htmlKey = GlobalKey();
|
final GlobalKey htmlKey = GlobalKey();
|
||||||
final htmlEditorMinHeight = 160;
|
final htmlEditorMinHeight = 160;
|
||||||
@@ -107,21 +99,15 @@ class IdentityCreatorController extends BaseController {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
void onInit() {
|
void onInit() {
|
||||||
log('IdentityCreatorController::onInit():');
|
|
||||||
super.onInit();
|
super.onInit();
|
||||||
keyboardRichTextController = RichTextController();
|
log('IdentityCreatorController::onInit():arguments: ${Get.arguments}');
|
||||||
richTextWebController = RichTextWebController();
|
arguments = Get.arguments;
|
||||||
signatureHtmlEditorController = HtmlEditorController(processNewLineAsBr: true);
|
|
||||||
inputNameIdentityController = TextEditingController();
|
|
||||||
inputBccIdentityController = TextEditingController();
|
|
||||||
inputNameIdentityFocusNode = FocusNode();
|
|
||||||
inputBccIdentityFocusNode = FocusNode();
|
|
||||||
scrollController = ScrollController();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void onReady() {
|
void onReady() {
|
||||||
super.onReady();
|
super.onReady();
|
||||||
|
log('IdentityCreatorController::onReady():');
|
||||||
if (arguments != null) {
|
if (arguments != null) {
|
||||||
accountId = arguments!.accountId;
|
accountId = arguments!.accountId;
|
||||||
session = arguments!.session;
|
session = arguments!.session;
|
||||||
@@ -136,7 +122,14 @@ class IdentityCreatorController extends BaseController {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
void onClose() {
|
void onClose() {
|
||||||
_disposeWidget();
|
log('IdentityCreatorController::onClose():');
|
||||||
|
keyboardRichTextController.dispose();
|
||||||
|
inputNameIdentityFocusNode.dispose();
|
||||||
|
inputBccIdentityFocusNode.dispose();
|
||||||
|
inputNameIdentityController.dispose();
|
||||||
|
inputBccIdentityController.dispose();
|
||||||
|
scrollController.dispose();
|
||||||
|
richTextWebController.onClose();
|
||||||
super.onClose();
|
super.onClose();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -164,12 +157,12 @@ class IdentityCreatorController extends BaseController {
|
|||||||
|
|
||||||
void _setUpValueFromIdentity() {
|
void _setUpValueFromIdentity() {
|
||||||
_nameIdentity = identity?.name ?? '';
|
_nameIdentity = identity?.name ?? '';
|
||||||
inputNameIdentityController?.text = identity?.name ?? '';
|
inputNameIdentityController.text = identity?.name ?? '';
|
||||||
|
|
||||||
if (identity?.signatureAsString.isNotEmpty == true) {
|
if (identity?.signatureAsString.isNotEmpty == true) {
|
||||||
updateContentHtmlEditor(arguments?.identity?.signatureAsString ?? '');
|
updateContentHtmlEditor(arguments?.identity?.signatureAsString ?? '');
|
||||||
if (PlatformInfo.isWeb) {
|
if (PlatformInfo.isWeb) {
|
||||||
signatureHtmlEditorController.setText(arguments?.identity?.signatureAsString ?? '');
|
richTextWebController.editorController.setText(arguments?.identity?.signatureAsString ?? '');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -236,7 +229,7 @@ class IdentityCreatorController extends BaseController {
|
|||||||
|
|
||||||
if (identity?.bcc?.isNotEmpty == true) {
|
if (identity?.bcc?.isNotEmpty == true) {
|
||||||
bccOfIdentity.value = identity?.bcc!.first;
|
bccOfIdentity.value = identity?.bcc!.first;
|
||||||
inputBccIdentityController?.text = identity?.bcc!.first.emailAddress ?? '';
|
inputBccIdentityController.text = identity?.bcc!.first.emailAddress ?? '';
|
||||||
} else {
|
} else {
|
||||||
bccOfIdentity.value = null;
|
bccOfIdentity.value = null;
|
||||||
}
|
}
|
||||||
@@ -297,7 +290,7 @@ class IdentityCreatorController extends BaseController {
|
|||||||
|
|
||||||
Future<String?> _getSignatureHtmlText() async {
|
Future<String?> _getSignatureHtmlText() async {
|
||||||
if (PlatformInfo.isWeb) {
|
if (PlatformInfo.isWeb) {
|
||||||
return signatureHtmlEditorController.getText();
|
return richTextWebController.editorController.getText();
|
||||||
} else {
|
} else {
|
||||||
return keyboardRichTextController.htmlEditorApi?.getText();
|
return keyboardRichTextController.htmlEditorApi?.getText();
|
||||||
}
|
}
|
||||||
@@ -346,25 +339,14 @@ class IdentityCreatorController extends BaseController {
|
|||||||
final identityRequest = CreateNewIdentityRequest(
|
final identityRequest = CreateNewIdentityRequest(
|
||||||
generateCreateId,
|
generateCreateId,
|
||||||
newIdentity,
|
newIdentity,
|
||||||
isDefaultIdentity: isDefaultIdentity.value
|
isDefaultIdentity: isDefaultIdentity.value);
|
||||||
);
|
popBack(result: identityRequest);
|
||||||
|
|
||||||
if (PlatformInfo.isWeb) {
|
|
||||||
onCreatedIdentityCallback?.call(identityRequest);
|
|
||||||
} else {
|
|
||||||
popBack(result: identityRequest);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
final identityRequest = EditIdentityRequest(
|
final identityRequest = EditIdentityRequest(
|
||||||
identityId: identity!.id!,
|
identityId: identity!.id!,
|
||||||
identityRequest: newIdentity.toIdentityRequest(),
|
identityRequest: newIdentity.toIdentityRequest(),
|
||||||
isDefaultIdentity: isDefaultIdentity.value);
|
isDefaultIdentity: isDefaultIdentity.value);
|
||||||
|
popBack(result: identityRequest);
|
||||||
if (PlatformInfo.isWeb) {
|
|
||||||
onCreatedIdentityCallback?.call(identityRequest);
|
|
||||||
} else {
|
|
||||||
popBack(result: identityRequest);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -389,7 +371,7 @@ class IdentityCreatorController extends BaseController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
String? _getErrorInputAddressString(BuildContext context, {String? value}) {
|
String? _getErrorInputAddressString(BuildContext context, {String? value}) {
|
||||||
final emailAddress = value ?? inputBccIdentityController?.text ?? '';
|
final emailAddress = value ?? inputBccIdentityController.text;
|
||||||
if (emailAddress.trim().isEmpty) {
|
if (emailAddress.trim().isEmpty) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -434,24 +416,8 @@ class IdentityCreatorController extends BaseController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void closeView(BuildContext context) {
|
void closeView(BuildContext context) {
|
||||||
if (PlatformInfo.isWeb) {
|
clearFocusEditor(context);
|
||||||
onDismissIdentityCreator?.call();
|
popBack();
|
||||||
} else {
|
|
||||||
popBack();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void _disposeWidget() {
|
|
||||||
keyboardRichTextController.dispose();
|
|
||||||
inputNameIdentityFocusNode?.dispose();
|
|
||||||
inputNameIdentityFocusNode = null;
|
|
||||||
inputBccIdentityFocusNode?.dispose();
|
|
||||||
inputBccIdentityFocusNode = null;
|
|
||||||
inputNameIdentityController?.dispose();
|
|
||||||
inputNameIdentityController = null;
|
|
||||||
inputBccIdentityController?.dispose();
|
|
||||||
inputBccIdentityController = null;
|
|
||||||
scrollController?.dispose();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void initRichTextForMobile(BuildContext context, HtmlEditorApi editorApi) {
|
void initRichTextForMobile(BuildContext context, HtmlEditorApi editorApi) {
|
||||||
@@ -464,29 +430,27 @@ class IdentityCreatorController extends BaseController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void _onFocusHTMLEditorOnMobile() async {
|
void _onFocusHTMLEditorOnMobile() async {
|
||||||
inputBccIdentityFocusNode?.unfocus();
|
inputBccIdentityFocusNode.unfocus();
|
||||||
inputNameIdentityFocusNode?.unfocus();
|
inputNameIdentityFocusNode.unfocus();
|
||||||
if (scrollController != null) {
|
if (htmlKey.currentContext != null) {
|
||||||
if (htmlKey.currentContext != null) {
|
await Scrollable.ensureVisible(htmlKey.currentContext!);
|
||||||
await Scrollable.ensureVisible(htmlKey.currentContext!);
|
|
||||||
}
|
|
||||||
await Future.delayed(const Duration(milliseconds: 500), () {
|
|
||||||
final offset = scrollController!.position.pixels +
|
|
||||||
defaultKeyboardToolbarHeight +
|
|
||||||
htmlEditorMinHeight;
|
|
||||||
scrollController!.animateTo(
|
|
||||||
offset,
|
|
||||||
duration: const Duration(milliseconds: 1),
|
|
||||||
curve: Curves.linear,
|
|
||||||
);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
await Future.delayed(const Duration(milliseconds: 500), () {
|
||||||
|
final offset = scrollController.position.pixels +
|
||||||
|
defaultKeyboardToolbarHeight +
|
||||||
|
htmlEditorMinHeight;
|
||||||
|
scrollController.animateTo(
|
||||||
|
offset,
|
||||||
|
duration: const Duration(milliseconds: 1),
|
||||||
|
curve: Curves.linear,
|
||||||
|
);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void _onEnterKeyDownOnMobile() {
|
void _onEnterKeyDownOnMobile() {
|
||||||
if (scrollController != null && scrollController!.position.pixels < scrollController!.position.maxScrollExtent) {
|
if (scrollController.position.pixels < scrollController.position.maxScrollExtent) {
|
||||||
scrollController!.animateTo(
|
scrollController.animateTo(
|
||||||
scrollController!.position.pixels + 20,
|
scrollController.position.pixels + 20,
|
||||||
duration: const Duration(milliseconds: 1),
|
duration: const Duration(milliseconds: 1),
|
||||||
curve: Curves.linear,
|
curve: Curves.linear,
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -20,7 +20,6 @@ import 'package:rich_text_composer/rich_text_composer.dart';
|
|||||||
import 'package:rich_text_composer/views/widgets/rich_text_keyboard_toolbar.dart';
|
import 'package:rich_text_composer/views/widgets/rich_text_keyboard_toolbar.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/presentation/widgets/toolbar_rich_text_builder.dart';
|
import 'package:tmail_ui_user/features/composer/presentation/widgets/toolbar_rich_text_builder.dart';
|
||||||
import 'package:tmail_ui_user/features/identity_creator/presentation/identity_creator_controller.dart';
|
import 'package:tmail_ui_user/features/identity_creator/presentation/identity_creator_controller.dart';
|
||||||
import 'package:tmail_ui_user/features/identity_creator/presentation/model/identity_creator_arguments.dart';
|
|
||||||
import 'package:tmail_ui_user/features/identity_creator/presentation/widgets/identity_drop_list_field_builder.dart';
|
import 'package:tmail_ui_user/features/identity_creator/presentation/widgets/identity_drop_list_field_builder.dart';
|
||||||
import 'package:tmail_ui_user/features/identity_creator/presentation/widgets/identity_field_no_editable_builder.dart';
|
import 'package:tmail_ui_user/features/identity_creator/presentation/widgets/identity_field_no_editable_builder.dart';
|
||||||
import 'package:tmail_ui_user/features/identity_creator/presentation/widgets/identity_input_field_builder.dart';
|
import 'package:tmail_ui_user/features/identity_creator/presentation/widgets/identity_input_field_builder.dart';
|
||||||
@@ -39,20 +38,7 @@ class IdentityCreatorView extends GetWidget<IdentityCreatorController> {
|
|||||||
@override
|
@override
|
||||||
final controller = Get.find<IdentityCreatorController>();
|
final controller = Get.find<IdentityCreatorController>();
|
||||||
|
|
||||||
IdentityCreatorView({Key? key}) : super(key: key) {
|
IdentityCreatorView({super.key});
|
||||||
controller.arguments = Get.arguments;
|
|
||||||
}
|
|
||||||
|
|
||||||
IdentityCreatorView.fromArguments(
|
|
||||||
IdentityCreatorArguments arguments, {
|
|
||||||
Key? key,
|
|
||||||
OnCreatedIdentityCallback? onCreatedIdentityCallback,
|
|
||||||
VoidCallback? onDismissCallback
|
|
||||||
}) : super(key: key) {
|
|
||||||
controller.arguments = arguments;
|
|
||||||
controller.onCreatedIdentityCallback = onCreatedIdentityCallback;
|
|
||||||
controller.onDismissIdentityCreator = onDismissCallback;
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
@@ -133,27 +119,6 @@ class IdentityCreatorView extends GetWidget<IdentityCreatorController> {
|
|||||||
))
|
))
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
tabletLarge: Scaffold(
|
|
||||||
backgroundColor: Colors.black38,
|
|
||||||
body: GestureDetector(
|
|
||||||
onTap: () => controller.clearFocusEditor(context),
|
|
||||||
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.85,
|
|
||||||
height: _responsiveUtils.getSizeScreenHeight(context) * 0.6,
|
|
||||||
child: ClipRRect(
|
|
||||||
borderRadius: const BorderRadius.all(Radius.circular(16)),
|
|
||||||
child: _buildBodyMobile(context)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
))
|
|
||||||
)
|
|
||||||
),
|
|
||||||
landscapeTablet: Scaffold(
|
landscapeTablet: Scaffold(
|
||||||
backgroundColor: Colors.black38,
|
backgroundColor: Colors.black38,
|
||||||
body: GestureDetector(
|
body: GestureDetector(
|
||||||
@@ -245,7 +210,7 @@ class IdentityCreatorView extends GetWidget<IdentityCreatorController> {
|
|||||||
controller.inputBccIdentityController,
|
controller.inputBccIdentityController,
|
||||||
focusNode: PlatformInfo.isWeb ? null : controller.inputBccIdentityFocusNode,
|
focusNode: PlatformInfo.isWeb ? null : controller.inputBccIdentityFocusNode,
|
||||||
onSelectedSuggestionAction: (newEmailAddress) {
|
onSelectedSuggestionAction: (newEmailAddress) {
|
||||||
controller.inputBccIdentityController?.text = newEmailAddress?.email ?? '';
|
controller.inputBccIdentityController.text = newEmailAddress?.email ?? '';
|
||||||
controller.updateBccOfIdentity(newEmailAddress);
|
controller.updateBccOfIdentity(newEmailAddress);
|
||||||
},
|
},
|
||||||
onChangeInputSuggestionAction: (pattern) {
|
onChangeInputSuggestionAction: (pattern) {
|
||||||
@@ -383,8 +348,8 @@ class IdentityCreatorView extends GetWidget<IdentityCreatorController> {
|
|||||||
controller.updateContentHtmlEditor(changed);
|
controller.updateContentHtmlEditor(changed);
|
||||||
}, onInit: () {
|
}, onInit: () {
|
||||||
log('IdentityCreatorView::_buildHtmlEditorWeb(): onInit');
|
log('IdentityCreatorView::_buildHtmlEditorWeb(): onInit');
|
||||||
|
controller.richTextWebController.editorController.setFullScreen();
|
||||||
controller.updateContentHtmlEditor(initContent);
|
controller.updateContentHtmlEditor(initContent);
|
||||||
controller.richTextWebController.setEnableCodeView();
|
|
||||||
}, onFocus: () {
|
}, onFocus: () {
|
||||||
log('IdentityCreatorView::_buildHtmlEditorWeb(): onFocus');
|
log('IdentityCreatorView::_buildHtmlEditorWeb(): onFocus');
|
||||||
FocusManager.instance.primaryFocus?.unfocus();
|
FocusManager.instance.primaryFocus?.unfocus();
|
||||||
|
|||||||
@@ -72,6 +72,7 @@ import 'package:tmail_ui_user/features/thread/domain/state/mark_as_multiple_emai
|
|||||||
import 'package:tmail_ui_user/features/thread/domain/state/move_multiple_email_to_mailbox_state.dart';
|
import 'package:tmail_ui_user/features/thread/domain/state/move_multiple_email_to_mailbox_state.dart';
|
||||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/app_routes.dart';
|
import 'package:tmail_ui_user/main/routes/app_routes.dart';
|
||||||
|
import 'package:tmail_ui_user/main/routes/dialog_router.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/navigation_router.dart';
|
import 'package:tmail_ui_user/main/routes/navigation_router.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/route_utils.dart';
|
import 'package:tmail_ui_user/main/routes/route_utils.dart';
|
||||||
@@ -477,29 +478,16 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
|
|||||||
teamMailboxesTree.value,
|
teamMailboxesTree.value,
|
||||||
mailboxDashBoardController.sessionCurrent!);
|
mailboxDashBoardController.sessionCurrent!);
|
||||||
|
|
||||||
if (PlatformInfo.isWeb) {
|
final result = PlatformInfo.isWeb
|
||||||
showDialogMailboxCreator(
|
? await DialogRouter.pushGeneralDialog(routeName: AppRoutes.mailboxCreator, arguments: arguments)
|
||||||
context: context,
|
: await push(AppRoutes.mailboxCreator, arguments: arguments);
|
||||||
arguments: arguments,
|
|
||||||
onCreatedMailbox: (newMailboxArguments) {
|
|
||||||
final generateCreateId = Id(_uuid.v1());
|
|
||||||
_createNewMailboxAction(session, accountId, CreateNewMailboxRequest(
|
|
||||||
generateCreateId,
|
|
||||||
newMailboxArguments.newName,
|
|
||||||
parentId: newMailboxArguments.mailboxLocation?.id));
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
final newMailboxArguments = await push(
|
|
||||||
AppRoutes.mailboxCreator,
|
|
||||||
arguments: arguments);
|
|
||||||
|
|
||||||
if (newMailboxArguments != null && newMailboxArguments is NewMailboxArguments) {
|
if (result != null && result is NewMailboxArguments) {
|
||||||
final generateCreateId = Id(_uuid.v1());
|
final generateCreateId = Id(_uuid.v1());
|
||||||
_createNewMailboxAction(session, accountId, CreateNewMailboxRequest(
|
_createNewMailboxAction(session, accountId, CreateNewMailboxRequest(
|
||||||
generateCreateId,
|
generateCreateId,
|
||||||
newMailboxArguments.newName,
|
result.newName,
|
||||||
parentId: newMailboxArguments.mailboxLocation?.id));
|
parentId: result.mailboxLocation?.id));
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,33 +1,12 @@
|
|||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:tmail_ui_user/features/base/base_bindings.dart';
|
|
||||||
import 'package:tmail_ui_user/features/mailbox_creator/domain/usecases/verify_name_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox_creator/domain/usecases/verify_name_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_creator/presentation/mailbox_creator_controller.dart';
|
import 'package:tmail_ui_user/features/mailbox_creator/presentation/mailbox_creator_controller.dart';
|
||||||
|
|
||||||
class MailboxCreatorBindings extends BaseBindings {
|
class MailboxCreatorBindings extends Bindings {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void bindingsController() {
|
void dependencies() {
|
||||||
|
Get.lazyPut(() => VerifyNameInteractor());
|
||||||
Get.lazyPut(() => MailboxCreatorController(Get.find<VerifyNameInteractor>()));
|
Get.lazyPut(() => MailboxCreatorController(Get.find<VerifyNameInteractor>()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
|
||||||
void bindingsDataSource() {}
|
|
||||||
|
|
||||||
@override
|
|
||||||
void bindingsDataSourceImpl() {}
|
|
||||||
|
|
||||||
@override
|
|
||||||
void bindingsInteractor() {
|
|
||||||
Get.lazyPut(() => VerifyNameInteractor());
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
void bindingsRepository() {}
|
|
||||||
|
|
||||||
@override
|
|
||||||
void bindingsRepositoryImpl() {}
|
|
||||||
|
|
||||||
void dispose() {
|
|
||||||
Get.delete<MailboxCreatorController>();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -19,10 +19,9 @@ import 'package:tmail_ui_user/features/mailbox_creator/presentation/extensions/v
|
|||||||
import 'package:tmail_ui_user/features/mailbox_creator/presentation/model/mailbox_creator_arguments.dart';
|
import 'package:tmail_ui_user/features/mailbox_creator/presentation/model/mailbox_creator_arguments.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_creator/presentation/model/new_mailbox_arguments.dart';
|
import 'package:tmail_ui_user/features/mailbox_creator/presentation/model/new_mailbox_arguments.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/app_routes.dart';
|
import 'package:tmail_ui_user/main/routes/app_routes.dart';
|
||||||
|
import 'package:tmail_ui_user/main/routes/dialog_router.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
||||||
|
|
||||||
typedef OnCreatedMailboxCallback = Function(NewMailboxArguments? arguments);
|
|
||||||
|
|
||||||
class MailboxCreatorController extends BaseController {
|
class MailboxCreatorController extends BaseController {
|
||||||
|
|
||||||
final VerifyNameInteractor _verifyNameInteractor;
|
final VerifyNameInteractor _verifyNameInteractor;
|
||||||
@@ -31,8 +30,8 @@ class MailboxCreatorController extends BaseController {
|
|||||||
final newNameMailbox = Rxn<String>();
|
final newNameMailbox = Rxn<String>();
|
||||||
bool _createdMailbox = false;
|
bool _createdMailbox = false;
|
||||||
|
|
||||||
FocusNode? nameInputFocusNode;
|
final FocusNode nameInputFocusNode = FocusNode();
|
||||||
TextEditingController? nameInputController;
|
final TextEditingController nameInputController = TextEditingController();
|
||||||
|
|
||||||
MailboxCreatorArguments? arguments;
|
MailboxCreatorArguments? arguments;
|
||||||
AccountId? accountId;
|
AccountId? accountId;
|
||||||
@@ -40,8 +39,6 @@ class MailboxCreatorController extends BaseController {
|
|||||||
MailboxTree? defaultMailboxTree;
|
MailboxTree? defaultMailboxTree;
|
||||||
MailboxTree? personalMailboxTree;
|
MailboxTree? personalMailboxTree;
|
||||||
MailboxTree? teamMailboxesTre;
|
MailboxTree? teamMailboxesTre;
|
||||||
OnCreatedMailboxCallback? onCreatedMailboxCallback;
|
|
||||||
VoidCallback? onDismissMailboxCreator;
|
|
||||||
|
|
||||||
List<String> listMailboxNameAsStringExist = <String>[];
|
List<String> listMailboxNameAsStringExist = <String>[];
|
||||||
|
|
||||||
@@ -52,13 +49,14 @@ class MailboxCreatorController extends BaseController {
|
|||||||
@override
|
@override
|
||||||
void onInit() {
|
void onInit() {
|
||||||
super.onInit();
|
super.onInit();
|
||||||
nameInputFocusNode = FocusNode();
|
log('MailboxCreatorController::onInit():arguments: ${Get.arguments}');
|
||||||
nameInputController = TextEditingController();
|
arguments = Get.arguments;
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void onReady() {
|
void onReady() {
|
||||||
super.onReady();
|
super.onReady();
|
||||||
|
log('MailboxCreatorController::onReady():');
|
||||||
if (arguments != null) {
|
if (arguments != null) {
|
||||||
personalMailboxTree = arguments!.personalMailboxTree;
|
personalMailboxTree = arguments!.personalMailboxTree;
|
||||||
defaultMailboxTree = arguments!.defaultMailboxTree;
|
defaultMailboxTree = arguments!.defaultMailboxTree;
|
||||||
@@ -71,7 +69,9 @@ class MailboxCreatorController extends BaseController {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
void onClose() {
|
void onClose() {
|
||||||
_disposeWidget();
|
log('MailboxCreatorController::onClose():');
|
||||||
|
nameInputFocusNode.dispose();
|
||||||
|
nameInputController.dispose();
|
||||||
super.onClose();
|
super.onClose();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -111,7 +111,7 @@ class MailboxCreatorController extends BaseController {
|
|||||||
|
|
||||||
String? getErrorInputNameString(BuildContext context) {
|
String? getErrorInputNameString(BuildContext context) {
|
||||||
final nameMailbox = newNameMailbox.value;
|
final nameMailbox = newNameMailbox.value;
|
||||||
final canCheckNameString = _createdMailbox && nameInputFocusNode?.hasFocus == false;
|
final canCheckNameString = _createdMailbox && nameInputFocusNode.hasFocus == false;
|
||||||
|
|
||||||
return _verifyNameInteractor.execute(
|
return _verifyNameInteractor.execute(
|
||||||
nameMailbox,
|
nameMailbox,
|
||||||
@@ -138,47 +138,26 @@ class MailboxCreatorController extends BaseController {
|
|||||||
|
|
||||||
if (accountId != null) {
|
if (accountId != null) {
|
||||||
final arguments = DestinationPickerArguments(
|
final arguments = DestinationPickerArguments(
|
||||||
accountId!,
|
accountId!,
|
||||||
MailboxActions.create,
|
MailboxActions.create,
|
||||||
_session,
|
_session,
|
||||||
mailboxIdSelected: selectedMailbox.value?.id);
|
mailboxIdSelected: selectedMailbox.value?.id);
|
||||||
|
|
||||||
if (PlatformInfo.isWeb) {
|
final destinationMailbox = PlatformInfo.isWeb
|
||||||
showDialogDestinationPicker(
|
? await DialogRouter.pushGeneralDialog(routeName: AppRoutes.destinationPicker, arguments: arguments)
|
||||||
context: context,
|
: await push(AppRoutes.destinationPicker, arguments: arguments);
|
||||||
arguments: arguments,
|
|
||||||
onSelectedMailbox: (destinationMailbox) {
|
|
||||||
final mailboxDestination = destinationMailbox == PresentationMailbox.unifiedMailbox
|
|
||||||
? null
|
|
||||||
: destinationMailbox;
|
|
||||||
|
|
||||||
selectedMailbox.value = mailboxDestination;
|
if (destinationMailbox is PresentationMailbox) {
|
||||||
_createListMailboxNameAsStringInMailboxLocation();
|
final mailboxDestination = destinationMailbox == PresentationMailbox.unifiedMailbox
|
||||||
});
|
? null
|
||||||
} else {
|
: destinationMailbox;
|
||||||
final destinationMailbox = await push(
|
|
||||||
AppRoutes.destinationPicker,
|
|
||||||
arguments: arguments);
|
|
||||||
|
|
||||||
if (destinationMailbox is PresentationMailbox) {
|
selectedMailbox.value = mailboxDestination;
|
||||||
final mailboxDestination = destinationMailbox == PresentationMailbox.unifiedMailbox
|
_createListMailboxNameAsStringInMailboxLocation();
|
||||||
? null
|
|
||||||
: destinationMailbox;
|
|
||||||
|
|
||||||
selectedMailbox.value = mailboxDestination;
|
|
||||||
_createListMailboxNameAsStringInMailboxLocation();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void _disposeWidget() {
|
|
||||||
nameInputFocusNode?.dispose();
|
|
||||||
nameInputFocusNode = null;
|
|
||||||
nameInputController?.dispose();
|
|
||||||
nameInputController = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
void createNewMailbox(BuildContext context) {
|
void createNewMailbox(BuildContext context) {
|
||||||
KeyboardUtils.hideKeyboard(context);
|
KeyboardUtils.hideKeyboard(context);
|
||||||
|
|
||||||
@@ -191,24 +170,14 @@ class MailboxCreatorController extends BaseController {
|
|||||||
|
|
||||||
if (nameMailbox != null && nameMailbox.isNotEmpty && _createdMailbox) {
|
if (nameMailbox != null && nameMailbox.isNotEmpty && _createdMailbox) {
|
||||||
final newMailboxArguments = NewMailboxArguments(
|
final newMailboxArguments = NewMailboxArguments(
|
||||||
MailboxName(nameMailbox),
|
MailboxName(nameMailbox),
|
||||||
mailboxLocation: selectedMailbox.value);
|
mailboxLocation: selectedMailbox.value);
|
||||||
|
popBack(result: newMailboxArguments);
|
||||||
if (PlatformInfo.isWeb) {
|
|
||||||
onCreatedMailboxCallback?.call(newMailboxArguments);
|
|
||||||
} else {
|
|
||||||
popBack(result: newMailboxArguments);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void closeMailboxCreator(BuildContext context) {
|
void closeMailboxCreator(BuildContext context) {
|
||||||
KeyboardUtils.hideKeyboard(context);
|
KeyboardUtils.hideKeyboard(context);
|
||||||
|
popBack();
|
||||||
if (PlatformInfo.isWeb) {
|
|
||||||
onDismissMailboxCreator?.call();
|
|
||||||
} else {
|
|
||||||
popBack();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3,6 +3,7 @@ import 'package:core/presentation/resources/image_paths.dart';
|
|||||||
import 'package:core/presentation/utils/responsive_utils.dart';
|
import 'package:core/presentation/utils/responsive_utils.dart';
|
||||||
import 'package:core/presentation/utils/style_utils.dart';
|
import 'package:core/presentation/utils/style_utils.dart';
|
||||||
import 'package:core/presentation/views/text/text_field_builder.dart';
|
import 'package:core/presentation/views/text/text_field_builder.dart';
|
||||||
|
import 'package:core/utils/app_logger.dart';
|
||||||
import 'package:core/utils/platform_info.dart';
|
import 'package:core/utils/platform_info.dart';
|
||||||
import 'package:core/utils/direction_utils.dart';
|
import 'package:core/utils/direction_utils.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
@@ -11,7 +12,6 @@ import 'package:get/get.dart';
|
|||||||
import 'package:pointer_interceptor/pointer_interceptor.dart';
|
import 'package:pointer_interceptor/pointer_interceptor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/domain/extensions/presentation_mailbox_extension.dart';
|
import 'package:tmail_ui_user/features/mailbox/domain/extensions/presentation_mailbox_extension.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_creator/presentation/mailbox_creator_controller.dart';
|
import 'package:tmail_ui_user/features/mailbox_creator/presentation/mailbox_creator_controller.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_creator/presentation/model/mailbox_creator_arguments.dart';
|
|
||||||
import 'package:tmail_ui_user/features/mailbox_creator/presentation/widgets/app_bar_mailbox_creator_builder.dart';
|
import 'package:tmail_ui_user/features/mailbox_creator/presentation/widgets/app_bar_mailbox_creator_builder.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_creator/presentation/widgets/create_mailbox_name_input_decoration_builder.dart';
|
import 'package:tmail_ui_user/features/mailbox_creator/presentation/widgets/create_mailbox_name_input_decoration_builder.dart';
|
||||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
@@ -25,23 +25,11 @@ class MailboxCreatorView extends GetWidget<MailboxCreatorController> {
|
|||||||
@override
|
@override
|
||||||
final controller = Get.find<MailboxCreatorController>();
|
final controller = Get.find<MailboxCreatorController>();
|
||||||
|
|
||||||
MailboxCreatorView({Key? key}) : super(key: key) {
|
MailboxCreatorView({super.key});
|
||||||
controller.arguments = Get.arguments;
|
|
||||||
}
|
|
||||||
|
|
||||||
MailboxCreatorView.fromArguments(
|
|
||||||
MailboxCreatorArguments arguments, {
|
|
||||||
Key? key,
|
|
||||||
OnCreatedMailboxCallback? onCreatedMailboxCallback,
|
|
||||||
VoidCallback? onDismissCallback
|
|
||||||
}) : super(key: key) {
|
|
||||||
controller.arguments = arguments;
|
|
||||||
controller.onCreatedMailboxCallback = onCreatedMailboxCallback;
|
|
||||||
controller.onDismissMailboxCreator = onDismissCallback;
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
log('MailboxCreatorView::build():');
|
||||||
return PointerInterceptor(
|
return PointerInterceptor(
|
||||||
child: GestureDetector(
|
child: GestureDetector(
|
||||||
onTap: () => controller.closeMailboxCreator(context),
|
onTap: () => controller.closeMailboxCreator(context),
|
||||||
@@ -114,7 +102,6 @@ class MailboxCreatorView extends GetWidget<MailboxCreatorController> {
|
|||||||
return Padding(
|
return Padding(
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 14),
|
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 14),
|
||||||
child: Obx(() => TextFieldBuilder(
|
child: Obx(() => TextFieldBuilder(
|
||||||
key: const Key('create_mailbox_name_input'),
|
|
||||||
onTextChange: controller.setNewNameMailbox,
|
onTextChange: controller.setNewNameMailbox,
|
||||||
keyboardType: TextInputType.visiblePassword,
|
keyboardType: TextInputType.visiblePassword,
|
||||||
cursorColor: AppColor.colorTextButton,
|
cursorColor: AppColor.colorTextButton,
|
||||||
|
|||||||
+12
-22
@@ -25,6 +25,7 @@ import 'package:tmail_ui_user/features/manage_account/presentation/extensions/da
|
|||||||
import 'package:tmail_ui_user/features/thread/domain/model/search_query.dart';
|
import 'package:tmail_ui_user/features/thread/domain/model/search_query.dart';
|
||||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/app_routes.dart';
|
import 'package:tmail_ui_user/main/routes/app_routes.dart';
|
||||||
|
import 'package:tmail_ui_user/main/routes/dialog_router.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
||||||
|
|
||||||
class AdvancedFilterController extends BaseController {
|
class AdvancedFilterController extends BaseController {
|
||||||
@@ -131,30 +132,19 @@ class AdvancedFilterController extends BaseController {
|
|||||||
final session = _mailboxDashBoardController.sessionCurrent;
|
final session = _mailboxDashBoardController.sessionCurrent;
|
||||||
if (accountId != null) {
|
if (accountId != null) {
|
||||||
final arguments = DestinationPickerArguments(
|
final arguments = DestinationPickerArguments(
|
||||||
accountId,
|
accountId,
|
||||||
MailboxActions.select,
|
MailboxActions.select,
|
||||||
session,
|
session,
|
||||||
mailboxIdSelected: searchController.searchEmailFilter.value.mailbox?.id);
|
mailboxIdSelected: searchController.searchEmailFilter.value.mailbox?.id);
|
||||||
|
|
||||||
if (PlatformInfo.isWeb) {
|
final destinationMailbox = PlatformInfo.isWeb
|
||||||
showDialogDestinationPicker(
|
? await DialogRouter.pushGeneralDialog(routeName: AppRoutes.destinationPicker, arguments: arguments)
|
||||||
context: context,
|
: await push(AppRoutes.destinationPicker, arguments: arguments);
|
||||||
arguments: arguments,
|
|
||||||
onSelectedMailbox: (destinationMailbox) {
|
|
||||||
_destinationMailboxSelected = destinationMailbox;
|
|
||||||
final mailboxName = destinationMailbox.name?.name;
|
|
||||||
mailBoxFilterInputController.text = StringConvert.writeNullToEmpty(mailboxName);
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
final destinationMailbox = await push(
|
|
||||||
AppRoutes.destinationPicker,
|
|
||||||
arguments: arguments);
|
|
||||||
|
|
||||||
if (destinationMailbox is PresentationMailbox) {
|
if (destinationMailbox is PresentationMailbox) {
|
||||||
_destinationMailboxSelected = destinationMailbox;
|
_destinationMailboxSelected = destinationMailbox;
|
||||||
final mailboxName = destinationMailbox.name?.name;
|
final mailboxName = destinationMailbox.name?.name;
|
||||||
mailBoxFilterInputController.text = StringConvert.writeNullToEmpty(mailboxName);
|
mailBoxFilterInputController.text = StringConvert.writeNullToEmpty(mailboxName);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+16
-28
@@ -120,6 +120,7 @@ import 'package:tmail_ui_user/features/thread/domain/usecases/move_multiple_emai
|
|||||||
import 'package:tmail_ui_user/features/thread/presentation/model/delete_action_type.dart';
|
import 'package:tmail_ui_user/features/thread/presentation/model/delete_action_type.dart';
|
||||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/app_routes.dart';
|
import 'package:tmail_ui_user/main/routes/app_routes.dart';
|
||||||
|
import 'package:tmail_ui_user/main/routes/dialog_router.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/navigation_router.dart';
|
import 'package:tmail_ui_user/main/routes/navigation_router.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/route_utils.dart';
|
import 'package:tmail_ui_user/main/routes/route_utils.dart';
|
||||||
@@ -791,35 +792,22 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
sessionCurrent,
|
sessionCurrent,
|
||||||
mailboxIdSelected: currentMailbox.mailboxId);
|
mailboxIdSelected: currentMailbox.mailboxId);
|
||||||
|
|
||||||
if (PlatformInfo.isWeb) {
|
final destinationMailbox = PlatformInfo.isWeb
|
||||||
showDialogDestinationPicker(
|
? await DialogRouter.pushGeneralDialog(routeName: AppRoutes.destinationPicker, arguments: arguments)
|
||||||
context: context,
|
: await push(AppRoutes.destinationPicker, arguments: arguments);
|
||||||
arguments: arguments,
|
|
||||||
onSelectedMailbox: (destinationMailbox) {
|
|
||||||
if (sessionCurrent != null) {
|
|
||||||
_dispatchMoveToMultipleAction(
|
|
||||||
accountId.value!,
|
|
||||||
sessionCurrent!,
|
|
||||||
listEmails.listEmailIds,
|
|
||||||
currentMailbox,
|
|
||||||
destinationMailbox);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
final destinationMailbox = await push(
|
|
||||||
AppRoutes.destinationPicker,
|
|
||||||
arguments: arguments);
|
|
||||||
|
|
||||||
if (destinationMailbox != null &&
|
if (destinationMailbox != null &&
|
||||||
destinationMailbox is PresentationMailbox &&
|
destinationMailbox is PresentationMailbox &&
|
||||||
sessionCurrent != null) {
|
sessionCurrent != null &&
|
||||||
_dispatchMoveToMultipleAction(
|
accountId.value != null
|
||||||
accountId.value!,
|
) {
|
||||||
sessionCurrent!,
|
_dispatchMoveToMultipleAction(
|
||||||
listEmails.listEmailIds,
|
accountId.value!,
|
||||||
currentMailbox,
|
sessionCurrent!,
|
||||||
destinationMailbox);
|
listEmails.listEmailIds,
|
||||||
}
|
currentMailbox,
|
||||||
|
destinationMailbox
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ import 'package:tmail_ui_user/features/manage_account/presentation/manage_accoun
|
|||||||
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/model/creator_action_type.dart';
|
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/model/creator_action_type.dart';
|
||||||
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/model/rules_filter_creator_arguments.dart';
|
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/model/rules_filter_creator_arguments.dart';
|
||||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
|
import 'package:tmail_ui_user/main/routes/dialog_router.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/app_routes.dart';
|
import 'package:tmail_ui_user/main/routes/app_routes.dart';
|
||||||
|
|
||||||
@@ -88,23 +89,12 @@ class EmailRulesController extends BaseController {
|
|||||||
if (accountId != null && session != null) {
|
if (accountId != null && session != null) {
|
||||||
final arguments = RulesFilterCreatorArguments(accountId, session);
|
final arguments = RulesFilterCreatorArguments(accountId, session);
|
||||||
|
|
||||||
if (PlatformInfo.isWeb) {
|
final newRuleFilterRequest = PlatformInfo.isWeb
|
||||||
showDialogRuleFilterCreator(
|
? await DialogRouter.pushGeneralDialog(routeName: AppRoutes.rulesFilterCreator, arguments: arguments)
|
||||||
context: context,
|
: await push(AppRoutes.rulesFilterCreator, arguments: arguments);
|
||||||
arguments: arguments,
|
|
||||||
onCreatedRuleFilter: (arguments) {
|
|
||||||
if (arguments is CreateNewEmailRuleFilterRequest) {
|
|
||||||
_createNewRuleFilterAction(accountId, arguments);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
final newRuleFilterRequest = await push(
|
|
||||||
AppRoutes.rulesFilterCreator,
|
|
||||||
arguments: arguments);
|
|
||||||
|
|
||||||
if (newRuleFilterRequest is CreateNewEmailRuleFilterRequest) {
|
if (newRuleFilterRequest is CreateNewEmailRuleFilterRequest) {
|
||||||
_createNewRuleFilterAction(accountId, newRuleFilterRequest);
|
_createNewRuleFilterAction(accountId, newRuleFilterRequest);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -140,23 +130,12 @@ class EmailRulesController extends BaseController {
|
|||||||
actionType: CreatorActionType.edit,
|
actionType: CreatorActionType.edit,
|
||||||
tMailRule: rule);
|
tMailRule: rule);
|
||||||
|
|
||||||
if (PlatformInfo.isWeb) {
|
final newRuleFilterRequest = PlatformInfo.isWeb
|
||||||
showDialogRuleFilterCreator(
|
? await DialogRouter.pushGeneralDialog(routeName: AppRoutes.rulesFilterCreator, arguments: arguments)
|
||||||
context: context,
|
: await push(AppRoutes.rulesFilterCreator, arguments: arguments);
|
||||||
arguments: arguments,
|
|
||||||
onCreatedRuleFilter: (arguments) {
|
|
||||||
if (arguments is EditEmailRuleFilterRequest) {
|
|
||||||
_editEmailRuleFilterAction(accountId, arguments);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
final newRuleFilterRequest = await push(
|
|
||||||
AppRoutes.rulesFilterCreator,
|
|
||||||
arguments: arguments);
|
|
||||||
|
|
||||||
if (newRuleFilterRequest is EditEmailRuleFilterRequest) {
|
if (newRuleFilterRequest is EditEmailRuleFilterRequest) {
|
||||||
_editEmailRuleFilterAction(accountId, newRuleFilterRequest);
|
_editEmailRuleFilterAction(accountId, newRuleFilterRequest);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+20
-45
@@ -36,6 +36,7 @@ import 'package:tmail_ui_user/features/manage_account/presentation/model/identit
|
|||||||
import 'package:tmail_ui_user/features/manage_account/presentation/profiles/identities/widgets/delete_identity_dialog_builder.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/profiles/identities/widgets/delete_identity_dialog_builder.dart';
|
||||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/app_routes.dart';
|
import 'package:tmail_ui_user/main/routes/app_routes.dart';
|
||||||
|
import 'package:tmail_ui_user/main/routes/dialog_router.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
||||||
|
|
||||||
class IdentitiesController extends BaseController {
|
class IdentitiesController extends BaseController {
|
||||||
@@ -152,27 +153,14 @@ class IdentitiesController extends BaseController {
|
|||||||
if (accountId != null && session != null && userProfile != null) {
|
if (accountId != null && session != null && userProfile != null) {
|
||||||
final arguments = IdentityCreatorArguments(accountId, session, userProfile);
|
final arguments = IdentityCreatorArguments(accountId, session, userProfile);
|
||||||
|
|
||||||
if (PlatformInfo.isWeb) {
|
final newIdentityArguments = PlatformInfo.isWeb
|
||||||
showDialogIdentityCreator(
|
? await DialogRouter.pushGeneralDialog(routeName: AppRoutes.identityCreator, arguments: arguments)
|
||||||
context: context,
|
: await push(AppRoutes.identityCreator, arguments: arguments);
|
||||||
arguments: arguments,
|
|
||||||
onCreatedIdentity: (arguments) {
|
|
||||||
if (arguments is CreateNewIdentityRequest) {
|
|
||||||
_createNewIdentityAction(session, accountId, arguments);
|
|
||||||
} else if (arguments is EditIdentityRequest) {
|
|
||||||
_editIdentityAction(session, accountId, arguments);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
final newIdentityArguments = await push(
|
|
||||||
AppRoutes.identityCreator,
|
|
||||||
arguments: arguments);
|
|
||||||
|
|
||||||
if (newIdentityArguments is CreateNewIdentityRequest) {
|
if (newIdentityArguments is CreateNewIdentityRequest) {
|
||||||
_createNewIdentityAction(session, accountId, newIdentityArguments);
|
_createNewIdentityAction(session, accountId, newIdentityArguments);
|
||||||
} else if (newIdentityArguments is EditIdentityRequest) {
|
} else if (newIdentityArguments is EditIdentityRequest) {
|
||||||
_editIdentityAction(session, accountId, newIdentityArguments);
|
_editIdentityAction(session, accountId, newIdentityArguments);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -271,33 +259,20 @@ class IdentitiesController extends BaseController {
|
|||||||
final session = _accountDashBoardController.sessionCurrent;
|
final session = _accountDashBoardController.sessionCurrent;
|
||||||
if (accountId != null && session != null && userProfile != null) {
|
if (accountId != null && session != null && userProfile != null) {
|
||||||
final arguments = IdentityCreatorArguments(
|
final arguments = IdentityCreatorArguments(
|
||||||
accountId,
|
accountId,
|
||||||
session,
|
session,
|
||||||
userProfile,
|
userProfile,
|
||||||
identity: identity,
|
identity: identity,
|
||||||
actionType: IdentityActionType.edit);
|
actionType: IdentityActionType.edit);
|
||||||
|
|
||||||
if (PlatformInfo.isWeb) {
|
final newIdentityArguments = PlatformInfo.isWeb
|
||||||
showDialogIdentityCreator(
|
? await DialogRouter.pushGeneralDialog(routeName: AppRoutes.identityCreator, arguments: arguments)
|
||||||
context: context,
|
: await push(AppRoutes.identityCreator, arguments: arguments);
|
||||||
arguments: arguments,
|
|
||||||
onCreatedIdentity: (arguments) {
|
|
||||||
if (arguments is CreateNewIdentityRequest) {
|
|
||||||
_createNewIdentityAction(session, accountId, arguments);
|
|
||||||
} else if (arguments is EditIdentityRequest) {
|
|
||||||
_editIdentityAction(session, accountId, arguments);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
final newIdentityArguments = await push(
|
|
||||||
AppRoutes.identityCreator,
|
|
||||||
arguments: arguments);
|
|
||||||
|
|
||||||
if (newIdentityArguments is CreateNewIdentityRequest) {
|
if (newIdentityArguments is CreateNewIdentityRequest) {
|
||||||
_createNewIdentityAction(session, accountId, newIdentityArguments);
|
_createNewIdentityAction(session, accountId, newIdentityArguments);
|
||||||
} else if (newIdentityArguments is EditIdentityRequest) {
|
} else if (newIdentityArguments is EditIdentityRequest) {
|
||||||
_editIdentityAction(session, accountId, newIdentityArguments);
|
_editIdentityAction(session, accountId, newIdentityArguments);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -79,8 +79,4 @@ class RulesFilterCreatorBindings extends BaseBindings {
|
|||||||
Get.find<StateDataSource>(),
|
Get.find<StateDataSource>(),
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
void dispose() {
|
|
||||||
Get.delete<RulesFilterCreatorController>();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
+33
-83
@@ -35,10 +35,9 @@ import 'package:tmail_ui_user/features/rules_filter_creator/presentation/model/e
|
|||||||
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/model/rules_filter_creator_arguments.dart';
|
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/model/rules_filter_creator_arguments.dart';
|
||||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/app_routes.dart';
|
import 'package:tmail_ui_user/main/routes/app_routes.dart';
|
||||||
|
import 'package:tmail_ui_user/main/routes/dialog_router.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
||||||
|
|
||||||
typedef OnCreatedRuleFilterCallback = Function(dynamic arguments);
|
|
||||||
|
|
||||||
class RulesFilterCreatorController extends BaseMailboxController {
|
class RulesFilterCreatorController extends BaseMailboxController {
|
||||||
|
|
||||||
final _appToast = Get.find<AppToast>();
|
final _appToast = Get.find<AppToast>();
|
||||||
@@ -56,17 +55,15 @@ class RulesFilterCreatorController extends BaseMailboxController {
|
|||||||
final mailboxSelected = Rxn<PresentationMailbox>();
|
final mailboxSelected = Rxn<PresentationMailbox>();
|
||||||
final actionType = CreatorActionType.create.obs;
|
final actionType = CreatorActionType.create.obs;
|
||||||
|
|
||||||
TextEditingController? inputRuleNameController;
|
final TextEditingController inputRuleNameController = TextEditingController();
|
||||||
TextEditingController? inputConditionValueController;
|
final TextEditingController inputConditionValueController = TextEditingController();
|
||||||
FocusNode? inputRuleNameFocusNode;
|
final FocusNode inputRuleNameFocusNode = FocusNode();
|
||||||
FocusNode? inputRuleConditionFocusNode;
|
final FocusNode inputRuleConditionFocusNode = FocusNode();
|
||||||
|
|
||||||
String? _newRuleName;
|
String? _newRuleName;
|
||||||
String? _newRuleConditionValue;
|
String? _newRuleConditionValue;
|
||||||
|
|
||||||
RulesFilterCreatorArguments? arguments;
|
RulesFilterCreatorArguments? arguments;
|
||||||
OnCreatedRuleFilterCallback? onCreatedRuleFilterCallback;
|
|
||||||
VoidCallback? onDismissRuleFilterCreator;
|
|
||||||
AccountId? _accountId;
|
AccountId? _accountId;
|
||||||
Session? _session;
|
Session? _session;
|
||||||
TMailRule? _currentTMailRule;
|
TMailRule? _currentTMailRule;
|
||||||
@@ -82,15 +79,14 @@ class RulesFilterCreatorController extends BaseMailboxController {
|
|||||||
@override
|
@override
|
||||||
void onInit() {
|
void onInit() {
|
||||||
super.onInit();
|
super.onInit();
|
||||||
inputRuleNameController = TextEditingController();
|
log('RulesFilterCreatorController::onInit():arguments: ${Get.arguments}');
|
||||||
inputConditionValueController = TextEditingController();
|
arguments = Get.arguments;
|
||||||
inputRuleNameFocusNode = FocusNode();
|
|
||||||
inputRuleConditionFocusNode = FocusNode();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void onReady() {
|
void onReady() {
|
||||||
super.onReady();
|
super.onReady();
|
||||||
|
log('RulesFilterCreatorController::onReady():');
|
||||||
if (arguments != null) {
|
if (arguments != null) {
|
||||||
_accountId = arguments!.accountId;
|
_accountId = arguments!.accountId;
|
||||||
_session = arguments!.session;
|
_session = arguments!.session;
|
||||||
@@ -110,7 +106,11 @@ class RulesFilterCreatorController extends BaseMailboxController {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
void onClose() {
|
void onClose() {
|
||||||
_disposeWidget();
|
log('RulesFilterCreatorController::onClose():');
|
||||||
|
inputRuleNameFocusNode.dispose();
|
||||||
|
inputRuleConditionFocusNode.dispose();
|
||||||
|
inputRuleNameController.dispose();
|
||||||
|
inputConditionValueController.dispose();
|
||||||
super.onClose();
|
super.onClose();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -158,7 +158,7 @@ class RulesFilterCreatorController extends BaseMailboxController {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
inputRuleNameFocusNode?.requestFocus();
|
inputRuleNameFocusNode.requestFocus();
|
||||||
}
|
}
|
||||||
|
|
||||||
void _setValueInputField(TextEditingController? controller, String value) {
|
void _setValueInputField(TextEditingController? controller, String value) {
|
||||||
@@ -219,31 +219,19 @@ class RulesFilterCreatorController extends BaseMailboxController {
|
|||||||
void selectMailbox(BuildContext context) async {
|
void selectMailbox(BuildContext context) async {
|
||||||
if (_accountId != null) {
|
if (_accountId != null) {
|
||||||
final arguments = DestinationPickerArguments(
|
final arguments = DestinationPickerArguments(
|
||||||
_accountId!,
|
_accountId!,
|
||||||
MailboxActions.selectForRuleAction,
|
MailboxActions.selectForRuleAction,
|
||||||
_session);
|
_session);
|
||||||
|
|
||||||
if (PlatformInfo.isWeb) {
|
final destinationMailbox = PlatformInfo.isWeb
|
||||||
showDialogDestinationPicker(
|
? await DialogRouter.pushGeneralDialog(routeName: AppRoutes.destinationPicker, arguments: arguments)
|
||||||
context: context,
|
: await push(AppRoutes.destinationPicker, arguments: arguments);
|
||||||
arguments: arguments,
|
|
||||||
onSelectedMailbox: (destinationMailbox) {
|
|
||||||
mailboxSelected.value = destinationMailbox;
|
|
||||||
errorRuleActionValue.value = _getErrorStringByInputValue(
|
|
||||||
context,
|
|
||||||
mailboxSelected.value?.name?.name);
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
final destinationMailbox = await push(
|
|
||||||
AppRoutes.destinationPicker,
|
|
||||||
arguments: arguments);
|
|
||||||
|
|
||||||
if (destinationMailbox is PresentationMailbox && context.mounted) {
|
if (destinationMailbox is PresentationMailbox && context.mounted) {
|
||||||
mailboxSelected.value = destinationMailbox;
|
mailboxSelected.value = destinationMailbox;
|
||||||
errorRuleActionValue.value = _getErrorStringByInputValue(
|
errorRuleActionValue.value = _getErrorStringByInputValue(
|
||||||
context,
|
context,
|
||||||
mailboxSelected.value?.name?.name);
|
mailboxSelected.value?.name?.name);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -254,14 +242,14 @@ class RulesFilterCreatorController extends BaseMailboxController {
|
|||||||
final errorName = _getErrorStringByInputValue(context, _newRuleName);
|
final errorName = _getErrorStringByInputValue(context, _newRuleName);
|
||||||
if (errorName?.isNotEmpty == true) {
|
if (errorName?.isNotEmpty == true) {
|
||||||
errorRuleName.value = errorName;
|
errorRuleName.value = errorName;
|
||||||
inputRuleNameFocusNode?.requestFocus();
|
inputRuleNameFocusNode.requestFocus();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
final errorCondition = _getErrorStringByInputValue(context, _newRuleConditionValue);
|
final errorCondition = _getErrorStringByInputValue(context, _newRuleConditionValue);
|
||||||
if (errorCondition?.isNotEmpty == true) {
|
if (errorCondition?.isNotEmpty == true) {
|
||||||
errorRuleConditionValue.value = errorCondition;
|
errorRuleConditionValue.value = errorCondition;
|
||||||
inputRuleConditionFocusNode?.requestFocus();
|
inputRuleConditionFocusNode.requestFocus();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -301,53 +289,15 @@ class RulesFilterCreatorController extends BaseMailboxController {
|
|||||||
value: _newRuleConditionValue!
|
value: _newRuleConditionValue!
|
||||||
));
|
));
|
||||||
|
|
||||||
if (actionType.value == CreatorActionType.create) {
|
final ruleFilterRequest =
|
||||||
final ruleFilterRequest = CreateNewEmailRuleFilterRequest(
|
actionType.value == CreatorActionType.create
|
||||||
_listEmailRule ?? [],
|
? CreateNewEmailRuleFilterRequest(_listEmailRule ?? [], newTMailRule)
|
||||||
newTMailRule);
|
: EditEmailRuleFilterRequest(_listEmailRule?.withIds ?? [], newTMailRule);
|
||||||
|
popBack(result: ruleFilterRequest);
|
||||||
if (PlatformInfo.isWeb) {
|
|
||||||
onCreatedRuleFilterCallback?.call(ruleFilterRequest);
|
|
||||||
} else {
|
|
||||||
popBack(result: ruleFilterRequest);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
final ruleFilterRequest = EditEmailRuleFilterRequest(
|
|
||||||
_listEmailRule?.withIds ?? [],
|
|
||||||
newTMailRule);
|
|
||||||
|
|
||||||
if (PlatformInfo.isWeb) {
|
|
||||||
onCreatedRuleFilterCallback?.call(ruleFilterRequest);
|
|
||||||
} else {
|
|
||||||
popBack(result: ruleFilterRequest);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void _clearAll() {
|
|
||||||
inputRuleNameController?.clear();
|
|
||||||
inputConditionValueController?.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
void _disposeWidget() {
|
|
||||||
inputRuleNameFocusNode?.dispose();
|
|
||||||
inputRuleNameFocusNode = null;
|
|
||||||
inputRuleConditionFocusNode?.dispose();
|
|
||||||
inputRuleConditionFocusNode = null;
|
|
||||||
inputRuleNameController?.dispose();
|
|
||||||
inputRuleNameController = null;
|
|
||||||
inputConditionValueController?.dispose();
|
|
||||||
inputConditionValueController = null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void closeView(BuildContext context) {
|
void closeView(BuildContext context) {
|
||||||
_clearAll();
|
|
||||||
KeyboardUtils.hideKeyboard(context);
|
KeyboardUtils.hideKeyboard(context);
|
||||||
|
popBack();
|
||||||
if (PlatformInfo.isWeb) {
|
|
||||||
onDismissRuleFilterCreator?.call();
|
|
||||||
} else {
|
|
||||||
popBack();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -8,7 +8,6 @@ import 'package:rule_filter/rule_filter/rule_condition.dart' as rule_condition;
|
|||||||
import 'package:tmail_ui_user/features/base/widget/drop_down_button_widget.dart';
|
import 'package:tmail_ui_user/features/base/widget/drop_down_button_widget.dart';
|
||||||
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/extensions/rule_condition_extensions.dart';
|
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/extensions/rule_condition_extensions.dart';
|
||||||
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/model/email_rule_filter_action.dart';
|
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/model/email_rule_filter_action.dart';
|
||||||
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/model/rules_filter_creator_arguments.dart';
|
|
||||||
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/rules_filter_creator_controller.dart';
|
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/rules_filter_creator_controller.dart';
|
||||||
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/widgets/rule_action_bottom_sheet_action_tile_builder.dart';
|
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/widgets/rule_action_bottom_sheet_action_tile_builder.dart';
|
||||||
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/widgets/rule_condition_comparator_bottom_sheet_action_tile_builder.dart';
|
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/widgets/rule_condition_comparator_bottom_sheet_action_tile_builder.dart';
|
||||||
@@ -26,20 +25,7 @@ class RuleFilterCreatorView extends GetWidget<RulesFilterCreatorController> {
|
|||||||
@override
|
@override
|
||||||
final controller = Get.find<RulesFilterCreatorController>();
|
final controller = Get.find<RulesFilterCreatorController>();
|
||||||
|
|
||||||
RuleFilterCreatorView({Key? key}) : super(key: key) {
|
RuleFilterCreatorView({super.key});
|
||||||
controller.arguments = Get.arguments;
|
|
||||||
}
|
|
||||||
|
|
||||||
RuleFilterCreatorView.fromArguments(
|
|
||||||
RulesFilterCreatorArguments arguments, {
|
|
||||||
Key? key,
|
|
||||||
OnCreatedRuleFilterCallback? onCreatedRuleFilterCallback,
|
|
||||||
VoidCallback? onDismissCallback
|
|
||||||
}) : super(key: key) {
|
|
||||||
controller.arguments = arguments;
|
|
||||||
controller.onCreatedRuleFilterCallback = onCreatedRuleFilterCallback;
|
|
||||||
controller.onDismissRuleFilterCreator = onDismissCallback;
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
|||||||
@@ -66,6 +66,7 @@ import 'package:tmail_ui_user/features/thread/presentation/extensions/list_prese
|
|||||||
import 'package:tmail_ui_user/features/thread/presentation/mixin/email_action_controller.dart';
|
import 'package:tmail_ui_user/features/thread/presentation/mixin/email_action_controller.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/presentation/model/delete_action_type.dart';
|
import 'package:tmail_ui_user/features/thread/presentation/model/delete_action_type.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/app_routes.dart';
|
import 'package:tmail_ui_user/main/routes/app_routes.dart';
|
||||||
|
import 'package:tmail_ui_user/main/routes/dialog_router.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
||||||
|
|
||||||
class SearchEmailController extends BaseController
|
class SearchEmailController extends BaseController
|
||||||
@@ -478,41 +479,25 @@ class SearchEmailController extends BaseController
|
|||||||
|
|
||||||
void selectMailboxForSearchFilter(BuildContext context, PresentationMailbox? mailbox) async {
|
void selectMailboxForSearchFilter(BuildContext context, PresentationMailbox? mailbox) async {
|
||||||
final arguments = DestinationPickerArguments(
|
final arguments = DestinationPickerArguments(
|
||||||
mailboxDashBoardController.accountId.value!,
|
mailboxDashBoardController.accountId.value!,
|
||||||
MailboxActions.select,
|
MailboxActions.select,
|
||||||
mailboxDashBoardController.sessionCurrent,
|
mailboxDashBoardController.sessionCurrent,
|
||||||
mailboxIdSelected: mailbox?.id);
|
mailboxIdSelected: mailbox?.id);
|
||||||
|
|
||||||
if (PlatformInfo.isWeb) {
|
final destinationMailbox = PlatformInfo.isWeb
|
||||||
showDialogDestinationPicker(
|
? await DialogRouter.pushGeneralDialog(routeName: AppRoutes.destinationPicker, arguments: arguments)
|
||||||
context: context,
|
: await push(AppRoutes.destinationPicker, arguments: arguments);
|
||||||
arguments: arguments,
|
|
||||||
onSelectedMailbox: (destinationMailbox) {
|
|
||||||
final mailboxSelected = destinationMailbox == PresentationMailbox.unifiedMailbox ? null : destinationMailbox;
|
|
||||||
if (mailboxSelected != null && mailbox?.id != mailboxSelected.id) {
|
|
||||||
_updateSimpleSearchFilter(
|
|
||||||
mailboxOption: Some(mailboxSelected),
|
|
||||||
beforeOption: const None()
|
|
||||||
);
|
|
||||||
_searchEmailAction(context);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
final destinationMailbox = await push(
|
|
||||||
AppRoutes.destinationPicker,
|
|
||||||
arguments: arguments);
|
|
||||||
|
|
||||||
if (destinationMailbox is PresentationMailbox) {
|
if (destinationMailbox is PresentationMailbox) {
|
||||||
final mailboxSelected = destinationMailbox == PresentationMailbox.unifiedMailbox ? null : destinationMailbox;
|
final mailboxSelected = destinationMailbox == PresentationMailbox.unifiedMailbox ? null : destinationMailbox;
|
||||||
if (mailboxSelected != null && mailbox?.id != mailboxSelected.id) {
|
if (mailboxSelected != null && mailbox?.id != mailboxSelected.id) {
|
||||||
_updateSimpleSearchFilter(
|
_updateSimpleSearchFilter(
|
||||||
mailboxOption: Some(mailboxSelected),
|
mailboxOption: Some(mailboxSelected),
|
||||||
beforeOption: const None()
|
beforeOption: const None()
|
||||||
);
|
);
|
||||||
|
|
||||||
if (context.mounted) {
|
if (context.mounted) {
|
||||||
_searchEmailAction(context);
|
_searchEmailAction(context);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -526,29 +511,14 @@ class SearchEmailController extends BaseController
|
|||||||
final listContactSelected = simpleSearchFilter.value.getContactApplied(prefixEmailAddress);
|
final listContactSelected = simpleSearchFilter.value.getContactApplied(prefixEmailAddress);
|
||||||
final arguments = ContactArguments(accountId!, session!, listContactSelected);
|
final arguments = ContactArguments(accountId!, session!, listContactSelected);
|
||||||
|
|
||||||
if (PlatformInfo.isWeb) {
|
final newContact = await push(AppRoutes.contact, arguments: arguments);
|
||||||
showDialogContactView(
|
|
||||||
context: context,
|
|
||||||
arguments: arguments,
|
|
||||||
onSelectedContact: (newContact) {
|
|
||||||
_dispatchApplyContactAction(
|
|
||||||
context,
|
|
||||||
listContactSelected,
|
|
||||||
prefixEmailAddress,
|
|
||||||
newContact);
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
final newContact = await push(
|
|
||||||
AppRoutes.contact,
|
|
||||||
arguments: arguments);
|
|
||||||
|
|
||||||
if (newContact is EmailAddress && context.mounted) {
|
if (newContact is EmailAddress && context.mounted) {
|
||||||
_dispatchApplyContactAction(
|
_dispatchApplyContactAction(
|
||||||
context,
|
context,
|
||||||
listContactSelected,
|
listContactSelected,
|
||||||
prefixEmailAddress,
|
prefixEmailAddress,
|
||||||
newContact);
|
newContact);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,7 +17,6 @@ import 'package:model/email/presentation_email.dart';
|
|||||||
import 'package:model/email/read_actions.dart';
|
import 'package:model/email/read_actions.dart';
|
||||||
import 'package:model/mailbox/presentation_mailbox.dart';
|
import 'package:model/mailbox/presentation_mailbox.dart';
|
||||||
import 'package:pointer_interceptor/pointer_interceptor.dart';
|
import 'package:pointer_interceptor/pointer_interceptor.dart';
|
||||||
import 'package:tmail_ui_user/features/base/mixin/view_as_dialog_action_mixin.dart';
|
|
||||||
import 'package:tmail_ui_user/features/destination_picker/presentation/model/destination_picker_arguments.dart';
|
import 'package:tmail_ui_user/features/destination_picker/presentation/model/destination_picker_arguments.dart';
|
||||||
import 'package:tmail_ui_user/features/email/domain/model/move_action.dart';
|
import 'package:tmail_ui_user/features/email/domain/model/move_action.dart';
|
||||||
import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_request.dart';
|
import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_request.dart';
|
||||||
@@ -27,10 +26,11 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller
|
|||||||
import 'package:tmail_ui_user/features/thread/presentation/model/delete_action_type.dart';
|
import 'package:tmail_ui_user/features/thread/presentation/model/delete_action_type.dart';
|
||||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/app_routes.dart';
|
import 'package:tmail_ui_user/main/routes/app_routes.dart';
|
||||||
|
import 'package:tmail_ui_user/main/routes/dialog_router.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
||||||
import 'package:tmail_ui_user/main/utils/app_utils.dart';
|
import 'package:tmail_ui_user/main/utils/app_utils.dart';
|
||||||
|
|
||||||
mixin EmailActionController on ViewAsDialogActionMixin {
|
mixin EmailActionController {
|
||||||
|
|
||||||
final mailboxDashBoardController = Get.find<MailboxDashBoardController>();
|
final mailboxDashBoardController = Get.find<MailboxDashBoardController>();
|
||||||
final responsiveUtils = Get.find<ResponsiveUtils>();
|
final responsiveUtils = Get.find<ResponsiveUtils>();
|
||||||
@@ -131,38 +131,22 @@ mixin EmailActionController on ViewAsDialogActionMixin {
|
|||||||
session,
|
session,
|
||||||
mailboxIdSelected: mailboxContain.mailboxId);
|
mailboxIdSelected: mailboxContain.mailboxId);
|
||||||
|
|
||||||
if (PlatformInfo.isWeb) {
|
final destinationMailbox = PlatformInfo.isWeb
|
||||||
showDialogDestinationPicker(
|
? await DialogRouter.pushGeneralDialog(routeName: AppRoutes.destinationPicker, arguments: arguments)
|
||||||
context: context,
|
: await push(AppRoutes.destinationPicker, arguments: arguments);
|
||||||
arguments: arguments,
|
|
||||||
onSelectedMailbox: (destinationMailbox) {
|
|
||||||
if (mailboxDashBoardController.sessionCurrent != null) {
|
|
||||||
_dispatchMoveToAction(
|
|
||||||
context,
|
|
||||||
accountId,
|
|
||||||
mailboxDashBoardController.sessionCurrent!,
|
|
||||||
email,
|
|
||||||
mailboxContain,
|
|
||||||
destinationMailbox);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
final destinationMailbox = await push(
|
|
||||||
AppRoutes.destinationPicker,
|
|
||||||
arguments: arguments);
|
|
||||||
|
|
||||||
if (destinationMailbox != null &&
|
if (destinationMailbox != null &&
|
||||||
context.mounted &&
|
context.mounted &&
|
||||||
destinationMailbox is PresentationMailbox &&
|
destinationMailbox is PresentationMailbox &&
|
||||||
mailboxDashBoardController.sessionCurrent != null) {
|
mailboxDashBoardController.sessionCurrent != null
|
||||||
_dispatchMoveToAction(
|
) {
|
||||||
context,
|
_dispatchMoveToAction(
|
||||||
accountId,
|
context,
|
||||||
mailboxDashBoardController.sessionCurrent!,
|
accountId,
|
||||||
email,
|
mailboxDashBoardController.sessionCurrent!,
|
||||||
mailboxContain,
|
email,
|
||||||
destinationMailbox);
|
mailboxContain,
|
||||||
}
|
destinationMailbox);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -65,6 +65,13 @@ class AppPages {
|
|||||||
manage_account_dashboard.loadLibrary,
|
manage_account_dashboard.loadLibrary,
|
||||||
() => manage_account_dashboard.ManageAccountDashBoardView()),
|
() => manage_account_dashboard.ManageAccountDashBoardView()),
|
||||||
binding: ManageAccountDashBoardBindings()),
|
binding: ManageAccountDashBoardBindings()),
|
||||||
|
GetPage(
|
||||||
|
name: AppRoutes.contact,
|
||||||
|
opaque: false,
|
||||||
|
page: () => DeferredWidget(
|
||||||
|
contact_view.loadLibrary,
|
||||||
|
() => contact_view.ContactView()),
|
||||||
|
binding: ContactBindings()),
|
||||||
unknownRoutePage,
|
unknownRoutePage,
|
||||||
if (PlatformInfo.isMobile)
|
if (PlatformInfo.isMobile)
|
||||||
...[
|
...[
|
||||||
@@ -89,13 +96,6 @@ class AppPages {
|
|||||||
mailbox_creator.loadLibrary,
|
mailbox_creator.loadLibrary,
|
||||||
() => mailbox_creator.MailboxCreatorView()),
|
() => mailbox_creator.MailboxCreatorView()),
|
||||||
binding: MailboxCreatorBindings()),
|
binding: MailboxCreatorBindings()),
|
||||||
GetPage(
|
|
||||||
name: AppRoutes.contact,
|
|
||||||
opaque: false,
|
|
||||||
page: () => DeferredWidget(
|
|
||||||
contact_view.loadLibrary,
|
|
||||||
() => contact_view.ContactView()),
|
|
||||||
binding: ContactBindings()),
|
|
||||||
GetPage(
|
GetPage(
|
||||||
name: AppRoutes.rulesFilterCreator,
|
name: AppRoutes.rulesFilterCreator,
|
||||||
opaque: false,
|
opaque: false,
|
||||||
|
|||||||
@@ -0,0 +1,62 @@
|
|||||||
|
|
||||||
|
import 'package:core/utils/app_logger.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:get/get.dart';
|
||||||
|
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/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/mailbox_creator/presentation/mailbox_creator_bindings.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox_creator/presentation/mailbox_creator_view.dart';
|
||||||
|
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';
|
||||||
|
import 'package:tmail_ui_user/main/routes/app_routes.dart';
|
||||||
|
|
||||||
|
class DialogRouter {
|
||||||
|
|
||||||
|
static Future<dynamic> pushGeneralDialog({
|
||||||
|
required String routeName,
|
||||||
|
required Object? arguments
|
||||||
|
}) {
|
||||||
|
_bindingDI(routeName);
|
||||||
|
|
||||||
|
return Get.generalDialog(
|
||||||
|
routeSettings: RouteSettings(arguments: arguments),
|
||||||
|
pageBuilder: (_, __, ___) => _generateView(routeName: routeName, arguments: arguments)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void _bindingDI(String routeName) {
|
||||||
|
log('DialogRouter::_bindingDI():routeName: $routeName');
|
||||||
|
switch(routeName) {
|
||||||
|
case AppRoutes.mailboxCreator:
|
||||||
|
MailboxCreatorBindings().dependencies();
|
||||||
|
break;
|
||||||
|
case AppRoutes.rulesFilterCreator:
|
||||||
|
RulesFilterCreatorBindings().dependencies();
|
||||||
|
break;
|
||||||
|
case AppRoutes.identityCreator:
|
||||||
|
IdentityCreatorBindings().dependencies();
|
||||||
|
break;
|
||||||
|
case AppRoutes.destinationPicker:
|
||||||
|
DestinationPickerBindings().dependencies();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static Widget _generateView({required String routeName, required Object? arguments}) {
|
||||||
|
log('DialogRouter::_generateView():routeName: $routeName | arguments: $arguments');
|
||||||
|
switch(routeName) {
|
||||||
|
case AppRoutes.mailboxCreator:
|
||||||
|
return MailboxCreatorView();
|
||||||
|
case AppRoutes.rulesFilterCreator:
|
||||||
|
return RuleFilterCreatorView();
|
||||||
|
case AppRoutes.identityCreator:
|
||||||
|
return IdentityCreatorView();
|
||||||
|
case AppRoutes.destinationPicker:
|
||||||
|
return DestinationPickerView();
|
||||||
|
default:
|
||||||
|
return const SizedBox.shrink();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user