tccc-vue-uikit
Version:
TCCC Vue3 UIKit
1,072 lines (1,000 loc) • 36.4 kB
text/typescript
import TIM from 'tim-js-sdk';
import IComponentServer from '../IComponentServer';
import { JSONToObject, isHideInput, isTyping, isUpdateBotStatus, isUpdateGuideList, isMessageInvisible, isMessageTip } from './utils/utils';
import { CUSTOM_MESSAGE_SRC } from '../../constants/im';
import { getQuery } from '../../../..//utils';
import services from '../../../../services';
const iconNotify = require("../../../../utils/notify.js");
/**
* class TUIChatServer
*
* TUIChat 逻辑主体
*/
export default class TUIChatServer extends IComponentServer {
public TUICore: any;
public store: any;
public currentStore: any = {};
constructor(TUICore: any) {
super();
this.TUICore = TUICore;
this.bindTIMEvent();
this.store = TUICore.setComponentStore('TUIChat', {}, this.updateStore.bind(this));
}
/**
* 组件销毁
* destroy
*/
public destroyed() {
this.unbindTIMEvent();
}
/**
* 数据监听回调
* data listener callback
*
* @param {any} newValue 新数据
* @param {any} oldValue 旧数据
*
*/
updateStore(newValue: any, oldValue: any) {
Object.assign(this.currentStore, newValue);
if (!newValue?.conversation?.conversationID) {
this.currentStore.messageList = [];
return;
}
if (
newValue?.conversation?.conversationID &&
newValue?.conversation?.conversationID !== oldValue?.conversation?.conversationID
) {
this.render(newValue?.conversation);
}
}
public render(conversation: any) {
const len = 15;
this.currentStore.isFirstRender = true;
this.currentStore.messageList = [];
this.currentStore.readSet.clear();
this.getMessageList({ conversationID: conversation.conversationID, count: len });
if (conversation.type === this.TUICore.TIM.TYPES.CONV_GROUP) {
this.currentStore.userInfo.isGroup = true;
const options = {
groupID: conversation.groupProfile.groupID,
userIDList: [conversation.groupProfile.selfInfo.userID],
};
this.getGroupProfile({ groupID: conversation.groupProfile.groupID });
this.getGroupMemberProfile(options).then((res: any) => {
const { memberList } = res.data;
const [selfInfo] = memberList;
this.currentStore.selfInfo = selfInfo;
});
} else {
this.currentStore.userInfo.isGroup = false;
this.currentStore.userInfo.list = [conversation?.userProfile];
}
}
/**
* /////////////////////////////////////////////////////////////////////////////////
* //
* // TIM 事件监听注册接口
* // TIM Event listener registration interface
* //
* /////////////////////////////////////////////////////////////////////////////////
*/
private bindTIMEvent() {
this.TUICore.tim.on(this.TUICore.TIM.EVENT.MESSAGE_RECEIVED, this.handleMessageReceived, this);
this.TUICore.tim.on(this.TUICore.TIM.EVENT.MESSAGE_MODIFIED, this.handleMessageModified, this);
this.TUICore.tim.on(this.TUICore.TIM.EVENT.MESSAGE_REVOKED, this.handleMessageRevoked, this);
this.TUICore.tim.on(this.TUICore.TIM.EVENT.MESSAGE_READ_BY_PEER, this.handleMessageReadByPeer, this);
this.TUICore.tim.on(this.TUICore.TIM.EVENT.GROUP_LIST_UPDATED, this.handleGroupListUpdated, this);
this.TUICore.tim.on(
this.TUICore.TIM.EVENT.MESSAGE_READ_RECEIPT_RECEIVED,
this.handleMessageReadReceiptReceived,
this
);
}
private unbindTIMEvent() {
this.TUICore.tim.off(this.TUICore.TIM.EVENT.MESSAGE_RECEIVED, this.handleMessageReceived);
this.TUICore.tim.off(this.TUICore.TIM.EVENT.MESSAGE_MODIFIED, this.handleMessageModified);
this.TUICore.tim.off(this.TUICore.TIM.EVENT.MESSAGE_REVOKED, this.handleMessageRevoked);
this.TUICore.tim.off(this.TUICore.TIM.EVENT.MESSAGE_READ_BY_PEER, this.handleMessageReadByPeer);
this.TUICore.tim.off(this.TUICore.TIM.EVENT.GROUP_LIST_UPDATED, this.handleGroupListUpdated);
this.TUICore.tim.off(this.TUICore.TIM.EVENT.MESSAGE_READ_RECEIPT_RECEIVED, this.handleMessageReadReceiptReceived);
}
private handleMessageReceived(event: any) {
console.log(event, 'handleMessageReceived');
// if (JSONToObject(event?.data[0]?.payload?.data)?.src === CUSTOM_MESSAGE_SRC.END) {
// localStorage.setItem("conversationEnd", "true");
// }
try {
if ([CUSTOM_MESSAGE_SRC.NO_SEAT_ONLINE, CUSTOM_MESSAGE_SRC.TIMEOUT].includes(JSONToObject(event?.data[0]?.payload?.data)?.src)) {
this.renewSession()
}
if ([CUSTOM_MESSAGE_SRC.END].includes(JSONToObject(event?.data[0]?.payload?.data)?.src)) {
localStorage.setItem("conversationEnd", "true");
}
} catch (e) {
console.log(e);
}
isHideInput(event?.data[0]);
isTyping(event?.data[0])
isUpdateGuideList(event?.data[0])
isUpdateBotStatus(event?.data[0])
if (!isMessageInvisible(event?.data[0]) && !isMessageTip(event?.data[0])) {
try {
if (document.visibilityState !== "visible") {
localStorage.setItem(
"unreadCount",
(
Number.parseInt(localStorage.getItem("unreadCount") ?? "0") + 1
).toString()
);
iconNotify.default(localStorage.getItem("unreadCount"));
}
} catch (e) {
console.log(e);
}
}
console.log(event?.data[0], 'event?.data[0]');
if (localStorage.getItem('joinStatus') === 'true') {
event.data[0].needReadReceipt = true
} else {
event.data[0].needReadReceipt = false
}
if (event?.data[0]?.conversationID === this?.store?.conversation?.conversationID) {
this.currentStore.messageList = [...this.currentStore.messageList, ...event.data];
}
}
private handleMessageModified(event: any) {
const middleData = this.currentStore.messageList;
this.currentStore.messageList = [];
this.currentStore.messageList = middleData;
}
private handleMessageRevoked(event: any) {
const middleData = this.currentStore.messageList;
this.currentStore.messageList = [];
this.currentStore.messageList = middleData;
}
private handleMessageReadByPeer(event: any) {
const middleData = this.currentStore.messageList;
this.currentStore.messageList = [];
this.currentStore.messageList = middleData;
}
private handleGroupListUpdated(event: any) {
event?.data.map((item: any) => {
if (item?.groupID === this?.store?.conversation?.groupProfile?.groupID) {
this.store.conversation.groupProfile = item;
this.currentStore.conversation = {};
this.currentStore.conversation = this.store.conversation;
}
return item;
});
}
private renewSession() {
function safeParseClientData(clientDataStr: string) {
try {
const clientDataObject =
clientDataStr && JSON.parse(decodeURIComponent(clientDataStr));
return clientDataObject;
} catch (e) {
return null;
}
}
return this.handlePromiseCallback(async (resolve: any, reject: any) => {
try {
const { webAppId, clientData, userSig } =
getQuery();
const clientDataObject = safeParseClientData(clientData as string);
await services["/ccc/user/startSession"]({
channelId: webAppId,
...(userSig &&
clientData && {
userSig,
userBuf: clientData,
userId: `${clientDataObject.uid}` || "",
}),
});
localStorage.setItem("conversationEnd", "false");
resolve(true)
} catch (error) {
console.log(error);
}
});
}
private handleMessageReadReceiptReceived(event: any) {
const middleData = this.currentStore.messageList;
this.currentStore.messageList = [];
this.currentStore.messageList = middleData;
}
/**
* /////////////////////////////////////////////////////////////////////////////////
* //
* // 处理 TIM 接口参数及回调
* // Handling TIM interface parameters and callbacks
* //
* /////////////////////////////////////////////////////////////////////////////////
*/
/**
* 创建消息生成参数
* Create message generation parameters
*
* @param {Object} content 消息体
* @param {String} type 消息类型 text: 文本类型 file: 文件类型 face: 表情 location: 地址 custom: 自定义 merger: 合并 forward: 转发
* @param {Callback} callback 回调函数
* @param {any} to 发送的对象
* @returns {options} 消息参数
*/
public handleMessageOptions(content: any, type: string, callback?: any, to?: any) {
const options: any = {
to: '',
conversationType: to?.type || this.store.conversation.type,
payload: content,
// needReadReceipt: this.currentStore.needReadReceipt,
needReadReceipt: localStorage.getItem('joinStatus') === 'true' ? true : false,
};
if (this.currentStore.needTyping) {
options.cloudCustomData = {
messageFeature: {
needTyping: 1,
version: 1,
},
};
options.cloudCustomData = JSON.stringify(options.cloudCustomData);
}
if (type === 'file' && callback) {
options.onProgress = callback;
}
switch (options.conversationType) {
case this.TUICore.TIM.TYPES.CONV_C2C:
options.to = to?.userProfile?.userID || this.store.conversation?.userProfile?.userID || '';
break;
case this.TUICore.TIM.TYPES.CONV_GROUP:
options.to = to?.groupProfile?.groupID || this.store.conversation?.groupProfile?.groupID || '';
break;
default:
break;
}
return options;
}
/**
* 处理异步函数
* Handling asynchronous functions
*
* @param {callback} callback 回调函数
* @returns {Promise} 返回异步函数
*/
public handlePromiseCallback(callback: any) {
return new Promise<void>((resolve, reject) => {
const config = {
TUIName: 'TUIChat',
callback: () => {
callback && callback(resolve, reject);
},
};
this.TUICore.setAwaitFunc(config.TUIName, config.callback);
});
}
/**
* 文件上传进度函数处理
* File upload progress function processing
*
* @param {number} progress 文件上传进度 1表示完成
* @param {message} message 文件消息
*/
public handleUploadProgress(progress: number, message: any) {
this.currentStore.messageList.map((item: any) => {
if (item.ID === message.ID) {
item.progress = progress;
}
return item;
});
}
/**
* /////////////////////////////////////////////////////////////////////////////////
* //
* // TIM 方法
* // TIM methods
* //
* /////////////////////////////////////////////////////////////////////////////////
*/
/**
* 发送表情消息
* Send face messages
*
* @param {Object} data 消息内容/message content
* @param {Number} data.index 表情索引/face index
* @param {String} data.data 额外数据/extra data
* @returns {Promise}
*/
public sendFaceMessage(data: any): Promise<any> {
return this.handlePromiseCallback(async (resolve: any, reject: any) => {
try {
const options = this.handleMessageOptions(data, 'face');
const message = this.TUICore.tim.createFaceMessage(options);
this.currentStore.messageList.push(message);
const imResponse = await this.TUICore.tim.sendMessage(message);
this.currentStore.messageList = this.currentStore.messageList.map((item: any) => {
if (item.ID === imResponse.data.message.ID) {
return imResponse.data.message;
}
return item;
});
resolve(imResponse);
} catch (error) {
reject(error);
const middleData = this.currentStore.messageList;
this.currentStore.messageList = [];
this.currentStore.messageList = middleData;
}
});
}
/**
* 发送图片消息
* Send image message
*
* @param {Image} image 图片文件/image
* @returns {Promise}
*/
public sendImageMessage(image: any): Promise<any> {
return this.handlePromiseCallback(async (resolve: any, reject: any) => {
try {
if (localStorage.getItem("conversationEnd") === 'true') {
await this.renewSession()
}
const options = this.handleMessageOptions({ file: image }, 'file', (progress: number) => {
this.handleUploadProgress(progress, message);
});
const message = this.TUICore.tim.createImageMessage(options);
message.progress = 0.01;
this.currentStore.messageList.push(message);
const imResponse = await this.TUICore.tim.sendMessage(message);
this.currentStore.messageList = this.currentStore.messageList.map((item: any) => {
if (item.ID === imResponse.data.message.ID) {
return imResponse.data.message;
}
return item;
});
resolve(imResponse);
} catch (error) {
reject(error);
const middleData = this.currentStore.messageList;
this.currentStore.messageList = [];
this.currentStore.messageList = middleData;
}
});
}
/**
* 发送视频消息
* Send video message
*
* @param {Video} video 视频文件/video
* @returns {Promise}
*/
public sendVideoMessage(video: any): Promise<any> {
return this.handlePromiseCallback(async (resolve: any, reject: any) => {
try {
if (localStorage.getItem("conversationEnd") === 'true') {
await this.renewSession()
}
const options = this.handleMessageOptions({ file: video }, 'file', (progress: number) => {
this.handleUploadProgress(progress, message);
});
const message = this.TUICore.tim.createVideoMessage(options);
message.progress = 0.01;
this.currentStore.messageList.push(message);
const imResponse = await this.TUICore.tim.sendMessage(message);
this.currentStore.messageList = this.currentStore.messageList.map((item: any) => {
if (item.ID === imResponse.data.message.ID) {
return imResponse.data.message;
}
return item;
});
resolve(imResponse);
} catch (error) {
reject(error);
const middleData = this.currentStore.messageList;
this.currentStore.messageList = [];
this.currentStore.messageList = middleData;
}
});
}
/**
* 发送文件消息
* Send file message
*
* @param {File} file 文件/file
* @returns {Promise}
*/
public sendFileMessage(file: any): Promise<any> {
return this.handlePromiseCallback(async (resolve: any, reject: any) => {
try {
if (localStorage.getItem("conversationEnd") === 'true') {
await this.renewSession()
}
const options = this.handleMessageOptions({ file }, 'file', (progress: number) => {
this.handleUploadProgress(progress, message);
});
const message = this.TUICore.tim.createFileMessage(options);
message.progress = 0.01;
this.currentStore.messageList.push(message);
const imResponse = await this.TUICore.tim.sendMessage(message);
this.currentStore.messageList = this.currentStore.messageList.map((item: any) => {
if (item.ID === imResponse.data.message.ID) {
return imResponse.data.message;
}
return item;
});
resolve(imResponse);
} catch (error) {
reject(error);
const middleData = this.currentStore.messageList;
this.currentStore.messageList = [];
this.currentStore.messageList = middleData;
}
});
}
/**
* 发送自定义消息
* Send Custom message
*
* @param {Object} data 消息内容/message content
* @param {String} data.data 自定义消息的数据字段/custom message data fields
* @param {String} data.description 自定义消息的说明字段/custom message description fields
* @param {String} data.extension 自定义消息的扩展字段/custom message extension fields
* @returns {Promise}
*/
public sendCustomMessage(data: any): Promise<any> {
return this.handlePromiseCallback(async (resolve: any, reject: any) => {
try {
data.data = JSON.stringify(data.data);
const options = this.handleMessageOptions(data, 'custom');
const message = this.TUICore.tim.createCustomMessage(options);
this.currentStore.messageList.push(message);
const imResponse = await this.TUICore.tim.sendMessage(message);
this.currentStore.messageList = this.currentStore.messageList.map((item: any) => {
if (item.ID === imResponse.data.message.ID) {
return imResponse.data.message;
}
return item;
});
resolve(imResponse);
} catch (error) {
reject(error);
const middleData = this.currentStore.messageList;
this.currentStore.messageList = [];
this.currentStore.messageList = middleData;
}
});
}
public sendTcccCustomMessage(to: string, content: any): Promise<any> {
return this.handlePromiseCallback(async (resolve: any, reject: any) => {
try {
const message = this.TUICore.tim.createCustomMessage(
{
to: to,
conversationType: TIM.TYPES.CONV_GROUP,
payload: { data: JSON.stringify(content) },
}
);
this.currentStore.messageList.push(message);
const imResponse = await this.TUICore.tim.sendMessage(message);
this.currentStore.messageList = this.currentStore.messageList.map((item: any) => {
if (item.ID === imResponse.data.message.ID) {
return imResponse.data.message;
}
return item;
});
resolve(imResponse);
} catch (error) {
reject(error);
const middleData = this.currentStore.messageList;
this.currentStore.messageList = [];
this.currentStore.messageList = middleData;
}
});
}
/**
* 发送地理位置消息
* Send location message
*
* @param {Object} data 消息内容/message content
* @param {String} data.description 地理位置描述信息/geographic descriptive information
* @param {Number} data.longitude 经度/longitude
* @param {Number} data.latitude 纬度/latitude
* @returns {Promise}
*/
public sendLocationMessage(data: any): Promise<any> {
return this.handlePromiseCallback(async (resolve: any, reject: any) => {
try {
const options = this.handleMessageOptions(data, 'location');
const message = this.TUICore.tim.createLocationMessage(options);
this.currentStore.messageList.push(message);
const imResponse = await this.TUICore.tim.sendMessage(message);
resolve(imResponse);
} catch (error) {
reject(error);
const middleData = this.currentStore.messageList;
this.currentStore.messageList = [];
this.currentStore.messageList = middleData;
}
});
}
/**
* 转发消息
* forward message
*
* @param {message} message 消息实例/message
* @param {any} to 转发的对象/forward to
* @returns {Promise}
*/
public forwardMessage(message: any, to: any): Promise<any> {
return this.handlePromiseCallback(async (resolve: any, reject: any) => {
try {
const options = this.handleMessageOptions(message, 'forward', {}, to);
const imMessage = this.TUICore.tim.createForwardMessage(options);
const imResponse = await this.TUICore.tim.sendMessage(imMessage);
if (this.store.conversation.conversationID === imResponse.data.message.conversationID) {
this.currentStore.messageList.push(imResponse.data.message);
}
resolve(imResponse);
} catch (error) {
reject(error);
const middleData = this.currentStore.messageList;
this.currentStore.messageList = [];
this.currentStore.messageList = middleData;
}
});
}
/**
* 发送消息已读回执
* Send message read receipt
*
* @param {Array} messageList 同一个 C2C 或 GROUP 会话的消息列表,最大长度为30/A list of messages for the same C2C or GROUP conversation, with a maximum length of 30
* @returns {Promise}
*/
public async sendMessageReadReceipt(messageList: Array<any>) {
return this.handlePromiseCallback(async (resolve: any, reject: any) => {
try {
const imResponse: any = await this.TUICore.tim.sendMessageReadReceipt(messageList);
resolve(imResponse);
} catch (error) {
reject(error);
}
});
}
/**
* 拉取已读回执列表
* Pull read receipt list
*
* @param {Array} messageList 同一群会话的消息列表/The message list of the same group of the conversation
* @returns {Promise}
*/
public async getMessageReadReceiptList(messageList: Array<any>) {
return this.handlePromiseCallback(async (resolve: any, reject: any) => {
try {
const imResponse: any = await this.TUICore.tim.getMessageReadReceiptList(messageList);
resolve(imResponse);
} catch (error) {
reject(error);
}
});
}
/**
* /////////////////////////////////////////////////////////////////////////////////
* //
* // 对外方法
* //
* /////////////////////////////////////////////////////////////////////////////////
*/
/**
* 获取 messageList
* get messagelist
*
* @param {any} options 获取 messageList 参数/messageList options
* @param {Boolean} history 是否获取历史消息/Whether to get historical information
* @returns {Promise}
*/
public async getMessageList(options: any, history?: boolean) {
return this.handlePromiseCallback(async (resolve: any, reject: any) => {
try {
const imResponse = await this.TUICore.tim.getMessageList(options);
if (imResponse.data.messageList.length) {
await this.getMessageReadReceiptList(imResponse.data.messageList);
}
if (!history) {
this.currentStore.messageList = imResponse.data.messageList;
} else {
this.currentStore.messageList = [...imResponse.data.messageList, ...this.currentStore.messageList];
// localStorage.setItem('oldMessageIndex', imResponse.data.messageList.toString())
}
this.currentStore.nextReqMessageID = imResponse.data.nextReqMessageID;
this.currentStore.isCompleted = imResponse.data.isCompleted;
resolve(imResponse);
} catch (error) {
reject(error);
}
});
}
/**
* 获取历史消息
* get history messagelist
*
* @returns {Promise}
*/
public async getHistoryMessageList() {
const options = {
conversationID: this.currentStore.conversation.conversationID,
nextReqMessageID: this.currentStore.nextReqMessageID,
count: 15,
};
if (!this.currentStore.isCompleted) {
this.getMessageList(options, true);
}
}
/**
* 发送文本消息
* send text message
*
* @param {any} text 发送的消息/text message
* @param {object} data 被引用消息的内容/The content of the quoted message
* @returns {Promise}
*/
public sendTextMessage(text: any, data: any): Promise<any> {
return this.handlePromiseCallback(async (resolve: any, reject: any) => {
try {
if (localStorage.getItem("conversationEnd") === 'true') {
await this.renewSession()
}
const options = this.handleMessageOptions({ text }, 'text');
let cloudCustomDataObj = {};
if (options.cloudCustomData) {
try {
cloudCustomDataObj = JSONToObject(options.cloudCustomData);
} catch {
cloudCustomDataObj = {};
}
}
const cloudCustomData = JSON.stringify(data);
const secondOptions = Object.assign(options, { cloudCustomData, ...cloudCustomDataObj });
const message = this.TUICore.tim.createTextMessage(secondOptions);
this.currentStore.messageList.push(message);
const imResponse = await this.TUICore.tim.sendMessage(message);
this.currentStore.messageList = this.currentStore.messageList.map((item: any) => {
if (item.ID === imResponse.data.message.ID) {
return imResponse.data.message;
}
return item;
});
resolve(imResponse);
} catch (error) {
reject(error);
const middleData = this.currentStore.messageList;
this.currentStore.messageList = [];
this.currentStore.messageList = middleData;
}
});
}
/**
* 发送【对方正在输入中】在线自定义消息
* send typing online custom message
*
* @param {Object} data 消息内容/message content
* @param {String} data.data 自定义消息的数据字段/custom message data field
* @param {String} data.description 自定义消息的说明字段/custom message description field
* @param {String} data.extension 自定义消息的扩展字段/custom message extension field
* @returns {Promise}
*/
public sendTypingMessage(data: any): Promise<any> {
return this.handlePromiseCallback(async (resolve: any, reject: any) => {
try {
data.data = JSON.stringify(data.data);
const options = this.handleMessageOptions(data, 'custom');
const message = this.TUICore.tim.createCustomMessage(options);
const imResponse = await this.TUICore.tim.sendMessage(message, { onlineUserOnly: true });
resolve(imResponse);
} catch (error) {
reject(error);
const middleData = this.currentStore.messageList;
this.currentStore.messageList = [];
this.currentStore.messageList = middleData;
}
});
}
/**
* 发送@ 提醒功能的文本消息
* Send @ Reminder text message
*
* @param {any} data 消息内容/message content
* @param {String} data.text 文本消息/text message
* @param {Array} data.atUserList 需要 @ 的用户列表,如果需要 @ALL,请传入 TIM.TYPES.MSG_AT_ALL / List of users who need @, if you need @ALL, please pass in TIM.TYPES.MSG_AT_ALL
* @returns {message}
*
* - 注:此接口仅用于群聊/This interface is only used for group chat
*/
public sendTextAtMessage(data: any) {
return this.handlePromiseCallback(async (resolve: any, reject: any) => {
try {
const options = this.handleMessageOptions(data, 'text');
const message = this.TUICore.tim.createTextAtMessage(options);
this.currentStore.messageList.push(message);
const imResponse = await this.TUICore.tim.sendMessage(message);
this.currentStore.messageList = this.currentStore.messageList.map((item: any) => {
if (item.ID === imResponse.data.message.ID) {
return imResponse.data.message;
}
return item;
});
resolve(imResponse);
} catch (error) {
reject(error);
const middleData = this.currentStore.messageList;
this.currentStore.messageList = [];
this.currentStore.messageList = middleData;
}
});
}
/**
* 发送合并消息
* send merger message
*
* @param {Object} data 消息内容/message content
* @param {Array.<Message>} data.messageList 合并的消息列表/merger message list
* @param {String} data.title 合并的标题/merger title
* @param {String} data.abstractList 摘要列表,不同的消息类型可以设置不同的摘要信息/Summary list, different message types can set different summary information
* @param {String} data.compatibleText 兼容文本/ompatible text
* @returns {Promise}
*/
public sendMergerMessage(data: any): Promise<any> {
return this.handlePromiseCallback(async (resolve: any, reject: any) => {
try {
const options = this.handleMessageOptions(data, 'merger');
const message = this.TUICore.tim.createMergerMessage(options);
this.currentStore.messageList.push(message);
const imResponse = await this.TUICore.tim.sendMessage(message);
this.currentStore.messageList = this.currentStore.messageList.map((item: any) => {
if (item.ID === imResponse.data.message.ID) {
return imResponse.data.message;
}
return item;
});
resolve(imResponse);
} catch (error) {
reject(error);
const middleData = this.currentStore.messageList;
this.currentStore.messageList = [];
this.currentStore.messageList = middleData;
}
});
}
/**
* 消息撤回
* revoke message
*
* @param {message} message 消息实例/message
* @returns {Promise}
*/
public revokeMessage(message: any): Promise<any> {
return this.handlePromiseCallback(async (resolve: any, reject: any) => {
try {
const imResponse = await this.TUICore.tim.revokeMessage(message);
resolve(imResponse);
} catch (error) {
reject(error);
const middleData = this.currentStore.messageList;
this.currentStore.messageList = [];
this.currentStore.messageList = middleData;
}
});
}
/**
* 重发消息
* resend message
*
* @param {message} message 消息实例/message
* @returns {Promise}
*/
public resendMessage(message: any): Promise<any> {
return this.handlePromiseCallback(async (resolve: any, reject: any) => {
try {
const imResponse = await this.TUICore.tim.resendMessage(message);
this.currentStore.messageList = this.currentStore.messageList.filter((item: any) => item.ID !== message.ID);
this.currentStore.messageList.push(imResponse.data.message);
resolve(imResponse);
} catch (error) {
reject(error);
}
});
}
/**
* 删除消息
* delete message
*
* @param {Array.<message>} messages 消息实例/message
* @returns {Promise}
*/
public deleteMessage(messages: any): Promise<any> {
return this.handlePromiseCallback(async (resolve: any, reject: any) => {
try {
const imResponse = await this.TUICore.tim.deleteMessage(messages);
resolve(imResponse);
const middleData = this.currentStore.messageList;
this.currentStore.messageList = [];
this.currentStore.messageList = middleData;
} catch (error) {
reject(error);
}
});
}
/**
* 获取群组属性
* get group profile
*
* @param {any} options 参数
* @param {String} options.groupID 群组ID
* @param {Array.<String>} options.groupProfileFilter 群资料过滤器
* @returns {Promise}
*/
public getGroupProfile(options: any): Promise<any> {
return this.handlePromiseCallback(async (resolve: any, reject: any) => {
try {
const imResponse = await this.TUICore.tim.getGroupProfile(options);
this.currentStore.conversation.groupProfile = imResponse.data.group;
resolve(imResponse);
} catch (error) {
reject(error);
}
});
}
/**
* 获取群成员资料
* get group member profile
*
* @param {any} options 参数
* @param {String} options.groupID 群组ID
* @param {Array.<String>} options.userIDList 要查询的群成员用户 ID 列表
* @param { Array.<String>} options.memberCustomFieldFilter 群成员自定义字段筛选
* @returns {Promise}
*/
public getGroupMemberProfile(options: any): Promise<any> {
return this.handlePromiseCallback(async (resolve: any, reject: any) => {
try {
const imResponse = await this.TUICore.tim.getGroupMemberProfile(options);
resolve(imResponse);
} catch (error) {
reject(error);
}
});
}
/**
* 处理申请加群
* handling group application
* - 管理员
* administrator
*
* @param {any} options 参数
* @param {String} options.handleAction 处理结果 Agree(同意) / Reject(拒绝)
* @param {String} options.handleMessage 附言
* @param {Message} options.message 对应【群系统通知】的消息实例
* @returns {Promise}
*/
public handleGroupApplication(options: any): Promise<any> {
return this.handlePromiseCallback(async (resolve: any, reject: any) => {
try {
const imResponse = await this.TUICore.tim.handleGroupApplication(options);
resolve(imResponse);
} catch (error) {
reject(error);
}
});
}
/**
* 获取其他用户资料
* get user profile
*
* @param {Array<string>} userIDList 用户的账号列表/userID list
* @returns {Promise}
*/
public async getUserProfile(userIDList: Array<string>) {
return this.handlePromiseCallback(async (resolve: any, reject: any) => {
try {
const imResponse = await this.TUICore.tim.getUserProfile({ userIDList });
resolve(imResponse);
} catch (error) {
reject(error);
}
});
}
/**
* 获取 SDK 缓存的好友列表
* Get the friend list cached by the SDK
*
* @param {Array<string>} userIDList 用户的账号列表
* @returns {Promise}
*/
public async getFriendList(): Promise<void> {
return this.handlePromiseCallback(async (resolve: any, reject: any) => {
try {
const imResponse = await this.TUICore.tim.getFriendList();
resolve(imResponse);
} catch (error) {
reject(error);
}
});
}
/**
* 获取群消息已读成员列表
* Get the list of memebers who have read the group message.
*
* @param {message} message 消息实例/message
* @param {string} cursor 分页拉取的游标,第一次拉取传''/Paging pull the cursor,first pull pass ''
* @param {number} count 分页拉取的个数/The number of page pulls
* @returns {Promise}
*/
public async getGroupReadMemberList(message: any, cursor = '', count = 15): Promise<any> {
return this.handlePromiseCallback(async (resolve: any, reject: any) => {
try {
const imResponse = await this.TUICore.tim.getGroupMessageReadMemberList({
message,
filter: 0,
cursor,
count,
});
resolve(imResponse);
} catch (error) {
reject(error);
}
});
}
/**
* 获取群消息未读成员列表
* Get the list of memebers who have not read the group message.
*
* @param {message} message 消息实例/message
* @param {string} cursor 分页拉取的游标,第一次拉取传''/Paging pull the cursor,first pull pass ''
* @param {number} count 分页拉取的个数/The number of page pulls
* @returns {Promise}
*/
public async getGroupUnreadMemberList(message: any, cursor = '', count = 15): Promise<any> {
return this.handlePromiseCallback(async (resolve: any, reject: any) => {
try {
const imResponse = await this.TUICore.tim.getGroupMessageReadMemberList({
message,
filter: 1,
cursor,
count,
});
resolve(imResponse);
} catch (error) {
reject(error);
}
});
}
/**
* 自己发送消息上屏显示
*
* @param {message} message 消息实例/message
*/
public async handleMessageSentByMeToView(message: any) {
if (message?.conversationID === this?.store?.conversation?.conversationID) {
this.currentStore.messageList.push(message);
}
return;
}
/**
* /////////////////////////////////////////////////////////////////////////////////
* //
* // UI 数据绑定server数据同步
* // UI data binding server data synchronization
* //
* /////////////////////////////////////////////////////////////////////////////////
*/
/**
* 赋值
* bind
*
* @param {Object} params 使用的数据/params
* @returns {Object} 数据/data
*/
public bind(params: any) {
console.log(this.currentStore, 'this.currentStore');
return (this.currentStore = params);
}
}