diff --git a/native/input/input-state-container.react.js b/native/input/input-state-container.react.js --- a/native/input/input-state-container.react.js +++ b/native/input/input-state-container.react.js @@ -5,6 +5,7 @@ import * as React from 'react'; import { Platform } from 'react-native'; import { createSelector } from 'reselect'; +import uuid from 'uuid'; import type { SendMultimediaMessageInput, @@ -44,6 +45,11 @@ combineLoadingStatuses, createLoadingStatusSelector, } from 'lib/selectors/loading-selectors.js'; +import { + dmOperationSpecificationTypes, + type OutboundDMOperationSpecification, +} from 'lib/shared/dm-ops/dm-op-utils.js'; +import { useProcessAndSendDMOperation } from 'lib/shared/dm-ops/process-dm-ops.js'; import { createMediaMessageInfo, useMessageCreationSideEffectsFunc, @@ -83,7 +89,10 @@ type ClientMediaMissionReportCreationRequest, reportTypes, } from 'lib/types/report-types.js'; -import { threadTypeIsSidebar } from 'lib/types/thread-types-enum.js'; +import { + threadTypeIsThick, + threadTypeIsSidebar, +} from 'lib/types/thread-types-enum.js'; import { type ClientNewThinThreadRequest, type NewThreadResult, @@ -155,6 +164,9 @@ input: SendMultimediaMessageInput, ) => Promise, +sendTextMessage: (input: SendTextMessageInput) => Promise, + +processAndSendDMOperation: ( + dmOperationSpecification: OutboundDMOperationSpecification, + ) => Promise, +newThinThread: ( request: ClientNewThinThreadRequest, ) => Promise, @@ -458,6 +470,31 @@ ) => { this.sendCallbacks.forEach(callback => callback()); + // TODO: this should be update according to thread creation logic + // (ENG-8567) + if (threadTypeIsThick(inputThreadInfo.type)) { + const recipientIDs = inputThreadInfo.members + .filter(member => !member.isSender) + .map(member => member.id); + void this.props.processAndSendDMOperation({ + type: dmOperationSpecificationTypes.OUTBOUND, + op: { + type: 'send_text_message', + threadID: inputThreadInfo.id, + creatorID: messageInfo.creatorID, + time: Date.now(), + messageID: uuid.v4(), + text: messageInfo.text, + }, + supportsAutoRetry: false, + recipients: { + type: 'some_users', + userIDs: recipientIDs, + }, + }); + return; + } + const { localID } = messageInfo; invariant( localID !== null && localID !== undefined, @@ -1755,6 +1792,7 @@ const staffCanSee = useStaffCanSee(); const textMessageCreationSideEffectsFunc = useMessageCreationSideEffectsFunc(messageTypes.TEXT); + const processAndSendDMOperation = useProcessAndSendDMOperation(); return ( Promise, +sendTextMessage: (input: SendTextMessageInput) => Promise, + +processAndSendDMOperation: ( + dmOperationSpecification: OutboundDMOperationSpecification, + ) => Promise, +newThinThread: ( request: ClientNewThinThreadRequest, ) => Promise, @@ -1268,6 +1280,31 @@ ) { this.props.sendCallbacks.forEach(callback => callback()); + // TODO: this should be update according to thread creation logic + // (ENG-8567) + if (threadTypeIsThick(inputThreadInfo.type)) { + const recipientIDs = inputThreadInfo.members + .filter(member => !member.isSender) + .map(member => member.id); + void this.props.processAndSendDMOperation({ + type: dmOperationSpecificationTypes.OUTBOUND, + op: { + type: 'send_text_message', + threadID: inputThreadInfo.id, + creatorID: messageInfo.creatorID, + time: Date.now(), + messageID: uuid.v4(), + text: messageInfo.text, + }, + supportsAutoRetry: false, + recipients: { + type: 'some_users', + userIDs: recipientIDs, + }, + }); + return; + } + const { localID } = messageInfo; invariant( localID !== null && localID !== undefined, @@ -1678,6 +1715,7 @@ const dispatchActionPromise = useDispatchActionPromise(); const modalContext = useModalContext(); const identityContext = React.useContext(IdentityClientContext); + const processAndSendDMOperation = useProcessAndSendDMOperation(); const [sendCallbacks, setSendCallbacks] = React.useState< $ReadOnlyArray<() => mixed>, @@ -1710,6 +1748,7 @@ deleteUpload={callDeleteUpload} sendMultimediaMessage={callSendMultimediaMessage} sendTextMessage={callSendTextMessage} + processAndSendDMOperation={processAndSendDMOperation} newThinThread={callNewThinThread} dispatch={dispatch} dispatchActionPromise={dispatchActionPromise}