@tencentcloud/roomkit-web-vue3
Version:
<h1 align="center"> TUIRoomKit</h1> Conference (TUIRoomKit) is a product suitable for multi-person audio and video conversation scenarios such as business meetings, webinars, and online education. By integrating this product, you can add room management,
74 lines (70 loc) • 1.91 kB
text/typescript
import { defineStore } from 'pinia';
interface MessageItem {
ID: string;
type: string;
payload: {
text: string;
};
nick: string;
from: string;
flow: string;
sequence: number;
}
interface ChatState {
messageList: MessageItem[];
isMessageDisabled: boolean;
unReadCount: number;
isCompleted: boolean;
// Is the list of all messages pulled
nextReqMessageId: string;
}
export const useChatStore = defineStore('chat', {
state: (): ChatState => ({
messageList: [],
isMessageDisabled: false,
unReadCount: 0,
isCompleted: false,
nextReqMessageId: '',
}),
getters: {},
actions: {
updateMessageList(message: MessageItem) {
const messageIds = this.messageList.map(message => message.ID);
if (messageIds.indexOf(message.ID) === -1) {
this.messageList = this.messageList.concat([message]);
}
},
setMessageListInfo(
messageList: MessageItem[],
isCompleted: boolean,
nextReqMessageId: string
) {
this.messageList = messageList;
this.isCompleted = isCompleted;
this.nextReqMessageId = nextReqMessageId;
},
updateUnReadCount(count: number) {
this.unReadCount = count;
},
addHistoryMessages(messageList: MessageItem[]) {
const messageIds = this.messageList.map(message => message.ID);
const filteredMessageList = messageList.filter(
message => messageIds.indexOf(message.ID) === -1
);
this.messageList = filteredMessageList
.concat(this.messageList)
.sort(
(messageA: MessageItem, messageB: MessageItem) =>
messageA.sequence - messageB.sequence
);
},
setSendMessageDisableChanged(isDisable: boolean) {
this.isMessageDisabled = isDisable;
},
reset() {
this.messageList = [];
this.unReadCount = 0;
this.isMessageDisabled = false;
},
},
});