@chatscope/use-chat
Version:
React hook for state management in chat applications
178 lines (154 loc) • 4.54 kB
text/typescript
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;
}