Files
zyt/TUICallKit-Vue3/TUIKit/states/chat-uikit-engine-lite/TUIStore/store/user.ts
T
2026-03-11 09:49:47 +08:00

88 lines
2.3 KiB
TypeScript

import type { IUserStore } from '../../interface/store';
import { UserStatus } from '../../const';
interface IBlackUser {
userID: string;
nick: string;
avatar: string;
}
export default class UserStore implements IUserStore {
public store: {
userProfile: object;
displayOnlineStatus: boolean;
displayMessageReadReceipt: boolean;
userStatusList: Map<string, {
statusType: number;
customStatus: string;
}>;
kickedOut: string;
netStateChange: string;
userBlacklist: IBlackUser[];
targetLanguage: string;
[key: string]: any;
};
public defaultStore = {
userProfile: {},
displayOnlineStatus: false,
displayMessageReadReceipt: true,
userStatusList: new Map(),
kickedOut: '',
netStateChange: '',
userBlacklist: [],
targetLanguage: 'zh',
} as any;
constructor() {
this.store = {
userProfile: {},
displayOnlineStatus: false, // 默认关闭在线状态功能,防止专业版集成引起报错
displayMessageReadReceipt: true, // 默认在用户纬度开启消息阅读状态功能
userStatusList: new Map(), // 获取/订阅/取消订阅用户状态的 userID 列表
kickedOut: '',
netStateChange: '',
userBlacklist: [],
targetLanguage: 'zh',
};
}
update(key: string, data: any) {
switch (key) {
case 'userStatusList':
this.updateUserStatusList(data);
break;
default:
this.store[key] = data;
}
}
getData(key: string) {
return this.store[key];
}
reset(keyList: string[] = []) {
this.store = {
...this.defaultStore,
...this.store,
...keyList.reduce((acc, key) => ({ ...acc, [key]: this.defaultStore[key] }), {}),
};
}
private updateUserStatusList(list: any[]) {
if (list.length === 0) {
this.store.userStatusList.clear();
return;
}
list.forEach((item: { userID: string; statusType: number; customStatus: string }) => {
const { userID, statusType = 0, customStatus = '' } = item;
// statusType = -1 表示该用户已被取消订阅,内部约定规则
if (statusType === UserStatus.UNSUB_USER) {
this.store.userStatusList.delete(userID);
} else {
this.store.userStatusList.set(userID, { statusType, customStatus });
}
});
}
}