@@ -5,13 +5,15 @@ import {getButtonRole} from '@components/Button/utils';
55import OfflineWithFeedback from '@components/OfflineWithFeedback' ;
66import { PressableWithFeedback } from '@components/Pressable' ;
77import type { SearchColumnType , TableColumnSize } from '@components/Search/types' ;
8+ import { useEditingCellState } from '@components/Table/EditableCell' ;
89import TransactionItemRow from '@components/TransactionItemRow' ;
910import useAnimatedHighlightStyle from '@hooks/useAnimatedHighlightStyle' ;
1011import useLocalize from '@hooks/useLocalize' ;
1112import useResponsiveLayout from '@hooks/useResponsiveLayout' ;
1213import useResponsiveLayoutOnWideRHP from '@hooks/useResponsiveLayoutOnWideRHP' ;
1314import useTheme from '@hooks/useTheme' ;
1415import useThemeStyles from '@hooks/useThemeStyles' ;
16+ import useTransactionInlineEdit from '@hooks/useTransactionInlineEdit' ;
1517import useTransactionViolations from '@hooks/useTransactionViolations' ;
1618import ControlSelection from '@libs/ControlSelection' ;
1719import canUseTouchScreen from '@libs/DeviceCapabilities/canUseTouchScreen' ;
@@ -91,6 +93,7 @@ function MoneyRequestReportTransactionItem({
9193} : MoneyRequestReportTransactionItemProps ) {
9294 const { translate} = useLocalize ( ) ;
9395 const styles = useThemeStyles ( ) ;
96+ const { isEditingCell} = useEditingCellState ( ) ;
9497 // eslint-disable-next-line rulesdir/prefer-shouldUseNarrowLayout-instead-of-isSmallScreenWidth
9598 const { isSmallScreenWidth, isMediumScreenWidth} = useResponsiveLayout ( ) ;
9699 const { shouldUseNarrowLayout} = useResponsiveLayoutOnWideRHP ( ) ;
@@ -100,6 +103,22 @@ function MoneyRequestReportTransactionItem({
100103 // Filter violations based on user visibility and dismissal state at the row level.
101104 const filteredViolations = useTransactionViolations ( transaction . transactionID ) ;
102105
106+ const {
107+ canEditDate,
108+ canEditMerchant,
109+ canEditDescription,
110+ canEditCategory,
111+ canEditAmount,
112+ canEditTag,
113+ onEditDate,
114+ onEditMerchant,
115+ onEditDescription,
116+ onEditCategory,
117+ onEditAmount,
118+ onEditTag,
119+ wasEditingOnMouseDownRef,
120+ } = useTransactionInlineEdit ( { transactionID : transaction . transactionID , reportID : transaction . reportID } ) ;
121+
103122 const viewRef = useRef < View > ( null ) ;
104123
105124 // This useEffect scrolls to this transaction when it is newly added to the report
@@ -124,6 +143,12 @@ function MoneyRequestReportTransactionItem({
124143 < PressableWithFeedback
125144 key = { transaction . transactionID }
126145 onPress = { ( ) => {
146+ // If a cell was being edited when the user tapped the row, suppress navigation
147+ // so the second tap doesn't immediately open the transaction detail.
148+ if ( wasEditingOnMouseDownRef . current ) {
149+ wasEditingOnMouseDownRef . current = false ;
150+ return ;
151+ }
127152 handleOnPress ( transaction . transactionID ) ;
128153 } }
129154 accessibilityLabel = { translate ( 'iou.viewDetails' ) }
@@ -134,7 +159,12 @@ function MoneyRequestReportTransactionItem({
134159 style = { [ styles . transactionListItemStyle ] }
135160 hoverStyle = { [ ! isPendingDelete && styles . hoveredComponentBG , isSelected && styles . activeComponentBG ] }
136161 dataSet = { { [ CONST . SELECTION_SCRAPER_HIDDEN_ELEMENT ] : true } }
137- onPressIn = { ( ) => canUseTouchScreen ( ) && ControlSelection . block ( ) }
162+ onPressIn = { ( ) => {
163+ wasEditingOnMouseDownRef . current = isEditingCell ;
164+ if ( canUseTouchScreen ( ) ) {
165+ ControlSelection . block ( ) ;
166+ }
167+ } }
138168 onPressOut = { ( ) => ControlSelection . unblock ( ) }
139169 onLongPress = { ( ) => {
140170 handleLongPress ( transaction . transactionID ) ;
@@ -166,6 +196,18 @@ function MoneyRequestReportTransactionItem({
166196 onArrowRightPress = { ( ) => onArrowRightPress ?.( transaction . transactionID ) }
167197 isHover = { hovered }
168198 nonPersonalAndWorkspaceCards = { nonPersonalAndWorkspaceCards }
199+ canEditDate = { canEditDate }
200+ canEditMerchant = { canEditMerchant }
201+ canEditDescription = { canEditDescription }
202+ canEditCategory = { canEditCategory }
203+ canEditAmount = { canEditAmount }
204+ canEditTag = { canEditTag }
205+ onEditDate = { onEditDate }
206+ onEditMerchant = { onEditMerchant }
207+ onEditDescription = { onEditDescription }
208+ onEditCategory = { onEditCategory }
209+ onEditAmount = { onEditAmount }
210+ onEditTag = { onEditTag }
169211 />
170212 ) }
171213 </ PressableWithFeedback >
0 commit comments