UNPKG

@ant-design/x-sdk

Version:

placeholder for @ant-design/x-sdk

104 lines (103 loc) 3.08 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.conversationStoreHelper = exports.ConversationStore = void 0; var _store = require("../x-chat/store"); /** * We manage all conversation stores here, so that useXChat can get the conversation data by conversationKey. */ const conversationStoreHelper = exports.conversationStoreHelper = { _allConversationStores: new Map(), set: (key, store) => { conversationStoreHelper._allConversationStores.set(key, store); }, delete: key => { conversationStoreHelper._allConversationStores.delete(key); }, getConversation: conversationKey => { for (const store of conversationStoreHelper._allConversationStores.values()) { if (store) { const conversation = store.getConversation(conversationKey); if (conversation) { return conversation; } } } } }; class ConversationStore { conversations = []; listeners = []; storeKey; activeConversationKey; emitListeners() { this.listeners.forEach(listener => { listener(); }); } constructor(defaultConversations, defaultActiveConversationKey) { this.setConversations(defaultConversations); this.storeKey = Math.random().toString(); conversationStoreHelper.set(this.storeKey, this); this.activeConversationKey = defaultActiveConversationKey; } setActiveConversationKey = key => { this.activeConversationKey = key; this.emitListeners(); return true; }; setConversations = list => { this.conversations = [...list]; this.emitListeners(); return true; }; getConversation = key => { return this.conversations.find(item => item.key === key); }; addConversation = (conversation, placement) => { const exist = this.getConversation(conversation.key); if (!exist) { this.setConversations(placement === 'prepend' ? [conversation, ...this.conversations] : [...this.conversations, conversation]); return true; } return false; }; setConversation = (key, conversation) => { const exist = this.getConversation(key); if (exist) { Object.assign(exist, conversation); this.setConversations([...this.conversations]); return true; } return false; }; removeConversation = key => { const index = this.conversations.findIndex(item => item.key === key); if (index !== -1) { this.conversations.splice(index, 1); this.setConversations([...this.conversations]); return true; } return false; }; getMessages = key => { return _store.chatMessagesStoreHelper.getMessages(key); }; getSnapshot = () => { return this.conversations; }; getActiveConversationKey = () => { return this.activeConversationKey; }; subscribe = callback => { this.listeners.push(callback); return () => { this.listeners = this.listeners.filter(listener => listener !== callback); }; }; destroy = () => { conversationStoreHelper.delete(this.storeKey); }; } exports.ConversationStore = ConversationStore;