From 176fe120dd344e2c0e4882adf445c9cd301ce5c8 Mon Sep 17 00:00:00 2001 From: DatDang Date: Wed, 6 Nov 2024 11:54:45 +0700 Subject: [PATCH] TF-3236 Display SearchSnippet in search suggest --- .../views/text/rich_text_builder.dart | 3 + .../email_quick_search_item_tile_widget.dart | 113 +++++++++++------- .../widgets/search_input_form_widget.dart | 1 + .../email/presentation/search_email_view.dart | 1 + 4 files changed, 75 insertions(+), 43 deletions(-) diff --git a/core/lib/presentation/views/text/rich_text_builder.dart b/core/lib/presentation/views/text/rich_text_builder.dart index 8bab7a763..efd4518c6 100644 --- a/core/lib/presentation/views/text/rich_text_builder.dart +++ b/core/lib/presentation/views/text/rich_text_builder.dart @@ -8,6 +8,7 @@ class RichTextBuilder extends StatefulWidget { final TextStyle styleWord; final String? preMarkedText; final bool ensureHighlightVisible; + final bool? softWrap; const RichTextBuilder({ super.key, @@ -17,6 +18,7 @@ class RichTextBuilder extends StatefulWidget { required this.styleWord, this.preMarkedText, this.ensureHighlightVisible = false, + this.softWrap, }); @override @@ -63,6 +65,7 @@ class _RichTextBuilderState extends State with AutomaticKeepAli ), style: widget.styleOrigin, maxLines: 1, + softWrap: widget.softWrap, overflow: TextOverflow.ellipsis ); diff --git a/lib/features/mailbox_dashboard/presentation/widgets/quick_search/email_quick_search_item_tile_widget.dart b/lib/features/mailbox_dashboard/presentation/widgets/quick_search/email_quick_search_item_tile_widget.dart index 747efe687..3fbb7c7dd 100644 --- a/lib/features/mailbox_dashboard/presentation/widgets/quick_search/email_quick_search_item_tile_widget.dart +++ b/lib/features/mailbox_dashboard/presentation/widgets/quick_search/email_quick_search_item_tile_widget.dart @@ -7,6 +7,7 @@ import 'package:model/email/presentation_email.dart'; import 'package:model/extensions/presentation_email_extension.dart'; import 'package:model/extensions/presentation_mailbox_extension.dart'; import 'package:model/mailbox/presentation_mailbox.dart'; +import 'package:tmail_ui_user/features/thread/domain/model/search_query.dart'; class EmailQuickSearchItemTileWidget extends StatelessWidget { @@ -15,12 +16,14 @@ class EmailQuickSearchItemTileWidget extends StatelessWidget { final PresentationEmail _presentationEmail; final PresentationMailbox? _presentationMailbox; final EdgeInsetsGeometry? contentPadding; + final SearchQuery? searchQuery; EmailQuickSearchItemTileWidget( this._presentationEmail, this._presentationMailbox, { Key? key, this.contentPadding, + this.searchQuery, }) : super(key: key); @override @@ -46,54 +49,78 @@ class EmailQuickSearchItemTileWidget extends StatelessWidget { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Row(mainAxisAlignment: MainAxisAlignment.center, children: [ - Container( - constraints: BoxConstraints(maxWidth: maxWidthItem / 3), - child: Text(_getInformationSender(), - maxLines: 1, - overflow: CommonTextStyle.defaultTextOverFlow, - softWrap: CommonTextStyle.defaultSoftWrap, - style: const TextStyle( - fontSize: 15, - fontWeight: FontWeight.w600, - color: Colors.black)), - ), - const SizedBox(width: 16), - Expanded( - child: Text(_presentationEmail.getEmailTitle(), - maxLines: 1, - overflow: CommonTextStyle.defaultTextOverFlow, - softWrap: CommonTextStyle.defaultSoftWrap, - style: const TextStyle( - fontSize: 13, - fontWeight: FontWeight.normal, - color: Colors.black)), - ), - if (_presentationEmail.hasAttachment == true) - Padding( - padding: const EdgeInsets.symmetric(horizontal: 8), - child: SvgPicture.asset(imagePath.icAttachment, width: 14, height: 14, fit: BoxFit.fill), + Row(mainAxisAlignment: MainAxisAlignment.center, children: [ + Container( + constraints: BoxConstraints(maxWidth: maxWidthItem / 3), + child: RichTextBuilder( + textOrigin: _getInformationSender(), + wordToStyle: searchQuery?.value ?? '', + styleOrigin: const TextStyle( + fontSize: 15, + fontWeight: FontWeight.w600, + color: Colors.black, + ), + styleWord: TextStyle( + fontSize: 15, + fontWeight: FontWeight.w600, + color: Colors.black, + backgroundColor: Colors.amberAccent[200], + ), ), - Text(_presentationEmail.getReceivedAt(Localizations.localeOf(context).toLanguageTag()), - textAlign: TextAlign.right, - maxLines: 1, - overflow: CommonTextStyle.defaultTextOverFlow, - softWrap: CommonTextStyle.defaultSoftWrap, - style: const TextStyle( - fontSize: 13, - fontWeight: FontWeight.normal, - color: Colors.black)) - ]), - const SizedBox(height: 3), - Text(_presentationEmail.getPartialContent(), + ), + const SizedBox(width: 16), + Expanded( + child: RichTextBuilder( + textOrigin: _presentationEmail.getEmailTitle(), + wordToStyle: searchQuery?.value ?? '', + preMarkedText: _presentationEmail.sanitizedSearchSnippetSubject, + ensureHighlightVisible: true, + styleOrigin: const TextStyle( + fontSize: 13, + color: Colors.black, + fontWeight: FontWeight.normal + ), + styleWord: TextStyle( + fontSize: 13, + backgroundColor: Colors.amberAccent[200], + color: Colors.black, + fontWeight: FontWeight.normal + ) + ), + ), + if (_presentationEmail.hasAttachment == true) + Padding( + padding: const EdgeInsets.symmetric(horizontal: 8), + child: SvgPicture.asset(imagePath.icAttachment, width: 14, height: 14, fit: BoxFit.fill), + ), + Text(_presentationEmail.getReceivedAt(Localizations.localeOf(context).toLanguageTag()), + textAlign: TextAlign.right, maxLines: 1, overflow: CommonTextStyle.defaultTextOverFlow, softWrap: CommonTextStyle.defaultSoftWrap, style: const TextStyle( - fontSize: 13, - fontWeight: FontWeight.normal, - color: AppColor.colorContentEmail)) - ] + fontSize: 13, + fontWeight: FontWeight.normal, + color: Colors.black)) + ]), + const SizedBox(height: 3), + RichTextBuilder( + textOrigin: _presentationEmail.getPartialContent(), + wordToStyle: searchQuery?.value ?? '', + preMarkedText: _presentationEmail.sanitizedSearchSnippetPreview, + ensureHighlightVisible: true, + styleOrigin: const TextStyle( + fontSize: 13, + color: AppColor.colorContentEmail, + fontWeight: FontWeight.normal + ), + styleWord: TextStyle( + fontSize: 13, + color: AppColor.colorContentEmail, + backgroundColor: Colors.amberAccent[200], + ) + ), + ] ), ), ], diff --git a/lib/features/mailbox_dashboard/presentation/widgets/search_input_form_widget.dart b/lib/features/mailbox_dashboard/presentation/widgets/search_input_form_widget.dart index c022b085b..5f1c1e533 100644 --- a/lib/features/mailbox_dashboard/presentation/widgets/search_input_form_widget.dart +++ b/lib/features/mailbox_dashboard/presentation/widgets/search_input_form_widget.dart @@ -28,6 +28,7 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/qu 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/features/mailbox_dashboard/presentation/widgets/search_filters/search_filter_button.dart'; +import 'package:tmail_ui_user/features/thread/domain/model/search_query.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; import 'package:tmail_ui_user/main/utils/app_config.dart'; diff --git a/lib/features/search/email/presentation/search_email_view.dart b/lib/features/search/email/presentation/search_email_view.dart index 85017f160..264f741c8 100644 --- a/lib/features/search/email/presentation/search_email_view.dart +++ b/lib/features/search/email/presentation/search_email_view.dart @@ -33,6 +33,7 @@ import 'package:tmail_ui_user/features/search/email/presentation/widgets/email_s import 'package:tmail_ui_user/features/search/email/presentation/widgets/email_sort_by_cupertino_action_sheet_action_builder.dart'; import 'package:tmail_ui_user/features/search/email/presentation/widgets/empty_search_email_widget.dart'; import 'package:tmail_ui_user/features/search/email/presentation/widgets/search_email_loading_bar_widget.dart'; +import 'package:tmail_ui_user/features/thread/domain/model/search_query.dart'; import 'package:tmail_ui_user/features/thread/domain/state/search_more_email_state.dart'; import 'package:tmail_ui_user/features/thread/presentation/styles/item_email_tile_styles.dart'; import 'package:tmail_ui_user/features/thread/presentation/widgets/email_tile_builder.dart'