From fa8aff78a76542af3d5caff3f94b5cc0ac5efb19 Mon Sep 17 00:00:00 2001 From: dab246 Date: Thu, 12 May 2022 12:42:32 +0700 Subject: [PATCH] TF-548 Add AutoComplete method/response for TMailContact --- .../autocomplete_tmail_contact_method.dart | 53 +++++++++++++++++++ .../autocomplete_tmail_contact_response.dart | 33 ++++++++++++ contact/lib/contact_module.dart | 8 +++ 3 files changed, 94 insertions(+) create mode 100644 contact/lib/contact/autocomplete/autocomplete_tmail_contact_method.dart create mode 100644 contact/lib/contact/autocomplete/autocomplete_tmail_contact_response.dart create mode 100644 contact/lib/contact_module.dart diff --git a/contact/lib/contact/autocomplete/autocomplete_tmail_contact_method.dart b/contact/lib/contact/autocomplete/autocomplete_tmail_contact_method.dart new file mode 100644 index 000000000..f37fd36d0 --- /dev/null +++ b/contact/lib/contact/autocomplete/autocomplete_tmail_contact_method.dart @@ -0,0 +1,53 @@ +import 'package:contact/contact/model/contact_filter.dart'; +import 'package:contact/core/method/request/autocomplete_method.dart'; +import 'package:jmap_dart_client/http/converter/account_id_converter.dart'; +import 'package:jmap_dart_client/http/converter/unsigned_int_nullable_converter.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/request/request_invocation.dart'; + +class AutoCompleteTMailContactMethod extends AutoCompleteMethod { + + AutoCompleteTMailContactMethod( + AccountId accountId, + ContactFilter filter + ) : super(accountId, filter); + + @override + MethodName get methodName => MethodName('TMailContact/autocomplete'); + + @override + Set get requiredCapabilities => { + CapabilityIdentifier.jmapCore, + CapabilityIdentifier(Uri.parse('com:linagora:params:jmap:contact:autocomplete')) + }; + + factory AutoCompleteTMailContactMethod.fromJson(Map json) { + return AutoCompleteTMailContactMethod( + const AccountIdConverter().fromJson(json['accountId'] as String), + ContactFilter.fromJson(json['filter'] as Map), + ) + ..limit = const UnsignedIntNullableConverter().fromJson(json['limit'] as int?); + } + + @override + Map toJson() { + final val = { + 'accountId': const AccountIdConverter().toJson(accountId), + }; + + void writeNotNull(String key, dynamic value) { + if (value != null) { + val[key] = value; + } + } + + writeNotNull( + 'limit', const UnsignedIntNullableConverter().toJson(limit)); + val['filter'] = filter.toJson(); + return val; + } + + @override + List get props => [methodName, accountId, limit, filter]; +} \ No newline at end of file diff --git a/contact/lib/contact/autocomplete/autocomplete_tmail_contact_response.dart b/contact/lib/contact/autocomplete/autocomplete_tmail_contact_response.dart new file mode 100644 index 000000000..6c5382a5e --- /dev/null +++ b/contact/lib/contact/autocomplete/autocomplete_tmail_contact_response.dart @@ -0,0 +1,33 @@ +import 'package:contact/contact/model/tmail_contact.dart'; +import 'package:contact/core/method/response/autocomplete_response.dart'; +import 'package:jmap_dart_client/http/converter/account_id_converter.dart'; +import 'package:jmap_dart_client/http/converter/unsigned_int_nullable_converter.dart'; +import 'package:jmap_dart_client/jmap/account_id.dart'; +import 'package:jmap_dart_client/jmap/core/unsigned_int.dart'; +import 'package:json_annotation/json_annotation.dart'; + +part 'autocomplete_tmail_contact_response.g.dart'; + +@UnsignedIntNullableConverter() +@AccountIdConverter() +@JsonSerializable() +class AutoCompleteTMailContactResponse extends AutoCompleteResponse { + + AutoCompleteTMailContactResponse( + AccountId accountId, + List list, + UnsignedInt? limit + ) : super(accountId, list, limit); + + factory AutoCompleteTMailContactResponse.fromJson(Map json) => + _$AutoCompleteTMailContactResponseFromJson(json); + + static AutoCompleteTMailContactResponse deserialize(Map json) { + return AutoCompleteTMailContactResponse.fromJson(json); + } + + Map toJson() => _$AutoCompleteTMailContactResponseToJson(this); + + @override + List get props => [accountId, list, limit]; +} \ No newline at end of file diff --git a/contact/lib/contact_module.dart b/contact/lib/contact_module.dart new file mode 100644 index 000000000..bf83882c6 --- /dev/null +++ b/contact/lib/contact_module.dart @@ -0,0 +1,8 @@ +library contact_module; + +export 'package:contact/contact/model/contact.dart'; +export 'package:contact/contact/model/contact_filter.dart'; +export 'package:contact/contact/model/tmail_contact.dart'; + +export 'package:contact/contact/autocomplete/autocomplete_tmail_contact_method.dart'; +export 'package:contact/contact/autocomplete/autocomplete_tmail_contact_response.dart'; \ No newline at end of file