@kgdata/use-chat
Version:
use-chat
78 lines (71 loc) • 2.15 kB
text/typescript
import { IStorage } from './interface/IStorage';
import { ChatMessage } from './types/ChatMessage';
type BasicStorageProps = {
initMessageList: ChatMessage[];
};
export class BasicStorage implements IStorage {
constructor({ initMessageList }: BasicStorageProps) {
this.messageList = initMessageList;
}
messageList: ChatMessage[] = [];
/**
* 更新list
* @param messageList
* @return void
*/
setMessageList(messageList: ChatMessage[]) {
this.messageList = messageList;
return JSON.parse(JSON.stringify(this.messageList));
}
/*
* add list
*/
addMessageList(
message: ChatMessage | ChatMessage[],
addType: string = 'push',
) {
let addMessage = Array.isArray(message) ? message : [message];
if (addType === 'push') {
this.messageList = [...this.messageList, ...addMessage];
}
if (addType === 'unshift') {
this.messageList = [...addMessage, ...this.messageList];
}
return JSON.parse(JSON.stringify(this.messageList));
}
/*
*获取 list
*/
getMessageItem(key: string) {
const keyx = this.messageList.findIndex((message) => message.key === key);
if (keyx !== -1) {
return [this.messageList[keyx], keyx];
} else {
return [undefined, undefined];
}
}
getMessageList() {
return this.messageList;
}
/**
* Replace message in message collection
* @param message
*/
updateMessageItem(message: ChatMessage) {
const [foundMessage, idx] = this.getMessageItem(message.key);
if (foundMessage) {
this.messageList = this.messageList
.concat(this.messageList.slice(0, idx as number))
.concat(message)
.concat(this.messageList.slice((idx as number) + 1));
}
return JSON.parse(JSON.stringify(this.messageList));
}
removeMessageList(keys: string[] | string) {
let removMessage = Array.isArray(keys) ? keys : [keys];
this.messageList = this.messageList.filter(
(item) => !removMessage.includes(item.key),
);
return JSON.parse(JSON.stringify(this.messageList));
}
}