TF-831: add set forward to module

This commit is contained in:
ManhNTX
2022-08-19 00:55:08 +07:00
committed by Dat H. Pham
parent c44548884c
commit 0201242f3a
6 changed files with 188 additions and 3 deletions
@@ -0,0 +1,13 @@
import 'package:forward/forward/forward_id.dart';
import 'package:jmap_dart_client/jmap/core/id.dart';
import 'package:json_annotation/json_annotation.dart';
class ForwardIdNullableConverter implements JsonConverter<ForwardId?, String?> {
const ForwardIdNullableConverter();
@override
ForwardId? fromJson(String? json) => json != null ? ForwardId(id: Id(json)) : null;
@override
String? toJson(ForwardId? object) => object?.id.value;
}
+5 -3
View File
@@ -1,4 +1,5 @@
import 'package:forward/forward/converter/forward_id_coverter.dart';
import 'package:forward/forward/converter/forward_id_nullable_converter.dart';
import 'package:forward/forward/forward.dart';
import 'package:forward/forward/forward_id.dart';
import 'package:json_annotation/json_annotation.dart';
@@ -6,13 +7,14 @@ import 'package:json_annotation/json_annotation.dart';
part 'tmail_forward.g.dart';
@ForwardIdConverter()
@JsonSerializable()
@ForwardIdNullableConverter()
@JsonSerializable(explicitToJson: true, includeIfNull: false)
class TMailForward extends Forward {
final ForwardId id;
final ForwardId? id;
final bool localCopy;
final Set<String> forwards;
TMailForward({
required this.id,
this.id,
required this.localCopy,
required this.forwards,
});
@@ -0,0 +1,72 @@
import 'package:contact/data/datasource/auto_complete_datasource.dart';
import 'package:contact/data/datasource_impl/tmail_contact_datasource_impl.dart';
import 'package:contact/data/network/contact_api.dart';
import 'package:core/data/model/source_type/data_source_type.dart';
import 'package:get/get.dart';
import 'package:tmail_ui_user/features/base/base_bindings.dart';
import 'package:tmail_ui_user/features/mailbox/data/datasource/mailbox_datasource.dart';
import 'package:tmail_ui_user/features/mailbox/data/datasource/state_datasource.dart';
import 'package:tmail_ui_user/features/mailbox/data/datasource_impl/mailbox_cache_datasource_impl.dart';
import 'package:tmail_ui_user/features/mailbox/data/datasource_impl/state_datasource_impl.dart';
import 'package:tmail_ui_user/features/mailbox/data/repository/mailbox_repository_impl.dart';
import 'package:tmail_ui_user/features/mailbox/domain/repository/mailbox_repository.dart';
import 'package:tmail_ui_user/features/mailbox/domain/usecases/get_all_mailbox_interactor.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_tree_builder.dart';
import 'package:tmail_ui_user/features/mailbox_creator/domain/usecases/verify_name_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/bindings/autocomplete_bindings.dart';
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/rules_filter_creator_controller.dart';
class MailsForwardCreatorBindings extends BaseBindings {
@override
void dependencies() {
_bindingsUtils();
super.dependencies();
}
void _bindingsUtils() {
Get.lazyPut(() => AutoCompleteBindings());
}
@override
void bindingsController() {
Get.lazyPut(() => RulesFilterCreatorController(
Get.find<VerifyNameInteractor>(),
Get.find<GetAllMailboxInteractor>(),
Get.find<TreeBuilder>()
));
}
@override
void bindingsDataSource() {
Get.lazyPut<AutoCompleteDataSource>(() => Get.find<TMailContactDataSourceImpl>());
Get.lazyPut<StateDataSource>(() => Get.find<StateDataSourceImpl>());
}
@override
void bindingsDataSourceImpl() {
Get.lazyPut(() => TMailContactDataSourceImpl(Get.find<ContactAPI>()));
}
@override
void bindingsInteractor() {
Get.lazyPut(() => VerifyNameInteractor());
Get.lazyPut(() => GetAllMailboxInteractor(Get.find<MailboxRepository>()));
}
@override
void bindingsRepository() {
Get.lazyPut<MailboxRepository>(() => Get.find<MailboxRepositoryImpl>());
}
@override
void bindingsRepositoryImpl() {
Get.lazyPut(() => MailboxRepositoryImpl(
{
DataSourceType.network: Get.find<MailboxDataSource>(),
DataSourceType.local: Get.find<MailboxCacheDataSourceImpl>()
},
Get.find<StateDataSource>(),
));
}
}
@@ -0,0 +1,86 @@
import 'package:core/utils/app_logger.dart';
import 'package:flutter/cupertino.dart';
import 'package:get/get.dart';
import 'package:jmap_dart_client/jmap/account_id.dart';
import 'package:jmap_dart_client/jmap/mail/email/email_address.dart';
import 'package:model/model.dart';
import 'package:tmail_ui_user/features/base/base_controller.dart';
import 'package:tmail_ui_user/features/composer/domain/model/contact_suggestion_source.dart';
import 'package:tmail_ui_user/features/composer/domain/state/get_autocomplete_state.dart';
import 'package:tmail_ui_user/features/composer/domain/usecases/get_autocomplete_interactor.dart';
import 'package:tmail_ui_user/features/composer/domain/usecases/get_autocomplete_with_device_contact_interactor.dart';
import 'package:tmail_ui_user/features/mails_forward_creator/presentation/model/mails_forward_creator_arguments.dart';
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
class RulesFilterCreatorController extends BaseController {
final inputEmailForwardController = TextEditingController();
final ContactSuggestionSource _contactSuggestionSource = ContactSuggestionSource.tMailContact;
late AccountId _accountId;
late GetAutoCompleteWithDeviceContactInteractor _getAutoCompleteWithDeviceContactInteractor;
late GetAutoCompleteInteractor _getAutoCompleteInteractor;
final listEmailForwards = <String>[].obs;
RulesFilterCreatorController(
this._getAutoCompleteWithDeviceContactInteractor,
this._getAutoCompleteInteractor,
);
@override
void onReady() {
_getArguments();
super.onReady();
}
@override
void onClose() {
inputEmailForwardController.dispose();
super.onClose();
}
@override
void onDone() {}
@override
void onError(error) {}
void _getArguments() {
final arguments = Get.arguments;
if (arguments is MailsForwardCreatorArguments) {
_accountId = arguments.accountId;
}
}
Future<List<EmailAddress>> getAutoCompleteSuggestion(
{required String word}) async {
log('ComposerController::getAutoCompleteSuggestion(): $word | $_contactSuggestionSource');
_getAutoCompleteWithDeviceContactInteractor = Get.find<GetAutoCompleteWithDeviceContactInteractor>();
_getAutoCompleteInteractor = Get.find<GetAutoCompleteInteractor>();
if (_contactSuggestionSource == ContactSuggestionSource.all) {
return await _getAutoCompleteWithDeviceContactInteractor
.execute(AutoCompletePattern(word: word, accountId: _accountId))
.then((value) => value.fold(
(failure) => <EmailAddress>[],
(success) => success is GetAutoCompleteSuccess ? success.listEmailAddress : <EmailAddress>[]));
}
return await _getAutoCompleteInteractor
.execute(AutoCompletePattern(word: word, accountId: _accountId))
.then((value) => value.fold(
(failure) => <EmailAddress>[],
(success) => success is GetAutoCompleteSuccess ? success.listEmailAddress : <EmailAddress>[]));
}
void _clearAll() {
inputEmailForwardController.clear();
}
void closeView(BuildContext context) {
FocusScope.of(context).unfocus();
popBack();
}
}
@@ -0,0 +1,12 @@
import 'package:equatable/equatable.dart';
import 'package:jmap_dart_client/jmap/account_id.dart';
class MailsForwardCreatorArguments with EquatableMixin {
final AccountId accountId;
MailsForwardCreatorArguments(this.accountId);
@override
List<Object?> get props => [accountId];
}