diff --git a/app/actions/room.ts b/app/actions/room.ts index 1ac3b0f4907..a4811411344 100644 --- a/app/actions/room.ts +++ b/app/actions/room.ts @@ -39,9 +39,14 @@ interface IForwardRoom extends Action { rid: string; } +type IUserTypingArgs = { + tmid?: string; +}; + interface IUserTyping extends Action { rid: string; status: boolean; + args?: IUserTypingArgs; } export interface IRoomHistoryRequest extends Action { @@ -109,11 +114,12 @@ export function removedRoom(): Action { }; } -export function userTyping(rid: string, status = true): IUserTyping { +export function userTyping(rid: string, status = true, args?: IUserTypingArgs): IUserTyping { return { type: ROOM.USER_TYPING, rid, - status + status, + args }; } diff --git a/app/containers/MessageComposer/components/ComposerInput.tsx b/app/containers/MessageComposer/components/ComposerInput.tsx index 178ca3b58b1..d1835ef4abd 100644 --- a/app/containers/MessageComposer/components/ComposerInput.tsx +++ b/app/containers/MessageComposer/components/ComposerInput.tsx @@ -361,7 +361,7 @@ export const ComposerInput = memo( const handleTyping = (isTyping: boolean) => { if (sharing || !rid) return; - dispatch(userTyping(rid, isTyping)); + dispatch(userTyping(rid, isTyping, tmid ? { tmid } : {})); }; return ( diff --git a/app/lib/services/restApi.ts b/app/lib/services/restApi.ts index f38c096c315..95ad3f86c7e 100644 --- a/app/lib/services/restApi.ts +++ b/app/lib/services/restApi.ts @@ -950,14 +950,14 @@ export const addUsersToRoom = (rid: string): Promise => { return sdk.methodCallWrapper('addUsersToRoom', { rid, users }); }; -export const emitTyping = (room: IRoom, typing = true) => { +export const emitTyping = (room: IRoom, typing = true, args: { tmid?: string } = {}) => { const { login, settings, server } = reduxStore.getState(); const { UI_Use_Real_Name } = settings; const { version: serverVersion } = server; const { user } = login; const name = UI_Use_Real_Name ? user.name : user.username; if (compareServerVersion(serverVersion, 'greaterThanOrEqualTo', '4.0.0')) { - return sdk.methodCall('stream-notify-room', `${room}/user-activity`, name, typing ? ['user-typing'] : []); + return sdk.methodCall('stream-notify-room', `${room}/user-activity`, name, typing ? ['user-typing'] : [], args); } return sdk.methodCall('stream-notify-room', `${room}/typing`, name, typing); }; diff --git a/app/sagas/room.js b/app/sagas/room.js index 71bd73c717a..9fb160695f0 100644 --- a/app/sagas/room.js +++ b/app/sagas/room.js @@ -51,10 +51,10 @@ const clearInactiveTyping = function* clearInactiveTyping({ rid }) { yield clearUserTyping({ rid, status: false }); }; -const watchUserTyping = function* watchUserTyping({ rid, status }) { +const watchUserTyping = function* watchUserTyping({ rid, status, args }) { try { if (status) { - yield emitTyping(rid, status); + yield emitTyping(rid, status, args); if (inactiveTypingTask) { yield cancel(inactiveTypingTask); }