UNPKG

@kgdata/use-chat

Version:
78 lines (71 loc) 2.15 kB
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)); } }