From bd54ac22b927c68b4ed8c744892d28f37c913604 Mon Sep 17 00:00:00 2001 From: dab246 Date: Tue, 21 Sep 2021 15:23:01 +0700 Subject: [PATCH] TF-60 Add data get device contact suggestion --- .../data/datasource/contact_datasource.dart | 7 ++++++ .../contact_datasource_impl.dart | 22 +++++++++++++++++++ .../repository/contact_repository_impl.dart | 17 ++++++++++++++ 3 files changed, 46 insertions(+) create mode 100644 lib/features/composer/data/datasource/contact_datasource.dart create mode 100644 lib/features/composer/data/datasource_impl/contact_datasource_impl.dart create mode 100644 lib/features/composer/data/repository/contact_repository_impl.dart diff --git a/lib/features/composer/data/datasource/contact_datasource.dart b/lib/features/composer/data/datasource/contact_datasource.dart new file mode 100644 index 000000000..b8f9cf517 --- /dev/null +++ b/lib/features/composer/data/datasource/contact_datasource.dart @@ -0,0 +1,7 @@ + +import 'package:model/model.dart'; +import 'package:tmail_ui_user/features/composer/domain/model/auto_complete_pattern.dart'; + +abstract class ContactDataSource { + Future> getContactSuggestions(AutoCompletePattern autoCompletePattern); +} \ No newline at end of file diff --git a/lib/features/composer/data/datasource_impl/contact_datasource_impl.dart b/lib/features/composer/data/datasource_impl/contact_datasource_impl.dart new file mode 100644 index 000000000..a28d399ce --- /dev/null +++ b/lib/features/composer/data/datasource_impl/contact_datasource_impl.dart @@ -0,0 +1,22 @@ + +import 'package:contacts_service/contacts_service.dart' as contact_service; +import 'package:model/model.dart'; +import 'package:tmail_ui_user/features/composer/data/datasource/contact_datasource.dart'; +import 'package:tmail_ui_user/features/composer/domain/model/auto_complete_pattern.dart'; + +class ContactDataSourceImpl extends ContactDataSource { + + @override + Future> getContactSuggestions(AutoCompletePattern autoCompletePattern) async { + final suggestedList = await contact_service.ContactsService + .getContactsByEmailOrName(autoCompletePattern.word ?? ''); + return suggestedList.expand((contact) => _toDeviceContact(contact)).toList(); + } + + List _toDeviceContact(contact_service.Contact contact) { + if (contact.emails != null) { + return contact.emails!.map((email) => DeviceContact(contact.displayName ?? '', email.value ?? '')).toList(); + } + return []; + } +} \ No newline at end of file diff --git a/lib/features/composer/data/repository/contact_repository_impl.dart b/lib/features/composer/data/repository/contact_repository_impl.dart new file mode 100644 index 000000000..631c1338e --- /dev/null +++ b/lib/features/composer/data/repository/contact_repository_impl.dart @@ -0,0 +1,17 @@ + + +import 'package:model/model.dart'; +import 'package:tmail_ui_user/features/composer/data/datasource/contact_datasource.dart'; +import 'package:tmail_ui_user/features/composer/domain/model/auto_complete_pattern.dart'; +import 'package:tmail_ui_user/features/composer/domain/repository/contact_repository.dart'; + +class ContactRepositoryImpl implements ContactRepository { + final ContactDataSource _contactDataSource; + + ContactRepositoryImpl(this._contactDataSource); + + @override + Future> getContactSuggestions(AutoCompletePattern autoCompletePattern) { + return _contactDataSource.getContactSuggestions(autoCompletePattern); + } +} \ No newline at end of file