UNPKG

@chatscope/use-chat

Version:

React hook for state management in chat applications

78 lines (77 loc) 3.15 kB
import type { ReactNode } from "react"; import type { ChatServiceFactory, ChatState, ConversationId, SendTypingServiceParams, UserId } from "../Types"; import type { IChatService, IStorage } from "../interfaces"; import PropTypes from "prop-types"; import { AutoDraft, MessageContentType } from "../enums"; import type { Conversation } from "../Conversation"; import type { User } from "../User"; import type { ChatMessage } from "../ChatMessage"; import type { MessageGroup } from "../MessageGroup"; export interface SendMessageParams { message: ChatMessage<MessageContentType>; conversationId: ConversationId; senderId: string; generateId?: boolean; clearMessageInput?: boolean; } export interface SendTypingParams extends SendTypingServiceParams { throttle: boolean; } declare type ChatContextProps = ChatState & { currentMessages: MessageGroup[]; setCurrentUser: (user: User) => void; addUser: (user: User) => boolean; removeUser: (userId: UserId) => boolean; getUser: (userId: UserId) => User | undefined; setActiveConversation: (conversationId: ConversationId) => void; sendMessage: (params: SendMessageParams) => void; addMessage: (message: ChatMessage<MessageContentType>, conversationId: ConversationId, generateId: boolean) => void; updateMessage: (message: ChatMessage<MessageContentType>) => void; setDraft: (message: string) => void; sendTyping: (params: SendTypingParams) => void; addConversation: (conversation: Conversation) => void; removeConversation: (conversationId: ConversationId, removeMessages: boolean | undefined) => boolean; getConversation: (conversationId: ConversationId) => Conversation | undefined; updateState: () => void; setCurrentMessage: (message: string) => void; resetState: () => void; service: IChatService; removeMessagesFromConversation: (conversationId: ConversationId) => void; }; export declare const useChat: () => ChatContextProps; export interface ChatProviderConfig { typingThrottleTime?: number; typingDebounceTime?: number; debounceTyping?: boolean; autoDraft?: AutoDraft; } export interface ChatProviderProps<S extends IChatService> { serviceFactory: ChatServiceFactory<S>; storage: IStorage; config: ChatProviderConfig; children?: ReactNode; } /** * Provides methods to operate on chat and properties and collections of chat * @param children * @param {IChatService} service * @param {IStorage} storage * @constructor */ export declare const ChatProvider: { <S extends IChatService>({ serviceFactory, storage, config: { typingThrottleTime, debounceTyping, typingDebounceTime, autoDraft, }, children, }: ChatProviderProps<S>): JSX.Element; defaultProps: { config: { typingThrottleTime: number; debounceTyping: boolean; typingDebounceTime: number; }; }; propTypes: { children: PropTypes.Requireable<PropTypes.ReactNodeLike>; service: PropTypes.Requireable<object>; storage: PropTypes.Requireable<object>; config: PropTypes.Requireable<object>; }; }; export {};