UNPKG

@chatscope/use-chat

Version:

React hook for state management in chat applications

127 lines (126 loc) 4.66 kB
import { ChatState, ConversationId, UserId } from "../Types"; import { ChatMessage, Conversation, GroupIdGenerator, MessageContentType, MessageIdGenerator, Participant, Presence } from "../"; import { User } from "../User"; export interface IStorage<ConversationData = any, UserData = any> { readonly groupIdGenerator: GroupIdGenerator; readonly messageIdGenerator?: MessageIdGenerator; getState: () => ChatState; /** * Sets current (logged in) user object * @param user */ setCurrentUser: (user: User<UserData>) => void; /** * Add user to collection of users. * User will be added only when item with its id not exists in the collection. * Returns true if user has been added, otherwise returns false. * @param user */ addUser: (user: User<UserData>) => boolean; /** * Remove user from users collection. * If the participant existed and has been removed, it returns true, otherwise it returns false * @param userId */ removeUser: (userId: UserId) => boolean; /** * Get user by id * @param userId * @return [User, number]|[undefined,undefined] */ getUser: (userId: UserId) => [User<UserData>, number] | [undefined, undefined]; /** * Set active conversation and reset unread counter of this conversation if second parameter is set. * Why active conversation is kept here in storage? * Because it's easy to persist whole storage and recreate from persistent state. * @param conversationId * @param resetUnreadCounter */ setActiveConversation: (conversationId?: ConversationId, resetUnreadCounter?: boolean) => void; /** * Add message to collection of messages * @param message * @param conversationId * @param generateId */ addMessage: (message: ChatMessage<MessageContentType>, conversationId: ConversationId, generateId: boolean) => ChatMessage<MessageContentType>; /** * Add conversation to collection of conversations. * Conversation will be added only when item with its id not exists in the collection. * @param conversation */ addConversation: (conversation: Conversation<ConversationData>) => boolean; /** * Set unread messages for conversation * @param conversationId * @param count */ setUnread: (conversationId: ConversationId, count: number) => void; /** * Remove conversation from conversations collection. * If the conversation existed and has been removed, it returns true, otherwise it returns false * @param conversationId * @param removeMessages */ removeConversation: (conversationId: ConversationId, removeMessages: boolean) => boolean; /** * Replace the conversation in the collection with the new one specified in the parameter * @param conversation */ updateConversation: (conversation: Conversation) => void; /** * Get conversation by id * @param conversationId * @return [Conversation, number]|[undefined, undefined] */ getConversation: (conversationId: ConversationId) => [Conversation<ConversationData>, number] | [undefined, undefined]; /** * Add participant to conversation * @param conversationId * @param participant */ addParticipant: (conversationId: ConversationId, participant: Participant) => void; /** * Remove participant from conversation * If the participant existed and has been removed, it returns true, otherwise it returns false * @param conversationId * @param participantId * @returns boolean */ removeParticipant: (conversationId: ConversationId, participantId: UserId) => boolean; /** * Set user presence * @param userId * @param presence */ setPresence: (userId: UserId, presence: Presence) => void; /** * Set draft of message in current conversation * @param {String} draft */ setDraft: (draft: string) => void; /** * Update message * @param message * @param index */ updateMessage: (message: ChatMessage<MessageContentType>) => void; /** * Reset state to default */ resetState: () => void; /** * Set every collections and properties of internal state to empty values */ clearState: () => void; /** * Set current message input value * @param message */ setCurrentMessage: (message: string) => void; /** * Remove all the messages from the conversation * @param conversationId */ removeMessagesFromConversation: (conversationId: ConversationId) => void; }