press-ui
Version:
简单、易用的跨端组件库,兼容 Vue2 和 Vue3,同时支持 uni-app和普通 Vue 项目
92 lines (72 loc) • 1.82 kB
JavaScript
import { TIM } from './tim';
const EVENT_LIST = [
TIM.EVENT.SDK_READY,
TIM.EVENT.SDK_NOT_READY,
TIM.EVENT.TOTAL_UNREAD_MESSAGE_COUNT_UPDATED,
TIM.EVENT.MESSAGE_RECEIVED,
TIM.EVENT.MESSAGE_MODIFIED,
TIM.EVENT.MESSAGE_REVOKED,
TIM.EVENT.MESSAGE_READ_BY_PEER,
TIM.EVENT.MESSAGE_READ_RECEIPT_RECEIVED,
TIM.EVENT.CONVERSATION_LIST_UPDATED,
TIM.EVENT.GROUP_LIST_UPDATED,
TIM.EVENT.GROUP_ATTRIBUTES_UPDATED,
TIM.EVENT.TOPIC_CREATED,
TIM.EVENT.TOPIC_UPDATED,
TIM.EVENT.TOPIC_DELETED,
TIM.EVENT.PROFILE_UPDATED,
TIM.EVENT.BLACKLIST_UPDATED,
TIM.EVENT.FRIEND_LIST_UPDATED,
TIM.EVENT.FRIEND_GROUP_LIST_UPDATED,
TIM.EVENT.FRIEND_APPLICATION_LIST_UPDATED,
TIM.EVENT.ERROR,
TIM.EVENT.NET_STATE_CHANGE,
TIM.EVENT.KICKED_OUT,
];
function onReady(event, tim) {
tim.updateReadyStatus(true);
}
function onNotReady(event, tim) {
tim.updateReadyStatus(false);
}
function onKickOut(event, tim) {
tim.updateOnlineStatus(false);
}
const eventListenerMap = {
[TIM.EVENT.SDK_READY]: [onReady],
[TIM.EVENT.SDK_NOT_READY]: [onNotReady],
[TIM.EVENT.KICKED_OUT]: [onKickOut],
};
function executeCallbacks({
type,
event,
tim,
}) {
if (!eventListenerMap[type]) return;
for (const cb of eventListenerMap[type]) {
if (typeof cb === 'function') {
cb.call({ tim }, event, tim);
}
}
}
export function watchIMEvent({ tim }) {
EVENT_LIST.forEach((type) => {
const callbackFunc = function (event) {
executeCallbacks({
type,
event,
tim,
});
};
tim.on(type, callbackFunc);
});
}
export function setEventListener(type, cb) {
if (eventListenerMap[type]) {
if (eventListenerMap[type].indexOf(cb) === -1) {
eventListenerMap[type].push(cb);
}
} else {
eventListenerMap[type] = [cb];
}
}