@@ -16,7 +16,6 @@ import {useMemoizedLazyExpensifyIcons} from '@hooks/useLazyAsset';
1616import useLocalize from '@hooks/useLocalize' ;
1717import useNetwork from '@hooks/useNetwork' ;
1818import useOnyx from '@hooks/useOnyx' ;
19- import usePolicyForMovingExpenses from '@hooks/usePolicyForMovingExpenses' ;
2019import usePrevious from '@hooks/usePrevious' ;
2120import useReportAttributes from '@hooks/useReportAttributes' ;
2221import useRootNavigationState from '@hooks/useRootNavigationState' ;
@@ -25,15 +24,14 @@ import useTheme from '@hooks/useTheme';
2524import useThemeStyles from '@hooks/useThemeStyles' ;
2625import getPlatform from '@libs/getPlatform' ;
2726import Log from '@libs/Log' ;
28- import { getMovedReportID } from '@libs/ModifiedExpenseMessage' ;
29- import { getIOUReportIDOfLastAction , getLastMessageTextForReport } from '@libs/OptionsListUtils' ;
30- import { findLastReportActions , getOriginalMessage , isInviteOrRemovedAction , isMoneyRequestAction } from '@libs/ReportActionsUtils' ;
27+ import { getIOUReportIDOfLastAction } from '@libs/OptionsListUtils' ;
28+ import { getLastVisibleActionIncludingTransactionThread , getOriginalMessage , isActionableTrackExpense , isInviteOrRemovedAction , isMoneyRequestAction } from '@libs/ReportActionsUtils' ;
3129import { canUserPerformWriteAction as canUserPerformWriteActionUtil } from '@libs/ReportUtils' ;
3230import variables from '@styles/variables' ;
3331import CONST from '@src/CONST' ;
3432import NAVIGATORS from '@src/NAVIGATORS' ;
3533import ONYXKEYS from '@src/ONYXKEYS' ;
36- import type { PersonalDetails , Report } from '@src/types/onyx' ;
34+ import type { Report } from '@src/types/onyx' ;
3735import { isEmptyObject } from '@src/types/utils/EmptyObject' ;
3836import OptionRowLHNData from './OptionRowLHNData' ;
3937import OptionRowRendererComponent from './OptionRowRendererComponent' ;
@@ -53,7 +51,6 @@ function LHNOptionsList({style, contentContainerStyles, data, onSelectRow, optio
5351 const [ reports ] = useOnyx ( ONYXKEYS . COLLECTION . REPORT ) ;
5452 const reportAttributes = useReportAttributes ( ) ;
5553 const [ reportNameValuePairs ] = useOnyx ( ONYXKEYS . COLLECTION . REPORT_NAME_VALUE_PAIRS ) ;
56- const [ reportMetadataCollection ] = useOnyx ( ONYXKEYS . COLLECTION . REPORT_METADATA ) ;
5754 const [ reportActions ] = useOnyx ( ONYXKEYS . COLLECTION . REPORT_ACTIONS ) ;
5855 const [ policy ] = useOnyx ( ONYXKEYS . COLLECTION . POLICY ) ;
5956 const [ personalDetails ] = useOnyx ( ONYXKEYS . PERSONAL_DETAILS_LIST ) ;
@@ -64,8 +61,8 @@ function LHNOptionsList({style, contentContainerStyles, data, onSelectRow, optio
6461 const [ introSelected ] = useOnyx ( ONYXKEYS . NVP_INTRO_SELECTED ) ;
6562 const [ onboarding ] = useOnyx ( ONYXKEYS . NVP_ONBOARDING ) ;
6663 const [ isFullscreenVisible ] = useOnyx ( ONYXKEYS . FULLSCREEN_VISIBILITY ) ;
64+ const [ visibleReportActionsData ] = useOnyx ( ONYXKEYS . DERIVED . VISIBLE_REPORT_ACTIONS ) ;
6765 const { accountID : currentUserAccountID } = useCurrentUserPersonalDetails ( ) ;
68- const { policyForMovingExpensesID} = usePolicyForMovingExpenses ( ) ;
6966
7067 const theme = useTheme ( ) ;
7168 const styles = useThemeStyles ( ) ;
@@ -184,9 +181,6 @@ function LHNOptionsList({style, contentContainerStyles, data, onSelectRow, optio
184181 }
185182 const itemInvoiceReceiverPolicy = policy ?. [ `${ ONYXKEYS . COLLECTION . POLICY } ${ invoiceReceiverPolicyID } ` ] ;
186183
187- const iouReportIDOfLastAction = getIOUReportIDOfLastAction ( item ) ;
188- const itemIouReportReportActions = iouReportIDOfLastAction ? reportActions ?. [ `${ ONYXKEYS . COLLECTION . REPORT_ACTIONS } ${ iouReportIDOfLastAction } ` ] : undefined ;
189-
190184 const itemPolicy = policy ?. [ `${ ONYXKEYS . COLLECTION . POLICY } ${ item ?. policyID } ` ] ;
191185 const transactionID = isMoneyRequestAction ( itemParentReportAction )
192186 ? ( getOriginalMessage ( itemParentReportAction ) ?. IOUTransactionID ?? CONST . DEFAULT_NUMBER_ID )
@@ -198,42 +192,29 @@ function LHNOptionsList({style, contentContainerStyles, data, onSelectRow, optio
198192
199193 const isReportArchived = ! ! itemReportNameValuePairs ?. private_isArchived ;
200194 const canUserPerformWrite = canUserPerformWriteActionUtil ( item , isReportArchived ) ;
201- const { lastVisibleAction : lastReportAction , lastActionForDisplay : lastAction } = findLastReportActions ( itemReportActions , canUserPerformWrite ) ;
202195
203- // Get the transaction for the last report action
204- const lastReportActionTransactionID = isMoneyRequestAction ( lastReportAction )
205- ? ( getOriginalMessage ( lastReportAction ) ?. IOUTransactionID ?? CONST . DEFAULT_NUMBER_ID )
206- : CONST . DEFAULT_NUMBER_ID ;
196+ const lastAction = getLastVisibleActionIncludingTransactionThread (
197+ reportID ,
198+ canUserPerformWrite ,
199+ reportActions ,
200+ visibleReportActionsData ,
201+ itemOneTransactionThreadReport ?. reportID ,
202+ ) ;
203+
204+ const iouReportIDOfLastAction = getIOUReportIDOfLastAction ( item , visibleReportActionsData , lastAction ) ;
205+ const itemIouReportReportActions = iouReportIDOfLastAction ? reportActions ?. [ `${ ONYXKEYS . COLLECTION . REPORT_ACTIONS } ${ iouReportIDOfLastAction } ` ] : undefined ;
206+
207+ const lastReportActionTransactionID = isMoneyRequestAction ( lastAction ) ? ( getOriginalMessage ( lastAction ) ?. IOUTransactionID ?? CONST . DEFAULT_NUMBER_ID ) : CONST . DEFAULT_NUMBER_ID ;
207208 const lastReportActionTransaction = transactions ?. [ `${ ONYXKEYS . COLLECTION . TRANSACTION } ${ lastReportActionTransactionID } ` ] ;
208209
209- // SidebarUtils.getOptionData in OptionRowLHNData does not get re-evaluated when the linked task report changes, so we have the lastMessageTextFromReport evaluation logic here
210- let lastActorDetails : Partial < PersonalDetails > | null = item ?. lastActorAccountID && personalDetails ?. [ item . lastActorAccountID ] ? personalDetails [ item . lastActorAccountID ] : null ;
211- if ( ! lastActorDetails && lastReportAction ) {
212- const lastActorDisplayName = lastReportAction ?. person ?. [ 0 ] ?. text ;
213- lastActorDetails = lastActorDisplayName
214- ? {
215- displayName : lastActorDisplayName ,
216- accountID : item ?. lastActorAccountID ,
217- }
218- : null ;
210+ // Only override lastMessageTextFromReport when a track expense whisper's transaction has been deleted, to prevent showing stale text.
211+ let lastMessageTextFromReport : string | undefined ;
212+ if ( isActionableTrackExpense ( lastAction ) ) {
213+ const whisperTransactionID = getOriginalMessage ( lastAction ) ?. transactionID ;
214+ if ( whisperTransactionID && ! transactions ?. [ `${ ONYXKEYS . COLLECTION . TRANSACTION } ${ whisperTransactionID } ` ] ) {
215+ lastMessageTextFromReport = '' ;
216+ }
219217 }
220- const movedFromReport = reports ?. [ `${ ONYXKEYS . COLLECTION . REPORT } ${ getMovedReportID ( lastReportAction , CONST . REPORT . MOVE_TYPE . FROM ) } ` ] ;
221- const movedToReport = reports ?. [ `${ ONYXKEYS . COLLECTION . REPORT } ${ getMovedReportID ( lastReportAction , CONST . REPORT . MOVE_TYPE . TO ) } ` ] ;
222- const chatReport = reports ?. [ `${ ONYXKEYS . COLLECTION . REPORT } ${ item ?. chatReportID } ` ] ;
223- const itemReportMetadata = reportMetadataCollection ?. [ `${ ONYXKEYS . COLLECTION . REPORT_METADATA } ${ reportID } ` ] ;
224- const lastMessageTextFromReport = getLastMessageTextForReport ( {
225- translate,
226- report : item ,
227- lastActorDetails,
228- movedFromReport,
229- movedToReport,
230- policy : itemPolicy ,
231- isReportArchived : ! ! itemReportNameValuePairs ?. private_isArchived ,
232- policyForMovingExpensesID,
233- reportMetadata : itemReportMetadata ,
234- chatReport,
235- reportAttributesDerived : reportAttributes ,
236- } ) ;
237218
238219 const shouldShowRBRorGBRTooltip = firstReportIDWithGBRorRBR === reportID ;
239220
@@ -289,14 +270,12 @@ function LHNOptionsList({style, contentContainerStyles, data, onSelectRow, optio
289270 reports ,
290271 reportNameValuePairs ,
291272 reportActions ,
292- reportMetadataCollection ,
293273 isOffline ,
294274 reportAttributes ,
295275 policy ,
296276 transactions ,
297277 draftComments ,
298278 personalDetails ,
299- policyForMovingExpensesID ,
300279 firstReportIDWithGBRorRBR ,
301280 optionMode ,
302281 shouldDisableFocusOptions ,
@@ -312,6 +291,7 @@ function LHNOptionsList({style, contentContainerStyles, data, onSelectRow, optio
312291 isScreenFocused ,
313292 localeCompare ,
314293 translate ,
294+ visibleReportActionsData ,
315295 currentUserAccountID ,
316296 ] ,
317297 ) ;
@@ -333,6 +313,7 @@ function LHNOptionsList({style, contentContainerStyles, data, onSelectRow, optio
333313 isOffline ,
334314 isScreenFocused ,
335315 isReportsSplitNavigatorLast ,
316+ visibleReportActionsData ,
336317 ] ,
337318 [
338319 reportActions ,
@@ -350,6 +331,7 @@ function LHNOptionsList({style, contentContainerStyles, data, onSelectRow, optio
350331 isOffline ,
351332 isScreenFocused ,
352333 isReportsSplitNavigatorLast ,
334+ visibleReportActionsData ,
353335 ] ,
354336 ) ;
355337
0 commit comments