@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
TypeScript
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;
};