1- import { useRoute } from '@react-navigation/native' ;
21import React from 'react' ;
32import type { MeasureInWindowOnSuccessCallback } from 'react-native' ;
43import type { LocalizedTranslate } from '@components/LocaleContextProvider' ;
54import useIsScrollLikelyLayoutTriggered from '@hooks/useIsScrollLikelyLayoutTriggered' ;
65import useLocalize from '@hooks/useLocalize' ;
7- import useNetwork from '@hooks/useNetwork' ;
86import useOnyx from '@hooks/useOnyx' ;
9- import usePaginatedReportActions from '@hooks/usePaginatedReportActions' ;
10- import useParentReportAction from '@hooks/useParentReportAction' ;
117import useReportIsArchived from '@hooks/useReportIsArchived' ;
12- import useReportTransactionsCollection from '@hooks/useReportTransactionsCollection' ;
138import FS from '@libs/Fullstory' ;
14- import { getAllNonDeletedTransactions } from '@libs/MoneyRequestReportUtils' ;
15- import { getCombinedReportActions , getFilteredReportActionsForReportView , getOneTransactionThreadReportID , isMoneyRequestAction , isSentMoneyReportAction } from '@libs/ReportActionsUtils' ;
169import {
17- canEditReportAction ,
1810 canUserPerformWriteAction as canUserPerformWriteActionReportUtils ,
1911 chatIncludesChronos ,
2012 chatIncludesConcierge ,
@@ -25,14 +17,13 @@ import {isEmojiPickerVisible} from '@userActions/EmojiPickerAction';
2517import { isBlockedFromConcierge as isBlockedFromConciergeUserAction } from '@userActions/User' ;
2618import CONST from '@src/CONST' ;
2719import ONYXKEYS from '@src/ONYXKEYS' ;
28- import SCREENS from '@src/SCREENS' ;
2920import type { FileObject } from '@src/types/utils/Attachment' ;
3021import { useComposerActions , useComposerMeta , useComposerSendActions , useComposerSendState , useComposerState } from './ComposerContext' ;
3122import ComposerWithSuggestions from './ComposerWithSuggestions' ;
23+ import useComposerSubmit from './useComposerSubmit' ;
3224
3325type ComposerInputProps = {
3426 reportID : string ;
35- submitForm : ( comment : string ) => void ;
3627 onPasteFile : ( files : FileObject | FileObject [ ] ) => void ;
3728} ;
3829
@@ -43,15 +34,16 @@ function getRandomPlaceholder(translate: LocalizedTranslate): string {
4334 return translate ( AI_PLACEHOLDER_KEYS [ randomIndex ] ) ;
4435}
4536
46- function ComposerInput ( { reportID, submitForm , onPasteFile} : ComposerInputProps ) {
37+ function ComposerInput ( { reportID, onPasteFile} : ComposerInputProps ) {
4738 const { translate, preferredLocale} = useLocalize ( ) ;
48- const { isOffline} = useNetwork ( ) ;
4939 const { isMenuVisible} = useComposerState ( ) ;
5040 const { isBlockedFromConcierge} = useComposerSendState ( ) ;
5141 const { setIsFullComposerAvailable, onBlur, onFocus, setComposerRef} = useComposerActions ( ) ;
5242 const { handleSendMessage, onValueChange} = useComposerSendActions ( ) ;
5343 const { containerRef, suggestionsRef, isNextModalWillOpenRef} = useComposerMeta ( ) ;
5444
45+ const submitForm = useComposerSubmit ( reportID ) ;
46+
5547 const [ isComposerFullSize = false ] = useOnyx ( `${ ONYXKEYS . COLLECTION . REPORT_IS_COMPOSER_FULL_SIZE } ${ reportID } ` ) ;
5648 const [ shouldShowComposeInput = true ] = useOnyx ( ONYXKEYS . SHOULD_SHOW_COMPOSE_INPUT ) ;
5749 const [ blockedFromConcierge ] = useOnyx ( ONYXKEYS . NVP_BLOCKED_FROM_CONCIERGE ) ;
@@ -66,26 +58,6 @@ function ComposerInput({reportID, submitForm, onPasteFile}: ComposerInputProps)
6658 const [ report ] = useOnyx ( `${ ONYXKEYS . COLLECTION . REPORT } ${ reportID } ` ) ;
6759 const isReportArchived = useReportIsArchived ( report ?. reportID ) ;
6860
69- // --- lastReportAction derivation (moves to useLastEditableAction hook in PR 4) ---
70- const { reportActions : unfilteredReportActions } = usePaginatedReportActions ( report ?. reportID ) ;
71- const filteredReportActions = getFilteredReportActionsForReportView ( unfilteredReportActions ) ;
72- const [ chatReport ] = useOnyx ( `${ ONYXKEYS . COLLECTION . REPORT } ${ report ?. chatReportID } ` ) ;
73- const allReportTransactions = useReportTransactionsCollection ( reportID ) ;
74- const reportTransactions = getAllNonDeletedTransactions ( allReportTransactions , filteredReportActions , isOffline , true ) ;
75- const visibleTransactions = isOffline ? reportTransactions : reportTransactions ?. filter ( ( t ) => t . pendingAction !== CONST . RED_BRICK_ROAD_PENDING_ACTION . DELETE ) ;
76- const reportTransactionIDs = visibleTransactions ?. map ( ( t ) => t . transactionID ) ;
77- const isSentMoneyReport = filteredReportActions . some ( ( action ) => isSentMoneyReportAction ( action ) ) ;
78- const transactionThreadReportID = getOneTransactionThreadReportID ( report , chatReport , filteredReportActions , isOffline , reportTransactionIDs ) ;
79- const effectiveTransactionThreadReportID = isSentMoneyReport ? undefined : transactionThreadReportID ;
80- const parentReportAction = useParentReportAction ( report ) ;
81- const [ transactionThreadReportActionsOnyx ] = useOnyx ( `${ ONYXKEYS . COLLECTION . REPORT_ACTIONS } ${ effectiveTransactionThreadReportID } ` ) ;
82- const transactionThreadReportActionsArray = transactionThreadReportActionsOnyx ? Object . values ( transactionThreadReportActionsOnyx ) : [ ] ;
83- const combinedReportActions = getCombinedReportActions ( filteredReportActions , effectiveTransactionThreadReportID ?? null , transactionThreadReportActionsArray ) ;
84- const route = useRoute ( ) ;
85- const isOnSearchMoneyRequestReport = route . name === SCREENS . RIGHT_MODAL . SEARCH_MONEY_REQUEST_REPORT || route . name === SCREENS . RIGHT_MODAL . EXPENSE_REPORT ;
86- const actionsForLastEditable = isOnSearchMoneyRequestReport ? filteredReportActions : combinedReportActions ;
87- const lastReportAction = [ ...actionsForLastEditable , parentReportAction ] . find ( ( action ) => ! isMoneyRequestAction ( action ) && canEditReportAction ( action , undefined ) ) ;
88-
8961 const includesConcierge = chatIncludesConcierge ( { participants : report ?. participants } ) ;
9062 const isGroupPolicyReport = ! ! report ?. policyID && report . policyID !== CONST . POLICY . ID_FAKE ;
9163 const isExpenseRelatedReport = isReportTransactionThread ( report ) || isMoneyRequestReport ( report ) ;
@@ -111,7 +83,6 @@ function ComposerInput({reportID, submitForm, onPasteFile}: ComposerInputProps)
11183 policyID = { report ?. policyID }
11284 includeChronos = { chatIncludesChronos ( report ) }
11385 isGroupPolicyReport = { isGroupPolicyReport }
114- lastReportAction = { lastReportAction }
11586 isMenuVisible = { isMenuVisible }
11687 inputPlaceholder = { inputPlaceholder }
11788 isComposerFullSize = { isComposerFullSize }
0 commit comments