import { v4 as uuidV4 } from 'uuid'; import { BaseResponse } from '@/types/entity'; import OpenIMSDK from '..'; import { SplitConversationParams, GetOneConversationParams, SetConversationDraftParams, SetConversationPinParams, SetConversationRecvOptParams, SetConversationPrivateStateParams, SetBurnDurationParams, SetConversationExParams, SetConversationMsgDestructTimeParams, SetConversationMsgDestructParams, SetConversationParams, ChangeInputStatesParams, GetInputstatesParams, } from '@openim/wasm-client-sdk/lib/types/params'; import { ConversationItem } from '@openim/wasm-client-sdk/lib/types/entity'; import { GroupAtType, Platform } from '@openim/wasm-client-sdk'; export function setupConversationModule(openIMSDK: OpenIMSDK) { return { getAllConversationList: (opid = uuidV4()) => new Promise>((resolve, reject) => { openIMSDK.libOpenIMSDK.get_all_conversation_list( openIMSDK.baseCallbackWrap(resolve, reject), opid ); }), getConversationListSplit: ( params: SplitConversationParams, opid = uuidV4() ) => new Promise>((resolve, reject) => { openIMSDK.libOpenIMSDK.get_conversation_list_split( openIMSDK.baseCallbackWrap(resolve, reject), opid, params.offset, params.count ); }), getOneConversation: (params: GetOneConversationParams, opid = uuidV4()) => new Promise>((resolve, reject) => { openIMSDK.libOpenIMSDK.get_one_conversation( openIMSDK.baseCallbackWrap(resolve, reject), opid, params.sessionType, params.sourceID ); }), setConversationEx: (params: SetConversationExParams, opid = uuidV4()) => new Promise>((resolve, reject) => { openIMSDK.libOpenIMSDK.set_conversation( openIMSDK.baseCallbackWrap(resolve, reject), opid, params.conversationID, JSON.stringify({ ex: params.ex, }) ); }), getMultipleConversation: (conversationIDList: string, opid = uuidV4()) => new Promise>((resolve, reject) => { openIMSDK.libOpenIMSDK.get_multiple_conversation( openIMSDK.baseCallbackWrap(resolve, reject), opid, conversationIDList ); }), getConversationIDBySessionType: ( params: GetOneConversationParams, opid = uuidV4() ) => openIMSDK.asyncRetunWrap( opid, openIMSDK.libOpenIMSDK.get_conversation_id_by_session_type( opid, params.sourceID, params.sessionType ) ), getTotalUnreadMsgCount: (opid = uuidV4()) => new Promise>((resolve, reject) => { openIMSDK.libOpenIMSDK.get_total_unread_msg_count( openIMSDK.baseCallbackWrap(resolve, reject), opid ); }), markConversationMessageAsRead: (conversationID: string, opid = uuidV4()) => new Promise>((resolve, reject) => { openIMSDK.libOpenIMSDK.mark_conversation_message_as_read( openIMSDK.baseCallbackWrap(resolve, reject), opid, conversationID ); }), setConversationDraft: ( params: SetConversationDraftParams, opid = uuidV4() ) => new Promise>((resolve, reject) => { openIMSDK.libOpenIMSDK.set_conversation_draft( openIMSDK.baseCallbackWrap(resolve, reject), opid, params.conversationID, params.draftText ); }), setConversation: (params: SetConversationParams, opid = uuidV4()) => new Promise>((resolve, reject) => { openIMSDK.libOpenIMSDK.set_conversation( openIMSDK.baseCallbackWrap(resolve, reject), opid, params.conversationID, JSON.stringify(params) ); }), pinConversation: (params: SetConversationPinParams, opid = uuidV4()) => new Promise>((resolve, reject) => { openIMSDK.libOpenIMSDK.set_conversation( openIMSDK.baseCallbackWrap(resolve, reject), opid, params.conversationID, JSON.stringify({ isPinned: params.isPinned, }) ); }), setConversationRecvMessageOpt: ( params: SetConversationRecvOptParams, opid = uuidV4() ) => new Promise>((resolve, reject) => { openIMSDK.libOpenIMSDK.set_conversation( openIMSDK.baseCallbackWrap(resolve, reject), opid, params.conversationID, JSON.stringify({ recvMsgOpt: params.opt, }) ); }), setConversationPrivateChat: ( params: SetConversationPrivateStateParams, opid = uuidV4() ) => new Promise>((resolve, reject) => { openIMSDK.libOpenIMSDK.set_conversation( openIMSDK.baseCallbackWrap(resolve, reject), opid, params.conversationID, JSON.stringify({ isPrivateChat: params.isPrivate, }) ); }), setConversationBurnDuration: ( params: SetBurnDurationParams, opid = uuidV4() ) => new Promise>((resolve, reject) => { openIMSDK.libOpenIMSDK.set_conversation( openIMSDK.baseCallbackWrap(resolve, reject), opid, params.conversationID, JSON.stringify({ burnDuration: params.burnDuration, }) ); }), resetConversationGroupAtType: (conversationID: string, opid = uuidV4()) => new Promise>((resolve, reject) => { openIMSDK.libOpenIMSDK.set_conversation( openIMSDK.baseCallbackWrap(resolve, reject), opid, conversationID, JSON.stringify({ groupAtType: GroupAtType.AtNormal, }) ); }), hideConversation: (conversationID: string, opid = uuidV4()) => new Promise>((resolve, reject) => { openIMSDK.libOpenIMSDK.hide_conversation( openIMSDK.baseCallbackWrap(resolve, reject), opid, conversationID ); }), hideAllConversation: (opid = uuidV4()) => new Promise>((resolve, reject) => { openIMSDK.libOpenIMSDK.hide_all_conversations( openIMSDK.baseCallbackWrap(resolve, reject), opid ); }), clearConversationAndDeleteAllMsg: ( conversationID: string, opid = uuidV4() ) => new Promise>((resolve, reject) => { openIMSDK.libOpenIMSDK.clear_conversation_and_delete_all_msg( openIMSDK.baseCallbackWrap(resolve, reject), opid, conversationID ); }), deleteConversationAndDeleteAllMsg: ( conversationID: string, opid = uuidV4() ) => new Promise>((resolve, reject) => { openIMSDK.libOpenIMSDK.delete_conversation_and_delete_all_msg( openIMSDK.baseCallbackWrap(resolve, reject), opid, conversationID ); }), setConversationMsgDestructTime: ( params: SetConversationMsgDestructTimeParams, opid = uuidV4() ) => new Promise>((resolve, reject) => { openIMSDK.libOpenIMSDK.set_conversation( openIMSDK.baseCallbackWrap(resolve, reject), opid, params.conversationID, JSON.stringify({ msgDestructTime: params.msgDestructTime, }) ); }), setConversationIsMsgDestruct: ( params: SetConversationMsgDestructParams, opid = uuidV4() ) => new Promise>((resolve, reject) => { openIMSDK.libOpenIMSDK.set_conversation( openIMSDK.baseCallbackWrap(resolve, reject), opid, params.conversationID, JSON.stringify({ isMsgDestruct: params.isMsgDestruct }) ); }), changeInputStates: (params: ChangeInputStatesParams, opid = uuidV4()) => new Promise>((resolve, reject) => { openIMSDK.libOpenIMSDK.change_input_states( openIMSDK.baseCallbackWrap(resolve, reject), opid, params.conversationID, params.focus ? 1 : 0 ); }), getInputStates: (params: GetInputstatesParams, opid = uuidV4()) => new Promise>((resolve, reject) => { openIMSDK.libOpenIMSDK.get_input_states( openIMSDK.baseCallbackWrap(resolve, reject), opid, params.conversationID, params.userID ); }), }; } export interface ConversationModuleApi { getAllConversationList: ( opid?: string ) => Promise>; getConversationListSplit: ( params: SplitConversationParams, opid?: string ) => Promise>; getOneConversation: ( params: GetOneConversationParams, opid?: string ) => Promise>; setConversationEx: ( params: SetConversationExParams, opid?: string ) => Promise>; getMultipleConversation: ( conversationIDList: string, opid?: string ) => Promise>; getConversationIDBySessionType: ( params: GetOneConversationParams, opid?: string ) => Promise>; getTotalUnreadMsgCount: (opid?: string) => Promise>; markConversationMessageAsRead: ( conversationID: string, opid?: string ) => Promise>; setConversationDraft: ( params: SplitConversationParams, opid?: string ) => Promise>; pinConversation: ( params: SplitConversationParams, opid?: string ) => Promise>; setConversation: ( params: SetConversationParams, opid?: string ) => Promise>; setConversationRecvMessageOpt: ( params: SetConversationRecvOptParams, opid?: string ) => Promise>; setConversationPrivateChat: ( params: SetConversationPrivateStateParams, opid?: string ) => Promise>; setConversationBurnDuration: ( params: SetBurnDurationParams, opid?: string ) => Promise>; resetConversationGroupAtType: ( conversationID: string, opid?: string ) => Promise>; hideConversation: ( conversationID: string, opid?: string ) => Promise>; hideAllConversation: (opid?: string) => Promise>; clearConversationAndDeleteAllMsg: ( conversationID: string, opid?: string ) => Promise>; deleteConversationAndDeleteAllMsg: ( conversationID: string, opid?: string ) => Promise>; setConversationMsgDestructTime: ( params: SetConversationMsgDestructTimeParams, opid?: string ) => Promise>; setConversationIsMsgDestruct: ( params: SetConversationMsgDestructParams, opid?: string ) => Promise>; changeInputStates: ( params: ChangeInputStatesParams, opid?: string ) => Promise>; getInputStates: ( params: GetInputstatesParams, opid?: string ) => Promise>; }