TF-548 Add AutoComplete method/response for TMailContact

This commit is contained in:
dab246
2022-05-12 12:42:32 +07:00
committed by Dat H. Pham
parent 41e50c0a98
commit fa8aff78a7
3 changed files with 94 additions and 0 deletions
@@ -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<CapabilityIdentifier> get requiredCapabilities => {
CapabilityIdentifier.jmapCore,
CapabilityIdentifier(Uri.parse('com:linagora:params:jmap:contact:autocomplete'))
};
factory AutoCompleteTMailContactMethod.fromJson(Map<String, dynamic> json) {
return AutoCompleteTMailContactMethod(
const AccountIdConverter().fromJson(json['accountId'] as String),
ContactFilter.fromJson(json['filter'] as Map<String, dynamic>),
)
..limit = const UnsignedIntNullableConverter().fromJson(json['limit'] as int?);
}
@override
Map<String, dynamic> toJson() {
final val = <String, dynamic>{
'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<Object?> get props => [methodName, accountId, limit, filter];
}
@@ -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<TMailContact> {
AutoCompleteTMailContactResponse(
AccountId accountId,
List<TMailContact> list,
UnsignedInt? limit
) : super(accountId, list, limit);
factory AutoCompleteTMailContactResponse.fromJson(Map<String, dynamic> json) =>
_$AutoCompleteTMailContactResponseFromJson(json);
static AutoCompleteTMailContactResponse deserialize(Map<String, dynamic> json) {
return AutoCompleteTMailContactResponse.fromJson(json);
}
Map<String, dynamic> toJson() => _$AutoCompleteTMailContactResponseToJson(this);
@override
List<Object?> get props => [accountId, list, limit];
}
+8
View File
@@ -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';