UNPKG

@sendbird/uikit-react

Version:

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

126 lines (125 loc) 6.21 kB
import React from 'react'; import type { GroupChannel, Member } from '@sendbird/chat/groupChannel'; import type { BaseMessage, FileMessage, FileMessageCreateParams, MultipleFilesMessage, MultipleFilesMessageCreateParams, UserMessage, UserMessageCreateParams, UserMessageUpdateParams, MessageListParams as SDKMessageListParams } from '@sendbird/chat/message'; import type { EmojiContainer, SendbirdError, User } from '@sendbird/chat'; import { ReplyType, Nullable } from '../../../types'; import { UserProfileProviderProps } from '../../../lib/UserProfileContext'; import { CoreMessageType, SendableMessageType } from '../../../utils'; import { ThreadReplySelectType } from './const'; import * as channelActions from './dux/actionTypes'; import { ChannelActionTypes } from './dux/actionTypes'; export { ThreadReplySelectType } from './const'; export interface MessageListParams extends Partial<SDKMessageListParams> { /** @deprecated It won't work even if you activate this props */ reverse?: boolean; } export type ChannelQueries = { messageListParams?: MessageListParams; }; export interface ChannelContextProps extends Pick<UserProfileProviderProps, 'disableUserProfile' | 'renderUserProfile'> { children?: React.ReactElement; channelUrl: string; isReactionEnabled?: boolean; isMessageGroupingEnabled?: boolean; isMultipleFilesMessageEnabled?: boolean; showSearchIcon?: boolean; animatedMessage?: number | null; highlightedMessage?: number | null; startingPoint?: number | null; onBeforeSendUserMessage?(text: string, quotedMessage?: SendableMessageType): UserMessageCreateParams; onBeforeSendFileMessage?(file: File, quotedMessage?: SendableMessageType): FileMessageCreateParams; onBeforeUpdateUserMessage?(text: string): UserMessageUpdateParams; onBeforeSendVoiceMessage?: (file: File, quotedMessage?: SendableMessageType) => FileMessageCreateParams; onBeforeSendMultipleFilesMessage?: (files: Array<File>, quotedMessage?: SendableMessageType) => MultipleFilesMessageCreateParams; onChatHeaderActionClick?(event: React.MouseEvent<HTMLElement>): void; onSearchClick?(): void; onBackClick?(): void; replyType?: ReplyType; threadReplySelectType?: ThreadReplySelectType; queries?: ChannelQueries; filterMessageList?(messages: BaseMessage): boolean; disableMarkAsRead?: boolean; onReplyInThread?: (props: { message: SendableMessageType; }) => void; onQuoteMessageClick?: (props: { message: SendableMessageType; }) => void; onMessageAnimated?: () => void; onMessageHighlighted?: () => void; scrollBehavior?: 'smooth' | 'auto'; reconnectOnIdle?: boolean; } interface MessageStoreInterface { allMessages: CoreMessageType[]; localMessages: CoreMessageType[]; loading: boolean; initialized: boolean; /** @deprecated Please use `unreadSinceDate` instead * */ unreadSince: string; unreadSinceDate: Date | null; isInvalid: boolean; currentGroupChannel: Nullable<GroupChannel>; hasMorePrev: boolean; oldestMessageTimeStamp: number; hasMoreNext: boolean; latestMessageTimeStamp: number; emojiContainer: EmojiContainer; readStatus: any; typingMembers: Member[]; } interface SendMessageParams { message: string; quoteMessage?: SendableMessageType; mentionedUsers?: User[]; mentionTemplate?: string; } interface UpdateMessageParams { messageId: number; message: string; mentionedUsers?: User[]; mentionTemplate?: string; } export type SendMessageType = (params: SendMessageParams) => void; export type UpdateMessageType = (props: UpdateMessageParams, callback?: (err: SendbirdError, message: UserMessage) => void) => void; export interface ChannelProviderInterface extends ChannelContextProps, MessageStoreInterface { scrollToMessage(createdAt: number, messageId: number): void; isScrolled?: boolean; setIsScrolled?: React.Dispatch<React.SetStateAction<boolean>>; messageActionTypes: typeof channelActions; messagesDispatcher: React.Dispatch<ChannelActionTypes>; quoteMessage: SendableMessageType | null; setQuoteMessage: React.Dispatch<React.SetStateAction<SendableMessageType | null>>; initialTimeStamp: number | null | undefined; setInitialTimeStamp: React.Dispatch<React.SetStateAction<number | null | undefined>>; animatedMessageId: number | null; highLightedMessageId: number | null | undefined; nicknamesMap: Map<string, string>; emojiAllMap: any; onScrollCallback: (callback: () => void) => void; onScrollDownCallback: (callback: (param: [BaseMessage[], null] | [null, unknown]) => void) => void; scrollRef: React.RefObject<HTMLDivElement>; setAnimatedMessageId: React.Dispatch<React.SetStateAction<number | null>>; setHighLightedMessageId: React.Dispatch<React.SetStateAction<number | null | undefined>>; messageInputRef: React.RefObject<HTMLInputElement>; deleteMessage(message: CoreMessageType): Promise<void>; updateMessage: UpdateMessageType; resendMessage(failedMessage: SendableMessageType): void; sendMessage: SendMessageType; sendFileMessage: (file: File, quoteMessage?: SendableMessageType) => Promise<FileMessage>; sendVoiceMessage: (file: File, duration: number, quoteMessage?: SendableMessageType) => Promise<FileMessage>; sendMultipleFilesMessage: (files: Array<File>, quoteMessage?: SendableMessageType) => Promise<MultipleFilesMessage>; toggleReaction(message: SendableMessageType, emojiKey: string, isReacted: boolean): void; renderUserMentionItem?: (props: { user: User; }) => JSX.Element; } /** * @deprecated This provider is deprecated and will be removed in the next major update. * Please use the `GroupChannelProvider` from '@sendbird/uikit-react/GroupChannel' instead. * For more information, please refer to the migration guide: * https://docs.sendbird.com/docs/chat/uikit/v3/react/introduction/group-channel-migration-guide */ declare const ChannelProvider: (props: ChannelContextProps) => React.JSX.Element; declare const useChannelContext: () => ChannelProviderInterface; export { ChannelProvider, useChannelContext, };