From 400a28ab591890921cc16432229d0dd458329e3d Mon Sep 17 00:00:00 2001 From: Mohit Date: Sat, 25 Jan 2025 12:02:19 +0530 Subject: [PATCH 1/2] Report isn't showing most recent chats until refreshed --- src/components/Search/index.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components/Search/index.tsx b/src/components/Search/index.tsx index 03b6c820da00..27ce4c24dcdb 100644 --- a/src/components/Search/index.tsx +++ b/src/components/Search/index.tsx @@ -215,7 +215,8 @@ function Search({queryJSON, onSearchListScroll, isSearchScreenFocused, contentCo transactions, previousTransactions, queryJSON, - offset, + // Set offset to 0 to retrieve the most recent chat messages. + offset: 0, reportActions, previousReportActions, }); From 45641833f15a494be9ceda4c4c7d301a74a14ed5 Mon Sep 17 00:00:00 2001 From: Mohit Date: Sat, 25 Jan 2025 14:54:10 +0530 Subject: [PATCH 2/2] Fix eslint issues --- src/components/Search/index.tsx | 67 +++++++++++++++++++-------------- 1 file changed, 38 insertions(+), 29 deletions(-) diff --git a/src/components/Search/index.tsx b/src/components/Search/index.tsx index 27ce4c24dcdb..7938fd598304 100644 --- a/src/components/Search/index.tsx +++ b/src/components/Search/index.tsx @@ -15,16 +15,25 @@ import useResponsiveLayout from '@hooks/useResponsiveLayout'; import useSearchHighlightAndScroll from '@hooks/useSearchHighlightAndScroll'; import useThemeStyles from '@hooks/useThemeStyles'; import {turnOffMobileSelectionMode, turnOnMobileSelectionMode} from '@libs/actions/MobileSelectionMode'; -import * as SearchActions from '@libs/actions/Search'; -import * as DeviceCapabilities from '@libs/DeviceCapabilities'; +import {createTransactionThread, search} from '@libs/actions/Search'; +import {canUseTouchScreen} from '@libs/DeviceCapabilities'; import Log from '@libs/Log'; import memoize from '@libs/memoize'; import isSearchTopmostCentralPane from '@libs/Navigation/isSearchTopmostCentralPane'; import type {PlatformStackNavigationProp} from '@libs/Navigation/PlatformStackNavigation/types'; -import * as ReportUtils from '@libs/ReportUtils'; -import * as SearchQueryUtils from '@libs/SearchQueryUtils'; -import * as SearchUIUtils from '@libs/SearchUIUtils'; -import * as TransactionUtils from '@libs/TransactionUtils'; +import {generateReportID} from '@libs/ReportUtils'; +import {buildSearchQueryString} from '@libs/SearchQueryUtils'; +import { + getListItem, + getSections, + getSortedSections, + isReportActionListItemType, + isReportListItemType, + isSearchResultsEmpty as isSearchResultsEmptyFromUiUtils, + isTransactionListItemType, + shouldShowYear as shouldShowYearFromUiUtils, +} from '@libs/SearchUIUtils'; +import {isOnHold} from '@libs/TransactionUtils'; import Navigation from '@navigation/Navigation'; import type {AuthScreensParamList} from '@navigation/types'; import EmptySearchView from '@pages/Search/EmptySearchView'; @@ -57,7 +66,7 @@ function mapTransactionItemToSelectedEntry(item: TransactionListItemType): [stri isSelected: true, canDelete: item.canDelete, canHold: item.canHold, - isHeld: TransactionUtils.isOnHold(item), + isHeld: isOnHold(item), canUnhold: item.canUnhold, action: item.action, reportID: item.reportID, @@ -77,14 +86,14 @@ function mapToItemWithSelectionInfo( canSelectMultiple: boolean, shouldAnimateInHighlight: boolean, ) { - if (SearchUIUtils.isReportActionListItemType(item)) { + if (isReportActionListItemType(item)) { return { ...item, shouldAnimateInHighlight, }; } - return SearchUIUtils.isTransactionListItemType(item) + return isTransactionListItemType(item) ? mapToTransactionItemWithSelectionInfo(item, selectedTransactions, canSelectMultiple, shouldAnimateInHighlight) : { ...item, @@ -107,7 +116,7 @@ function prepareTransactionsList(item: TransactionListItemType, selectedTransact isSelected: true, canDelete: item.canDelete, canHold: item.canHold, - isHeld: TransactionUtils.isOnHold(item), + isHeld: isOnHold(item), canUnhold: item.canUnhold, action: item.action, reportID: item.reportID, @@ -176,12 +185,12 @@ function Search({queryJSON, onSearchListScroll, isSearchScreenFocused, contentCo return; } - SearchActions.search({queryJSON, offset}); + search({queryJSON, offset}); }, [isOffline, offset, queryJSON]); const getItemHeight = useCallback( (item: TransactionListItemType | ReportListItemType | ReportActionListItemType) => { - if (SearchUIUtils.isTransactionListItemType(item) || SearchUIUtils.isReportActionListItemType(item)) { + if (isTransactionListItemType(item) || isReportActionListItemType(item)) { return isLargeScreenWidth ? variables.optionRowHeight + listItemPadding : transactionItemMobileHeight + listItemPadding; } @@ -230,14 +239,14 @@ function Search({queryJSON, onSearchListScroll, isSearchScreenFocused, contentCo const shouldShowLoadingState = !isOffline && !isDataLoaded; const shouldShowLoadingMoreItems = !shouldShowLoadingState && searchResults?.search?.isLoading && searchResults?.search?.offset > 0; - const isSearchResultsEmpty = !searchResults?.data || SearchUIUtils.isSearchResultsEmpty(searchResults); + const isSearchResultsEmpty = !searchResults?.data || isSearchResultsEmptyFromUiUtils(searchResults); const prevIsSearchResultEmpty = usePrevious(isSearchResultsEmpty); const data = useMemo(() => { if (searchResults === undefined) { return []; } - return SearchUIUtils.getSections(type, status, searchResults.data, searchResults.search); + return getSections(type, status, searchResults.data, searchResults.search); }, [searchResults, status, type]); useEffect(() => { @@ -261,7 +270,7 @@ function Search({queryJSON, onSearchListScroll, isSearchScreenFocused, contentCo newTransactionList[transaction.transactionID] = { action: transaction.action, canHold: transaction.canHold, - isHeld: TransactionUtils.isOnHold(transaction), + isHeld: isOnHold(transaction), canUnhold: transaction.canUnhold, isSelected: selectedTransactions[transaction.transactionID].isSelected, canDelete: transaction.canDelete, @@ -282,7 +291,7 @@ function Search({queryJSON, onSearchListScroll, isSearchScreenFocused, contentCo newTransactionList[transaction.transactionID] = { action: transaction.action, canHold: transaction.canHold, - isHeld: TransactionUtils.isOnHold(transaction), + isHeld: isOnHold(transaction), canUnhold: transaction.canUnhold, isSelected: selectedTransactions[transaction.transactionID].isSelected, canDelete: transaction.canDelete, @@ -329,8 +338,8 @@ function Search({queryJSON, onSearchListScroll, isSearchScreenFocused, contentCo return {null}; } - const ListItem = SearchUIUtils.getListItem(type, status); - const sortedData = SearchUIUtils.getSortedSections(type, status, data, sortBy, sortOrder); + const ListItem = getListItem(type, status); + const sortedData = getSortedSections(type, status, data, sortBy, sortOrder); const isChat = type === CONST.SEARCH.DATA_TYPES.CHAT; const sortedSelectedData = sortedData.map((item) => { const baseKey = isChat @@ -365,10 +374,10 @@ function Search({queryJSON, onSearchListScroll, isSearchScreenFocused, contentCo } const toggleTransaction = (item: TransactionListItemType | ReportListItemType | ReportActionListItemType) => { - if (SearchUIUtils.isReportActionListItemType(item)) { + if (isReportActionListItemType(item)) { return; } - if (SearchUIUtils.isTransactionListItemType(item)) { + if (isTransactionListItemType(item)) { if (!item.keyForList) { return; } @@ -399,21 +408,21 @@ function Search({queryJSON, onSearchListScroll, isSearchScreenFocused, contentCo const openReport = (item: TransactionListItemType | ReportListItemType | ReportActionListItemType) => { const isFromSelfDM = item.reportID === CONST.REPORT.UNREPORTED_REPORTID; - let reportID = SearchUIUtils.isTransactionListItemType(item) && (!item.isFromOneTransactionReport || isFromSelfDM) ? item.transactionThreadReportID : item.reportID; + let reportID = isTransactionListItemType(item) && (!item.isFromOneTransactionReport || isFromSelfDM) ? item.transactionThreadReportID : item.reportID; if (!reportID) { return; } // If we're trying to open a legacy transaction without a transaction thread, let's create the thread and navigate the user - if (SearchUIUtils.isTransactionListItemType(item) && reportID === '0' && item.moneyRequestReportActionID) { - reportID = ReportUtils.generateReportID(); - SearchActions.createTransactionThread(hash, item.transactionID, reportID, item.moneyRequestReportActionID); + if (isTransactionListItemType(item) && reportID === '0' && item.moneyRequestReportActionID) { + reportID = generateReportID(); + createTransactionThread(hash, item.transactionID, reportID, item.moneyRequestReportActionID); } const backTo = Navigation.getActiveRoute(); - if (SearchUIUtils.isReportActionListItemType(item)) { + if (isReportActionListItemType(item)) { const reportActionID = item.reportActionID; Navigation.navigate(ROUTES.SEARCH_REPORT.getRoute({reportID, reportActionID, backTo})); return; @@ -449,11 +458,11 @@ function Search({queryJSON, onSearchListScroll, isSearchScreenFocused, contentCo }; const onSortPress = (column: SearchColumnType, order: SortOrder) => { - const newQuery = SearchQueryUtils.buildSearchQueryString({...queryJSON, sortBy: column, sortOrder: order}); + const newQuery = buildSearchQueryString({...queryJSON, sortBy: column, sortOrder: order}); navigation.setParams({q: newQuery}); }; - const shouldShowYear = SearchUIUtils.shouldShowYear(searchResults?.data); + const shouldShowYear = shouldShowYearFromUiUtils(searchResults?.data); const shouldShowSorting = !Array.isArray(status) && sortableSearchStatuses.includes(status); return ( @@ -478,7 +487,7 @@ function Search({queryJSON, onSearchListScroll, isSearchScreenFocused, contentCo ) } isSelected={(item) => - status !== CONST.SEARCH.STATUS.EXPENSE.ALL && SearchUIUtils.isReportListItemType(item) + status !== CONST.SEARCH.STATUS.EXPENSE.ALL && isReportListItemType(item) ? item.transactions.some((transaction) => selectedTransactions[transaction.keyForList]?.isSelected) : !!item.isSelected } @@ -502,7 +511,7 @@ function Search({queryJSON, onSearchListScroll, isSearchScreenFocused, contentCo onSelectRow={openReport} getItemHeight={getItemHeightMemoized} shouldSingleExecuteRowSelect - shouldPreventDefaultFocusOnSelectRow={!DeviceCapabilities.canUseTouchScreen()} + shouldPreventDefaultFocusOnSelectRow={!canUseTouchScreen()} shouldPreventDefault={false} listHeaderWrapperStyle={[styles.ph8, styles.pt3]} containerStyle={[styles.pv0, type === CONST.SEARCH.DATA_TYPES.CHAT && !isSmallScreenWidth && styles.pt3]}