TF-3236 Display SearchSnippet in search result

This commit is contained in:
DatDang
2024-11-01 17:11:59 +07:00
committed by Dat H. Pham
parent 9c1d991c74
commit 60cb85d187
8 changed files with 168 additions and 19 deletions
@@ -51,6 +51,7 @@ class SearchController extends BaseController with DateRangePickerMixin {
SearchQuery? get searchQuery => searchEmailFilter.value.text;
FocusNode searchFocus = FocusNode();
String currentSearchText = '';
SearchController(
this._quickSearchEmailInteractor,
@@ -89,6 +90,7 @@ class SearchController extends BaseController with DateRangePickerMixin {
required AccountId accountId,
required String query,
}) async {
currentSearchText = query;
return await _quickSearchEmailInteractor.execute(
session,
accountId,
@@ -121,7 +121,10 @@ class SearchInputFormWidget extends StatelessWidget with AppLoaderMixin {
itemRecentBuilder: (context, recent) => RecentSearchItemTileWidget(recent),
onRecentSelected: _invokeSelectRecentItem,
suggestionsCallback: _dashBoardController.quickSearchEmails,
itemBuilder: (context, email) => EmailQuickSearchItemTileWidget(email, _dashBoardController.selectedMailbox.value),
itemBuilder: (context, email) => EmailQuickSearchItemTileWidget(
email,
_dashBoardController.selectedMailbox.value,
searchQuery: SearchQuery(_searchController.currentSearchText.trim())),
onSuggestionSelected: _invokeSelectSuggestionItem,
contactItemBuilder: (context, emailAddress) => ContactQuickSearchItem(emailAddress: emailAddress),
contactSuggestionsCallback: _dashBoardController.getContactSuggestion,
@@ -576,6 +576,7 @@ class SearchEmailView extends GetWidget<SearchEmailController>
child: EmailQuickSearchItemTileWidget(
listSuggestionSearch[index],
controller.currentMailbox,
searchQuery: SearchQuery(controller.currentSearchText.value.trim()),
contentPadding: SearchEmailViewStyle.getSearchSuggestionListPadding(
context,
controller.responsiveUtils
@@ -626,7 +627,8 @@ class SearchEmailView extends GetWidget<SearchEmailController>
onNotification: (ScrollNotification scrollInfo) {
if (scrollInfo is ScrollEndNotification
&& controller.searchMoreState != SearchMoreState.waiting
&& scrollInfo.metrics.pixels == scrollInfo.metrics.maxScrollExtent) {
&& scrollInfo.metrics.pixels == scrollInfo.metrics.maxScrollExtent
&& scrollInfo.metrics.axisDirection == AxisDirection.down) {
controller.searchMoreEmailsAction();
}
return false;
@@ -122,6 +122,8 @@ mixin BaseEmailItemTile {
return RichTextBuilder(
textOrigin: email.getEmailTitle(),
wordToStyle: query?.value ?? '',
preMarkedText: email.sanitizedSearchSnippetSubject,
ensureHighlightVisible: true,
styleOrigin: TextStyle(
fontSize: 13,
color: buildTextColorForReadEmail(email),
@@ -155,6 +157,8 @@ mixin BaseEmailItemTile {
return RichTextBuilder(
textOrigin: email.getPartialContent(),
wordToStyle: query?.value ?? '',
preMarkedText: email.sanitizedSearchSnippetPreview,
ensureHighlightVisible: true,
styleOrigin: const TextStyle(
fontSize: 13,
color: AppColor.colorContentEmail,
@@ -425,7 +425,8 @@ class ThreadView extends GetWidget<ThreadController>
bool _handleScrollNotificationListener(ScrollNotification scrollInfo) {
if (scrollInfo is ScrollEndNotification &&
scrollInfo.metrics.pixels == scrollInfo.metrics.maxScrollExtent &&
!controller.loadingMoreStatus.value.isRunning
!controller.loadingMoreStatus.value.isRunning &&
scrollInfo.metrics.axisDirection == AxisDirection.down
) {
controller.handleLoadMoreEmailsRequest();
}