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

90 lines
2.4 KiB
TypeScript

import type { Group, Message } from '@tencentcloud/lite-chat/basic';
import type { GroupMember, IGroupStore } from '../../interface/store';
import type { IGroupModel } from '../../interface/model';
import GroupModel from '../../model/group';
export default class GroupStore implements IGroupStore {
public store: {
currentGroupID: string;
currentGroup: IGroupModel | undefined;
currentGroupAttributes: Record<string, any>;
currentGroupCounters: Record<string, number>;
currentGroupMemberList: GroupMember[];
groupList: IGroupModel[];
groupSystemNoticeList: Message[]; // 下发给个人的群系统通知
isCompleted: boolean;
offset: number;
[key: string]: any;
};
public defaultStore = {
currentGroupID: '',
currentGroup: {},
currentGroupAttributes: {},
currentGroupCounters: {},
currentGroupMemberList: [],
groupList: [],
groupSystemNoticeList: [],
isCompleted: false,
offset: 0,
} as any;
constructor() {
this.store = {
currentGroupID: '',
currentGroup: undefined,
currentGroupAttributes: {},
currentGroupCounters: {},
currentGroupMemberList: [],
groupList: [],
groupSystemNoticeList: [],
isCompleted: false,
offset: 0,
};
}
update(key: string, data: any) {
switch (key) {
case 'groupList':
this.updateGroupList(data);
break;
case 'currentGroup':
if (data instanceof GroupModel) {
this.store.currentGroup = data;
} else {
this.store.currentGroup = new GroupModel(data);
}
break;
default:
this.store[key] = data;
}
}
getData(key: string) {
if (key === 'groupSystemNoticeList') {
const groupSystemNoticeList = [...this.store.groupSystemNoticeList];
// 群系统通知给 UI 后立即清空
this.store.groupSystemNoticeList.length = 0;
return groupSystemNoticeList;
}
return this.store[key];
}
reset(keyList: string[] = []) {
this.store = {
...this.defaultStore,
...this.store,
...keyList.reduce((acc, key) => ({ ...acc, [key]: this.defaultStore[key] }), {}),
};
}
private updateGroupList(list: any[]) {
this.store.groupList = list.map((item: Group | GroupModel) => {
if (item instanceof GroupModel) {
return item;
}
return new GroupModel(item);
});
}
}