@@ -12,6 +12,7 @@ declare module "SendbirdUIKitGlobal" {
12
12
SessionHandler,
13
13
User,
14
14
ApplicationUserListQueryParams,
15
+ EmojiContainer,
15
16
} from '@sendbird/chat';
16
17
import type {
17
18
GroupChannel,
@@ -24,6 +25,7 @@ declare module "SendbirdUIKitGlobal" {
24
25
} from '@sendbird/chat/groupChannel';
25
26
import type {
26
27
AdminMessage,
28
+ BaseMessage,
27
29
FailedMessageHandler,
28
30
FileMessage,
29
31
FileMessageCreateParams,
@@ -268,6 +270,9 @@ declare module "SendbirdUIKitGlobal" {
268
270
resizingWidth?: number | string,
269
271
resizingHeight?: number | string,
270
272
};
273
+ isTypingIndicatorEnabledOnChannelList?: boolean;
274
+ isMessageReceiptStatusEnabledOnChannelList?: boolean;
275
+ replyType: ReplyType;
271
276
}
272
277
export interface SdkStore {
273
278
error: boolean;
@@ -453,6 +458,11 @@ declare module "SendbirdUIKitGlobal" {
453
458
messageListParams?: MessageListParams;
454
459
};
455
460
461
+ export enum ThreadReplySelectType {
462
+ PARENT = 'PARENT',
463
+ THREAD = 'THREAD',
464
+ }
465
+
456
466
export type ChannelContextProps = {
457
467
children?: React.ReactElement;
458
468
channelUrl: string;
@@ -468,6 +478,7 @@ declare module "SendbirdUIKitGlobal" {
468
478
onSearchClick?(): void;
469
479
onBackClick?(): void;
470
480
replyType?: ReplyType;
481
+ threadReplySelectType?: ThreadReplySelectType;
471
482
queries?: ChannelQueries;
472
483
renderUserProfile?: (props: RenderUserProfileProps) => React.ReactNode | React.ReactElement;
473
484
disableUserProfile?: boolean;
@@ -868,6 +879,131 @@ declare module "SendbirdUIKitGlobal" {
868
879
onCloseClick?: () => void;
869
880
}
870
881
882
+ /**
883
+ * Thread
884
+ */
885
+ export enum ChannelStateTypes {
886
+ NIL = 'NIL',
887
+ LOADING = 'LOADING',
888
+ INVALID = 'INVALID',
889
+ INITIALIZED = 'INITIALIZED',
890
+ }
891
+ export enum ParentMessageInfoStateTypes {
892
+ NIL = 'NIL',
893
+ LOADING = 'LOADING',
894
+ INVALID = 'INVALID',
895
+ INITIALIZED = 'INITIALIZED',
896
+ }
897
+ export enum ThreadListStateTypes {
898
+ NIL = 'NIL',
899
+ LOADING = 'LOADING',
900
+ INVALID = 'INVALID',
901
+ INITIALIZED = 'INITIALIZED',
902
+ }
903
+
904
+ export interface ThreadProps extends ThreadProviderProps, ThreadContextInitialState {
905
+ className?: string;
906
+ }
907
+
908
+ export interface ThreadProviderInterface extends ThreadProviderProps, ThreadContextInitialState {
909
+ fetchPrevThreads: (callback?: (messages?: Array<BaseMessage>) => void) => void;
910
+ fetchNextThreads: (callback?: (messages?: Array<BaseMessage>) => void) => void;
911
+ toggleReaction: (message, key, isReacted) => void;
912
+ sendMessage: (props: {
913
+ message: UserMessage,
914
+ quoteMessage?: UserMessage | FileMessage,
915
+ mentionTemplate?: string,
916
+ mentionedUsers?: Array<User>,
917
+ }) => void;
918
+ sendFileMessage: (file: File, quoteMessage: UserMessage | FileMessage) => void;
919
+ resendMessage: (failedMessage: UserMessage | FileMessage) => void;
920
+ updateMessage: (props, callback?: () => void) => void;
921
+ deleteMessage: (message: UserMessage | FileMessage) => Promise<UserMessage | FileMessage>;
922
+ nicknamesMap: Map<string, string>;
923
+ }
924
+
925
+ export type ThreadProviderProps = {
926
+ children?: React.ReactElement;
927
+ channelUrl: string;
928
+ message: UserMessage | FileMessage;
929
+ onHeaderActionClick?: () => void;
930
+ onMoveToParentMessage?: (props: { message: UserMessage | FileMessage, channel: GroupChannel }) => void;
931
+ disableUserProfile?: boolean;
932
+ renderUserProfile?: (props: { user: User, close: () => void }) => React.ReactElement;
933
+ onUserProfileMessage?: (channel: GroupChannel) => void;
934
+ }
935
+
936
+ export interface ThreadContextInitialState {
937
+ currentChannel: GroupChannel;
938
+ allThreadMessages: Array<BaseMessage>;
939
+ parentMessage: UserMessage | FileMessage;
940
+ channelStatus: ChannelStateTypes;
941
+ parentMessageInfoStatus: ParentMessageInfoStateTypes;
942
+ threadListStatus: ThreadListStateTypes;
943
+ hasMorePrev: boolean;
944
+ hasMoreNext: boolean;
945
+ emojiContainer: EmojiContainer;
946
+ isMuted: boolean;
947
+ isChannelFrozen: boolean;
948
+ currentUserId: string;
949
+ }
950
+
951
+ export interface ThreadUIProps {
952
+ renderHeader?: () => React.ReactElement;
953
+ renderParentMessageInfo?: () => React.ReactElement;
954
+ renderMessage?: (props: { message: UserMessage | FileMessage }) => React.ReactElement;
955
+ renderMessageInput?: () => React.ReactElement;
956
+ renderCustomSeparator?: () => React.ReactElement;
957
+ renderParentMessageInfoPlaceholder?: (type: ParentMessageInfoStateTypes) => React.ReactElement;
958
+ renderThreadListPlaceHolder?: (type: ThreadListStateTypes) => React.ReactElement;
959
+ }
960
+
961
+ type EventType = React.MouseEvent<HTMLDivElement | HTMLButtonElement> | React.KeyboardEvent<HTMLDivElement>;
962
+ export interface ThreadHeaderProps {
963
+ className?: string;
964
+ channelName: string;
965
+ renderActionIcon?: (props: { onActionIconClick: (e: EventType) => void }) => React.ReactElement;
966
+ onActionIconClick?: (e: EventType) => void;
967
+ onChannelNameClick?: (e: EventType) => void;
968
+ }
969
+
970
+ export interface ParentMessageInfoProps {
971
+ className?: string;
972
+ }
973
+
974
+ export interface ParentMessageInfoItemProps {
975
+ className?: string;
976
+ message: UserMessage | FileMessage;
977
+ showFileViewer?: (bool: boolean) => void;
978
+ }
979
+
980
+ export interface ThreadListProps {
981
+ className?: string;
982
+ allThreadMessages: Array<UserMessage | FileMessage | BaseMessage>;
983
+ renderMessage?: (props: {
984
+ message: UserMessage | FileMessage,
985
+ chainTop: boolean,
986
+ chainBottom: boolean,
987
+ hasSeparator: boolean,
988
+ }) => React.ReactElement;
989
+ renderCustomSeparator?: (props: { message: UserMessage | FileMessage }) => React.ReactElement;
990
+ scrollRef?: React.RefObject<HTMLDivElement>;
991
+ scrollBottom?: number;
992
+ }
993
+ export interface ThreadListItemProps {
994
+ className?: string;
995
+ message: UserMessage | FileMessage;
996
+ chainTop?: boolean;
997
+ chainBottom?: boolean;
998
+ hasSeparator?: boolean;
999
+ renderCustomSeparator?: (props: { message: UserMessage | FileMessage }) => React.ReactElement;
1000
+ handleScroll?: () => void;
1001
+ }
1002
+
1003
+ export interface ThreadMessageInputProps {
1004
+ className?: string;
1005
+ }
1006
+
871
1007
/**
872
1008
* CreateChannel
873
1009
*/
@@ -1122,6 +1258,7 @@ declare module '@sendbird/uikit-react/Channel/context' {
1122
1258
import SendbirdUIKitGlobal from 'SendbirdUIKitGlobal';
1123
1259
export const ChannelProvider: React.FunctionComponent<SendbirdUIKitGlobal.ChannelContextProps>;
1124
1260
export function useChannelContext(): SendbirdUIKitGlobal.ChannelProviderInterface;
1261
+ export const ThreadReplySelectType: SendbirdUIKitGlobal.ThreadReplySelectType;
1125
1262
}
1126
1263
1127
1264
declare module '@sendbird/uikit-react/Channel/components/ChannelHeader' {
@@ -1343,6 +1480,64 @@ declare module '@sendbird/uikit-react/MessageSearch/components/MessageSearchUI'
1343
1480
export default MessageSearchUI;
1344
1481
}
1345
1482
1483
+ /**
1484
+ * Thread
1485
+ */
1486
+ declare module '@sendbird/uikit-react/Thread' {
1487
+ import SendbirdUIKitGlobal from 'SendbirdUIKitGlobal';
1488
+ const Thread: React.FC<SendbirdUIKitGlobal.ThreadProviderProps>;
1489
+ export default Thread;
1490
+ }
1491
+
1492
+ declare module '@sendbird/uikit-react/Thread/context' {
1493
+ import SendbirdUIKitGlobal from 'SendbirdUIKitGlobal';
1494
+ export const useThreadContext: () => SendbirdUIKitGlobal.ThreadProviderInterface;
1495
+ export const ThreadProvider: React.FC<SendbirdUIKitGlobal.ThreadProviderProps>;
1496
+ }
1497
+
1498
+ declare module '@sendbird/uikit-react/Thread/context/types' {
1499
+ import SendbirdUIKitGlobal from 'SendbirdUIKitGlobal';
1500
+ export const ChannelStateTypes: SendbirdUIKitGlobal.ChannelStateTypes;
1501
+ export const ParentMessageInfoStateTypes: SendbirdUIKitGlobal.ParentMessageInfoStateTypes;
1502
+ export const ThreadListStateTypes: SendbirdUIKitGlobal.ThreadListStateTypes;
1503
+ }
1504
+
1505
+ declare module '@sendbird/uikit-react/Thread/components/ThreadUI' {
1506
+ import SendbirdUIKitGlobal from 'SendbirdUIKitGlobal';
1507
+ const ThreadUI: React.FC<SendbirdUIKitGlobal.ThreadUIProps>;
1508
+ export default ThreadUI;
1509
+ }
1510
+ declare module '@sendbird/uikit-react/Thread/components/ThreadHeader' {
1511
+ import SendbirdUIKitGlobal from 'SendbirdUIKitGlobal';
1512
+ const ThreadHeader: React.FC<SendbirdUIKitGlobal.ThreadHeaderProps>;
1513
+ export default ThreadHeader;
1514
+ }
1515
+ declare module '@sendbird/uikit-react/Thread/components/ParentMessageInfo' {
1516
+ import SendbirdUIKitGlobal from 'SendbirdUIKitGlobal';
1517
+ const ParentMessageInfo: React.FC<SendbirdUIKitGlobal.ParentMessageInfoProps>;
1518
+ export default ParentMessageInfo;
1519
+ }
1520
+ declare module '@sendbird/uikit-react/Thread/components/ParentMessageInfoItem' {
1521
+ import SendbirdUIKitGlobal from 'SendbirdUIKitGlobal';
1522
+ const ParentMessageInfoItem: React.FC<SendbirdUIKitGlobal.ParentMessageInfoItemProps>;
1523
+ export default ParentMessageInfoItem;
1524
+ }
1525
+ declare module '@sendbird/uikit-react/Thread/components/ThreadList' {
1526
+ import SendbirdUIKitGlobal from 'SendbirdUIKitGlobal';
1527
+ const ThreadList: React.FC<SendbirdUIKitGlobal.ThreadListProps>;
1528
+ export default ThreadList;
1529
+ }
1530
+ declare module '@sendbird/uikit-react/Thread/components/ThreadListItem' {
1531
+ import SendbirdUIKitGlobal from 'SendbirdUIKitGlobal';
1532
+ const ThreadListItem: React.FC<SendbirdUIKitGlobal.ThreadListItemProps>;
1533
+ export default ThreadListItem;
1534
+ }
1535
+ declare module '@sendbird/uikit-react/Thread/components/ThreadMessageInput' {
1536
+ import SendbirdUIKitGlobal from 'SendbirdUIKitGlobal';
1537
+ const ThreadMessageInput: React.FC<SendbirdUIKitGlobal.ThreadMessageInputProps>;
1538
+ export default ThreadMessageInput;
1539
+ }
1540
+
1346
1541
/**
1347
1542
* CreateChannel
1348
1543
*/
@@ -1633,16 +1828,17 @@ declare module '@sendbird/uikit-react/ui/IconButton' {
1633
1828
1634
1829
declare module '@sendbird/uikit-react/ui/ImageRenderer' {
1635
1830
interface ImageRendererProps {
1636
- className?: string | Array<string>,
1637
- defaultComponent?: () => React.ReactElement,
1638
- placeHolder?: () => React.ReactElement,
1639
- alt?: string,
1640
- width?: number,
1641
- height?: number,
1642
- fixedSize?: boolean,
1643
- circle?: boolean,
1644
- onLoad?: () => void,
1645
- onError?: () => void,
1831
+ className?: string | Array<string>;
1832
+ url: string;
1833
+ alt?: string;
1834
+ width?: string | number;
1835
+ height?: string | number;
1836
+ circle?: boolean;
1837
+ fixedSize?: boolean;
1838
+ placeHolder?: ((props: { style: { [key: string]: string | number } }) => React.ReactElement) | React.ReactElement;
1839
+ defaultComponent?: (() => React.ReactElement) | React.ReactElement;
1840
+ onLoad?: () => void;
1841
+ onError?: () => void;
1646
1842
}
1647
1843
const ImageRenderer: React.FC<ImageRendererProps>;
1648
1844
export default ImageRenderer;
@@ -1778,20 +1974,23 @@ declare module '@sendbird/uikit-react/ui/MessageItemMenu' {
1778
1974
import type { GroupChannel } from '@sendbird/chat/groupChannel';
1779
1975
import type { FileMessage, UserMessage } from '@sendbird/chat/message';
1780
1976
import type { OpenChannel } from '@sendbird/chat/openChannel';
1781
- import type SenbirdUIKitGlobal from 'SendbirdUIKitGlobal' ;
1977
+ type ReplyType = "NONE" | "QUOTE_REPLY" | "THREAD" ;
1782
1978
1783
1979
interface MessageItemMenuProps {
1784
1980
className?: string | Array<string>;
1785
1981
message: UserMessage | FileMessage;
1786
1982
channel: GroupChannel | OpenChannel;
1787
1983
isByMe?: boolean;
1788
1984
disabled?: boolean;
1789
- replyType?: SenbirdUIKitGlobal.ReplyType;
1985
+ replyType?: ReplyType;
1986
+ disableDeleteMessage?: boolean;
1790
1987
showEdit?: (bool: boolean) => void;
1791
1988
showRemove?: (bool: boolean) => void;
1792
1989
resendMessage?: (message: UserMessage | FileMessage) => void;
1793
1990
setQuoteMessage?: (message: UserMessage | FileMessage) => void;
1794
1991
setSupposedHover?: (bool: boolean) => void;
1992
+ onReplyInThread?: (props: { message: UserMessage | FileMessage }) => void;
1993
+ onMoveToParentMessage?: () => void;
1795
1994
}
1796
1995
const MessageItemMenu: React.FC<MessageItemMenuProps>;
1797
1996
export default MessageItemMenu;
@@ -2087,6 +2286,17 @@ declare module '@sendbird/uikit-react/ui/TextMessageItemBody' {
2087
2286
export default TextMessageItemBody;
2088
2287
}
2089
2288
2289
+ declare module '@sendbird/uikit-react/ui/ThreadReplies' {
2290
+ import type { ThreadInfo } from '@sendbird/chat/message';
2291
+ interface ThreadRepliesProps {
2292
+ className?: string;
2293
+ threadInfo: ThreadInfo;
2294
+ onClick?: (e: React.MouseEvent<HTMLDivElement> | React.KeyboardEvent<HTMLDivElement>) => void;
2295
+ }
2296
+ const ThreadReplies: React.FC<ThreadRepliesProps>;
2297
+ export default ThreadReplies;
2298
+ }
2299
+
2090
2300
declare module '@sendbird/uikit-react/ui/ThumbnailMessageItemBody' {
2091
2301
import type { FileMessage } from '@sendbird/chat/message';
2092
2302
interface ThumbnailMessageItemBodyProps {
@@ -2096,6 +2306,7 @@ declare module '@sendbird/uikit-react/ui/ThumbnailMessageItemBody' {
2096
2306
mouseHover?: boolean;
2097
2307
isReactionEnabled?: boolean;
2098
2308
showFileViewer?: (bool: boolean) => void;
2309
+ style?: Record<string, any>;
2099
2310
}
2100
2311
const ThumbnailMessageItemBody: React.FC<ThumbnailMessageItemBodyProps>;
2101
2312
export default ThumbnailMessageItemBody;
0 commit comments