diff --git a/lib/actions/message-actions.js b/lib/actions/message-actions.js --- a/lib/actions/message-actions.js +++ b/lib/actions/message-actions.js @@ -24,6 +24,8 @@ FetchMessageInfosRequest, RawMessageInfo, MessageTruncationStatuses, + DeleteMessageRequest, + DeleteMessageResponse, } from '../types/message-types.js'; import { defaultNumberPerThread } from '../types/message-types.js'; import type { MediaMessageServerDBContent } from '../types/messages/media.js'; @@ -491,6 +493,36 @@ return useKeyserverCall(toggleMessagePin); } +const sendDeleteMessageActionTypes = Object.freeze({ + started: 'SEND_DELETE_MESSAGE_STARTED', + success: 'SEND_DELETE_MESSAGE_SUCCESS', + failed: 'SEND_DELETE_MESSAGE_FAILED', +}); +const sendDeleteMessage = + ( + callKeyserverEndpoint: CallKeyserverEndpoint, + ): ((input: DeleteMessageRequest) => Promise) => + async input => { + const keyserverID = extractKeyserverIDFromID(input.targetMessageID); + const requests = { + [keyserverID]: { + targetMessageID: input.targetMessageID, + }, + }; + + const responses = await callKeyserverEndpoint('delete_message', requests); + + return { + newMessageInfos: responses[keyserverID].newMessageInfos, + }; + }; + +function useSendDeleteMessage(): ( + input: DeleteMessageRequest, +) => Promise { + return useKeyserverCall(sendDeleteMessage); +} + export { fetchMessagesBeforeCursorActionTypes, useFetchMessagesBeforeCursor, @@ -517,4 +549,6 @@ fetchPinnedMessageActionTypes, toggleMessagePinActionTypes, useToggleMessagePin, + sendDeleteMessageActionTypes, + useSendDeleteMessage, }; diff --git a/lib/reducers/message-reducer.js b/lib/reducers/message-reducer.js --- a/lib/reducers/message-reducer.js +++ b/lib/reducers/message-reducer.js @@ -38,6 +38,7 @@ messageStorePruneActionType, createLocalMessageActionType, fetchSingleMostRecentMessagesFromThreadsActionTypes, + sendDeleteMessageActionTypes, } from '../actions/message-actions.js'; import { sendMessageReportActionTypes } from '../actions/message-report-actions.js'; import { legacySiweAuthActionTypes } from '../actions/siwe-actions.js'; @@ -1089,7 +1090,10 @@ messagesResult.truncationStatuses, newThreadInfos, ); - } else if (action.type === sendEditMessageActionTypes.success) { + } else if ( + action.type === sendEditMessageActionTypes.success || + action.type === sendDeleteMessageActionTypes.success + ) { const { newMessageInfos } = action.payload; const truncationStatuses: { [string]: MessageTruncationStatus } = {}; for (const messageInfo of newMessageInfos) { diff --git a/lib/types/redux-types.js b/lib/types/redux-types.js --- a/lib/types/redux-types.js +++ b/lib/types/redux-types.js @@ -107,6 +107,7 @@ SimpleMessagesPayload, FetchPinnedMessagesResult, SearchMessagesResponse, + DeleteMessageResponse, } from './message-types.js'; import type { RawReactionMessageInfo } from './messages/reaction.js'; import type { RawTextMessageInfo } from './messages/text.js'; @@ -1691,6 +1692,22 @@ | { +type: 'REPORT_UNSHIMMING_OPERATION_COMPLETED', +payload: ReportUnshimmingOperationCompletedPayload, + } + | { + +type: 'SEND_DELETE_MESSAGE_STARTED', + +loadingInfo?: LoadingInfo, + +payload?: void, + } + | { + +type: 'SEND_DELETE_MESSAGE_SUCCESS', + +payload: DeleteMessageResponse, + +loadingInfo: LoadingInfo, + } + | { + +type: 'SEND_DELETE_MESSAGE_FAILED', + +error: true, + +payload: Error, + +loadingInfo: LoadingInfo, }, }>;