TF-2198 Implement get autocomplete contact in quick search
(cherry picked from commit 060056aa5d091d92b17faf308c9a1e055c3b0e0e)
This commit is contained in:
+59
@@ -0,0 +1,59 @@
|
||||
|
||||
import 'package:core/presentation/extensions/color_extension.dart';
|
||||
import 'package:core/presentation/utils/style_utils.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email_address.dart';
|
||||
import 'package:model/extensions/email_address_extension.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/advanced_search/avatar_suggestion_item_widget.dart';
|
||||
|
||||
class ContactQuickSearchItem extends StatelessWidget {
|
||||
final EmailAddress emailAddress;
|
||||
|
||||
const ContactQuickSearchItem({
|
||||
super.key,
|
||||
required this.emailAddress,
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8),
|
||||
child: Row(
|
||||
children: [
|
||||
AvatarSuggestionItemWidget(emailAddress: emailAddress),
|
||||
const SizedBox(width: 12),
|
||||
Expanded(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
emailAddress.asString(),
|
||||
maxLines: 1,
|
||||
softWrap: CommonTextStyle.defaultSoftWrap,
|
||||
overflow: CommonTextStyle.defaultTextOverFlow,
|
||||
style: const TextStyle(
|
||||
color: Colors.black,
|
||||
fontSize: 16,
|
||||
fontWeight: FontWeight.normal
|
||||
)
|
||||
),
|
||||
if (emailAddress.displayName.isNotEmpty)
|
||||
Text(
|
||||
emailAddress.emailAddress,
|
||||
maxLines: 1,
|
||||
softWrap: CommonTextStyle.defaultSoftWrap,
|
||||
overflow: CommonTextStyle.defaultTextOverFlow,
|
||||
style: const TextStyle(
|
||||
color: AppColor.colorHintSearchBar,
|
||||
fontSize: 13,
|
||||
fontWeight: FontWeight.normal
|
||||
)
|
||||
)
|
||||
],
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -9,6 +9,7 @@ import 'package:flutter/material.dart';
|
||||
import 'package:flutter_portal/flutter_portal.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email_address.dart';
|
||||
import 'package:model/email/presentation_email.dart';
|
||||
import 'package:pointer_interceptor/pointer_interceptor.dart';
|
||||
import 'package:tmail_ui_user/features/base/mixin/app_loader_mixin.dart';
|
||||
@@ -18,8 +19,9 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/quick_search_filter.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/advanced_search/advanced_search_filter_overlay.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/advanced_search/icon_open_advanced_search_widget.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/email_quick_search_item_tile_widget.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/recent_search_item_tile_widget.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/quick_search/contact_quick_search_item.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/quick_search/email_quick_search_item_tile_widget.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/quick_search/recent_search_item_tile_widget.dart';
|
||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||
import 'package:tmail_ui_user/main/utils/app_utils.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/search_controller.dart' as search;
|
||||
@@ -55,7 +57,7 @@ class SearchInputFormWidget extends StatelessWidget with AppLoaderMixin {
|
||||
),
|
||||
),
|
||||
portalFollower: const AdvancedSearchFilterOverlay(),
|
||||
child: QuickSearchInputForm<PresentationEmail, RecentSearch>(
|
||||
child: QuickSearchInputForm<PresentationEmail, EmailAddress, RecentSearch>(
|
||||
maxHeight: 52,
|
||||
suggestionsBoxVerticalOffset: 0.0,
|
||||
textFieldConfiguration: _createConfiguration(context),
|
||||
@@ -105,7 +107,11 @@ class SearchInputFormWidget extends StatelessWidget with AppLoaderMixin {
|
||||
onRecentSelected: (recent) => _invokeSelectRecentItem(context, recent),
|
||||
suggestionsCallback: _dashBoardController.quickSearchEmails,
|
||||
itemBuilder: (context, email) => EmailQuickSearchItemTileWidget(email, _dashBoardController.selectedMailbox.value),
|
||||
onSuggestionSelected: (presentationEmail) => _invokeSelectSuggestionItem(context, presentationEmail))
|
||||
onSuggestionSelected: (presentationEmail) => _invokeSelectSuggestionItem(context, presentationEmail),
|
||||
contactItemBuilder: (context, emailAddress) => ContactQuickSearchItem(emailAddress: emailAddress),
|
||||
contactSuggestionsCallback: _dashBoardController.getContactSuggestion,
|
||||
onContactSuggestionSelected: (emailAddress) => _invokeSelectContactSuggestion(context, emailAddress),
|
||||
)
|
||||
),
|
||||
);
|
||||
});
|
||||
@@ -246,4 +252,11 @@ class SearchInputFormWidget extends StatelessWidget with AppLoaderMixin {
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
void _invokeSelectContactSuggestion(BuildContext context, EmailAddress emailAddress) {
|
||||
_searchController.searchInputController.clear();
|
||||
_searchController.searchFocus.unfocus();
|
||||
_searchController.enableSearch();
|
||||
_dashBoardController.searchEmailByFromFields(context, emailAddress);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user