UNPKG

@sendbird/uikit-react

Version:

Sendbird UIKit for React: A feature-rich and customizable chat UI kit with messaging, channel management, and user authentication.

133 lines (132 loc) 7.93 kB
import React from 'react'; import { type EmojiCategory, EmojiContainer } from '@sendbird/chat'; import { GroupChannel, Member } from '@sendbird/chat/groupChannel'; import type { FileMessageCreateParams, MultipleFilesMessageCreateParams, UserMessageCreateParams } from '@sendbird/chat/message'; import { UserProfileProviderProps } from '../../../lib/UserProfileContext'; import type { OnBeforeDownloadFileMessageType } from '../../GroupChannel/context/types'; import { CoreMessageType, SendableMessageType } from '../../../utils'; import { ChannelStateTypes, ParentMessageStateTypes, ThreadListStateTypes } from '../types'; export interface ThreadProviderProps extends Pick<UserProfileProviderProps, 'disableUserProfile' | 'renderUserProfile'> { children?: React.ReactElement; channelUrl: string; message: SendableMessageType | null; onHeaderActionClick?: () => void; onMoveToParentMessage?: (props: { message: SendableMessageType; channel: GroupChannel; }) => void; onBeforeSendUserMessage?: (message: string, quotedMessage?: SendableMessageType) => UserMessageCreateParams; onBeforeSendFileMessage?: (file: File, quotedMessage?: SendableMessageType) => FileMessageCreateParams; onBeforeSendVoiceMessage?: (file: File, quotedMessage?: SendableMessageType) => FileMessageCreateParams; onBeforeSendMultipleFilesMessage?: (files: Array<File>, quotedMessage?: SendableMessageType) => MultipleFilesMessageCreateParams; onBeforeDownloadFileMessage?: OnBeforeDownloadFileMessageType; isMultipleFilesMessageEnabled?: boolean; filterEmojiCategoryIds?: (message: SendableMessageType) => EmojiCategory['id'][]; } export interface ThreadState extends ThreadProviderProps { currentChannel: GroupChannel; allThreadMessages: Array<CoreMessageType>; localThreadMessages: Array<CoreMessageType>; parentMessage: SendableMessageType; channelState: ChannelStateTypes; parentMessageState: ParentMessageStateTypes; threadListState: ThreadListStateTypes; hasMorePrev: boolean; hasMoreNext: boolean; emojiContainer: EmojiContainer; isMuted: boolean; isChannelFrozen: boolean; currentUserId: string; typingMembers: Member[]; nicknamesMap: Map<string, string>; } export declare const ThreadContext: React.Context<import("../../../utils/storeManager").Store<ThreadState>>; export declare const InternalThreadProvider: React.FC<React.PropsWithChildren<unknown>>; export declare const ThreadManager: React.FC<React.PropsWithChildren<ThreadProviderProps>>; export declare const ThreadProvider: (props: ThreadProviderProps) => React.JSX.Element; export declare const useThreadContext: () => { initializeThreadFetcher: (callback?: (messages: import("@sendbird/chat/message").BaseMessage[]) => void) => Promise<void>; fetchPrevThreads: (callback?: (messages: import("@sendbird/chat/message").BaseMessage[]) => void) => Promise<void>; fetchNextThreads: (callback?: (messages: import("@sendbird/chat/message").BaseMessage[]) => void) => Promise<void>; initializeThreadListStart: () => void; initializeThreadListSuccess: (parentMessage: import("@sendbird/chat/message").BaseMessage, anchorMessage: SendableMessageType, threadedMessages: import("@sendbird/chat/message").BaseMessage[]) => void; initializeThreadListFailure: () => void; getPrevMessagesStart: () => void; getPrevMessagesSuccess: (threadedMessages: CoreMessageType[]) => void; getPrevMessagesFailure: () => void; getNextMessagesStart: () => void; getNextMessagesSuccess: (threadedMessages: CoreMessageType[]) => void; getNextMessagesFailure: () => void; updateMessage: (props: { messageId: number; message: string; mentionedUsers?: import("@sendbird/chat").User[]; mentionTemplate?: string; }) => void; deleteMessage: (message: SendableMessageType) => Promise<void>; onMessageUpdated: (channel: GroupChannel, message: SendableMessageType) => void; onMessageDeleted: (channel: GroupChannel, messageId: number) => void; onMessageDeletedByReqId: (reqId: string | number) => void; sendMessage: (props: import("./hooks/useSendUserMessageCallback").SendMessageParams) => void; sendFileMessage: import("./hooks/useSendFileMessage").SendFileMessageFunctionType; sendVoiceMessage: (file: File, duration: number, quoteMessage: SendableMessageType) => void; sendMultipleFilesMessage: import("./hooks/useSendMultipleFilesMessage").SendMFMFunctionType; resendMessage: (failedMessage: SendableMessageType) => void; sendMessageStart: (message: SendableMessageType) => void; sendMessageSuccess: (message: SendableMessageType) => void; sendMessageFailure: (message: SendableMessageType) => void; resendMessageStart: (message: SendableMessageType) => void; toggleReaction: (message: import("@sendbird/chat/message").BaseMessage, key: string, isReacted: boolean) => void; setCurrentUserId: (currentUserId: string) => void; getChannelStart: () => void; getChannelSuccess: (groupChannel: GroupChannel) => void; getChannelFailure: () => void; getParentMessageStart: () => void; getParentMessageSuccess: (parentMessage: SendableMessageType) => void; getParentMessageFailure: () => void; setEmojiContainer: (emojiContainer: EmojiContainer) => void; onMessageReceived: (channel: GroupChannel, message: SendableMessageType) => void; onReactionUpdated: (reactionEvent: import("@sendbird/chat/message").ReactionEvent) => void; onUserMuted: (channel: GroupChannel, user: import("@sendbird/chat").User) => void; onUserUnmuted: (channel: GroupChannel, user: import("@sendbird/chat").User) => void; onUserBanned: () => void; onUserUnbanned: () => void; onUserLeft: () => void; onChannelFrozen: () => void; onChannelUnfrozen: () => void; onOperatorUpdated: (channel: GroupChannel) => void; onTypingStatusUpdated: (channel: GroupChannel, typingMembers: Member[]) => void; onFileInfoUpdated: ({ channelUrl, requestId, index, uploadableFileInfo, error, }: import("../types").FileUploadInfoParams) => void; currentChannel: GroupChannel; allThreadMessages: Array<CoreMessageType>; localThreadMessages: Array<CoreMessageType>; parentMessage: SendableMessageType; channelState: ChannelStateTypes; parentMessageState: ParentMessageStateTypes; threadListState: ThreadListStateTypes; hasMorePrev: boolean; hasMoreNext: boolean; emojiContainer: EmojiContainer; isMuted: boolean; isChannelFrozen: boolean; currentUserId: string; typingMembers: Member[]; nicknamesMap: Map<string, string>; children?: React.ReactElement; channelUrl: string; message: SendableMessageType | null; onHeaderActionClick?: () => void; onMoveToParentMessage?: (props: { message: SendableMessageType; channel: GroupChannel; }) => void; onBeforeSendUserMessage?: (message: string, quotedMessage?: SendableMessageType) => UserMessageCreateParams; onBeforeSendFileMessage?: (file: File, quotedMessage?: SendableMessageType) => FileMessageCreateParams; onBeforeSendVoiceMessage?: (file: File, quotedMessage?: SendableMessageType) => FileMessageCreateParams; onBeforeSendMultipleFilesMessage?: (files: Array<File>, quotedMessage?: SendableMessageType) => MultipleFilesMessageCreateParams; onBeforeDownloadFileMessage?: OnBeforeDownloadFileMessageType; isMultipleFilesMessageEnabled?: boolean; filterEmojiCategoryIds?: (message: SendableMessageType) => EmojiCategory['id'][]; renderUserProfile?: ((props: import("../../../types").RenderUserProfileProps) => React.ReactElement<any, string | React.JSXElementConstructor<any>>) & ((props: import("../../../types").RenderUserProfileProps) => React.ReactElement<any, string | React.JSXElementConstructor<any>>); disableUserProfile?: boolean; };