@sendbird/uikit-react-native 1.0.2 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (172) hide show
  1. package/README.md +7 -7
  2. package/lib/commonjs/SendbirdUIKitContainer.js +5 -2
  3. package/lib/commonjs/SendbirdUIKitContainer.js.map +1 -1
  4. package/lib/commonjs/components/FileViewer.js +326 -0
  5. package/lib/commonjs/components/FileViewer.js.map +1 -0
  6. package/lib/commonjs/components/GroupChannelPreviewContainer.js +180 -0
  7. package/lib/commonjs/components/GroupChannelPreviewContainer.js.map +1 -0
  8. package/lib/commonjs/components/MessageRenderer/FileMessage/VideoFileMessage.js +116 -0
  9. package/lib/commonjs/components/MessageRenderer/FileMessage/VideoFileMessage.js.map +1 -0
  10. package/lib/commonjs/components/MessageRenderer/FileMessage/index.js +8 -0
  11. package/lib/commonjs/components/MessageRenderer/FileMessage/index.js.map +1 -1
  12. package/lib/commonjs/components/MessageRenderer/MessageOutgoingStatus.js +15 -24
  13. package/lib/commonjs/components/MessageRenderer/MessageOutgoingStatus.js.map +1 -1
  14. package/lib/commonjs/components/SBUPressable.js +45 -0
  15. package/lib/commonjs/components/SBUPressable.js.map +1 -0
  16. package/lib/commonjs/components/UserActionBar.js +1 -3
  17. package/lib/commonjs/components/UserActionBar.js.map +1 -1
  18. package/lib/commonjs/components/UserSelectableBar.js +1 -3
  19. package/lib/commonjs/components/UserSelectableBar.js.map +1 -1
  20. package/lib/commonjs/constants.js +7 -1
  21. package/lib/commonjs/constants.js.map +1 -1
  22. package/lib/commonjs/contexts/PlatformService.js +4 -2
  23. package/lib/commonjs/contexts/PlatformService.js.map +1 -1
  24. package/lib/commonjs/contexts/SendbirdChat.js +6 -2
  25. package/lib/commonjs/contexts/SendbirdChat.js.map +1 -1
  26. package/lib/commonjs/domain/groupChannel/component/GroupChannelInput/SendInput.js +1 -1
  27. package/lib/commonjs/domain/groupChannel/component/GroupChannelInput/SendInput.js.map +1 -1
  28. package/lib/commonjs/domain/groupChannel/component/GroupChannelMessageList.js +30 -7
  29. package/lib/commonjs/domain/groupChannel/component/GroupChannelMessageList.js.map +1 -1
  30. package/lib/commonjs/domain/groupChannel/module/moduleContext.js +2 -3
  31. package/lib/commonjs/domain/groupChannel/module/moduleContext.js.map +1 -1
  32. package/lib/commonjs/domain/groupChannel/types.js.map +1 -1
  33. package/lib/commonjs/domain/groupChannelList/types.js.map +1 -1
  34. package/lib/commonjs/domain/groupChannelSettings/module/moduleContext.js +1 -1
  35. package/lib/commonjs/domain/groupChannelSettings/module/moduleContext.js.map +1 -1
  36. package/lib/commonjs/fragments/createGroupChannelCreateFragment.js +3 -7
  37. package/lib/commonjs/fragments/createGroupChannelCreateFragment.js.map +1 -1
  38. package/lib/commonjs/fragments/createGroupChannelFragment.js +13 -11
  39. package/lib/commonjs/fragments/createGroupChannelFragment.js.map +1 -1
  40. package/lib/commonjs/fragments/createGroupChannelListFragment.js +7 -37
  41. package/lib/commonjs/fragments/createGroupChannelListFragment.js.map +1 -1
  42. package/lib/commonjs/fragments/createGroupChannelMembersFragment.js +1 -1
  43. package/lib/commonjs/fragments/createGroupChannelMembersFragment.js.map +1 -1
  44. package/lib/commonjs/hooks/useContext.js.map +1 -1
  45. package/lib/commonjs/index.js +29 -2
  46. package/lib/commonjs/index.js.map +1 -1
  47. package/lib/commonjs/localization/StringSet.type.js +8 -0
  48. package/lib/commonjs/localization/StringSet.type.js.map +1 -1
  49. package/lib/commonjs/platform/createFileService.expo.js +21 -2
  50. package/lib/commonjs/platform/createFileService.expo.js.map +1 -1
  51. package/lib/commonjs/platform/createFileService.native.js +20 -3
  52. package/lib/commonjs/platform/createFileService.native.js.map +1 -1
  53. package/lib/commonjs/platform/createMediaService.expo.js +64 -0
  54. package/lib/commonjs/platform/createMediaService.expo.js.map +1 -0
  55. package/lib/commonjs/platform/createMediaService.native.js +67 -0
  56. package/lib/commonjs/platform/createMediaService.native.js.map +1 -0
  57. package/lib/commonjs/platform/createNotificationService.expo.js.map +1 -1
  58. package/lib/commonjs/platform/types.js.map +1 -1
  59. package/lib/commonjs/version.js +1 -1
  60. package/lib/commonjs/version.js.map +1 -1
  61. package/lib/module/SendbirdUIKitContainer.js +5 -2
  62. package/lib/module/SendbirdUIKitContainer.js.map +1 -1
  63. package/lib/module/components/FileViewer.js +304 -0
  64. package/lib/module/components/FileViewer.js.map +1 -0
  65. package/lib/module/components/GroupChannelPreviewContainer.js +158 -0
  66. package/lib/module/components/GroupChannelPreviewContainer.js.map +1 -0
  67. package/lib/module/components/MessageRenderer/FileMessage/VideoFileMessage.js +100 -0
  68. package/lib/module/components/MessageRenderer/FileMessage/VideoFileMessage.js.map +1 -0
  69. package/lib/module/components/MessageRenderer/FileMessage/index.js +6 -0
  70. package/lib/module/components/MessageRenderer/FileMessage/index.js.map +1 -1
  71. package/lib/module/components/MessageRenderer/MessageOutgoingStatus.js +17 -26
  72. package/lib/module/components/MessageRenderer/MessageOutgoingStatus.js.map +1 -1
  73. package/lib/module/components/SBUPressable.js +33 -0
  74. package/lib/module/components/SBUPressable.js.map +1 -0
  75. package/lib/module/components/UserActionBar.js +1 -1
  76. package/lib/module/components/UserActionBar.js.map +1 -1
  77. package/lib/module/components/UserSelectableBar.js +1 -1
  78. package/lib/module/components/UserSelectableBar.js.map +1 -1
  79. package/lib/module/constants.js +5 -0
  80. package/lib/module/constants.js.map +1 -1
  81. package/lib/module/contexts/PlatformService.js +4 -2
  82. package/lib/module/contexts/PlatformService.js.map +1 -1
  83. package/lib/module/contexts/SendbirdChat.js +6 -2
  84. package/lib/module/contexts/SendbirdChat.js.map +1 -1
  85. package/lib/module/domain/groupChannel/component/GroupChannelInput/SendInput.js +1 -1
  86. package/lib/module/domain/groupChannel/component/GroupChannelInput/SendInput.js.map +1 -1
  87. package/lib/module/domain/groupChannel/component/GroupChannelMessageList.js +28 -7
  88. package/lib/module/domain/groupChannel/component/GroupChannelMessageList.js.map +1 -1
  89. package/lib/module/domain/groupChannel/module/moduleContext.js +2 -3
  90. package/lib/module/domain/groupChannel/module/moduleContext.js.map +1 -1
  91. package/lib/module/domain/groupChannel/types.js.map +1 -1
  92. package/lib/module/domain/groupChannelList/types.js.map +1 -1
  93. package/lib/module/domain/groupChannelSettings/module/moduleContext.js +1 -1
  94. package/lib/module/domain/groupChannelSettings/module/moduleContext.js.map +1 -1
  95. package/lib/module/fragments/createGroupChannelCreateFragment.js +4 -4
  96. package/lib/module/fragments/createGroupChannelCreateFragment.js.map +1 -1
  97. package/lib/module/fragments/createGroupChannelFragment.js +15 -13
  98. package/lib/module/fragments/createGroupChannelFragment.js.map +1 -1
  99. package/lib/module/fragments/createGroupChannelListFragment.js +11 -38
  100. package/lib/module/fragments/createGroupChannelListFragment.js.map +1 -1
  101. package/lib/module/fragments/createGroupChannelMembersFragment.js +1 -1
  102. package/lib/module/fragments/createGroupChannelMembersFragment.js.map +1 -1
  103. package/lib/module/hooks/useContext.js.map +1 -1
  104. package/lib/module/index.js +4 -1
  105. package/lib/module/index.js.map +1 -1
  106. package/lib/module/localization/StringSet.type.js +8 -0
  107. package/lib/module/localization/StringSet.type.js.map +1 -1
  108. package/lib/module/platform/createFileService.expo.js +21 -2
  109. package/lib/module/platform/createFileService.expo.js.map +1 -1
  110. package/lib/module/platform/createFileService.native.js +20 -3
  111. package/lib/module/platform/createFileService.native.js.map +1 -1
  112. package/lib/module/platform/createMediaService.expo.js +54 -0
  113. package/lib/module/platform/createMediaService.expo.js.map +1 -0
  114. package/lib/module/platform/createMediaService.native.js +57 -0
  115. package/lib/module/platform/createMediaService.native.js.map +1 -0
  116. package/lib/module/platform/createNotificationService.expo.js.map +1 -1
  117. package/lib/module/platform/types.js.map +1 -1
  118. package/lib/module/version.js +1 -1
  119. package/lib/module/version.js.map +1 -1
  120. package/lib/typescript/src/SendbirdUIKitContainer.d.ts +7 -3
  121. package/lib/typescript/src/components/FileViewer.d.ts +12 -0
  122. package/lib/typescript/src/components/GroupChannelPreviewContainer.d.ts +8 -0
  123. package/lib/typescript/src/components/MessageRenderer/FileMessage/VideoFileMessage.d.ts +3 -0
  124. package/lib/typescript/src/components/SBUPressable.d.ts +18 -0
  125. package/lib/typescript/src/components/UserActionBar.d.ts +2 -3
  126. package/lib/typescript/src/components/UserSelectableBar.d.ts +2 -3
  127. package/lib/typescript/src/constants.d.ts +5 -0
  128. package/lib/typescript/src/contexts/PlatformService.d.ts +3 -2
  129. package/lib/typescript/src/contexts/SendbirdChat.d.ts +5 -1
  130. package/lib/typescript/src/domain/groupChannel/component/GroupChannelMessageList.d.ts +3 -2
  131. package/lib/typescript/src/domain/groupChannel/types.d.ts +6 -2
  132. package/lib/typescript/src/hooks/useContext.d.ts +7 -5
  133. package/lib/typescript/src/index.d.ts +3 -0
  134. package/lib/typescript/src/localization/StringSet.type.d.ts +4 -0
  135. package/lib/typescript/src/platform/createMediaService.expo.d.ts +9 -0
  136. package/lib/typescript/src/platform/createMediaService.native.d.ts +9 -0
  137. package/lib/typescript/src/platform/createNotificationService.expo.d.ts +1 -1
  138. package/lib/typescript/src/platform/types.d.ts +20 -1
  139. package/lib/typescript/src/version.d.ts +1 -1
  140. package/package.json +14 -5
  141. package/src/SendbirdUIKitContainer.tsx +14 -2
  142. package/src/components/FileViewer.tsx +284 -0
  143. package/src/components/GroupChannelPreviewContainer.tsx +134 -0
  144. package/src/components/MessageRenderer/FileMessage/VideoFileMessage.tsx +91 -0
  145. package/src/components/MessageRenderer/FileMessage/index.tsx +6 -0
  146. package/src/components/MessageRenderer/MessageOutgoingStatus.tsx +25 -32
  147. package/src/components/SBUPressable.tsx +40 -0
  148. package/src/components/UserActionBar.tsx +1 -1
  149. package/src/components/UserSelectableBar.tsx +1 -1
  150. package/src/constants.ts +5 -0
  151. package/src/contexts/PlatformService.tsx +15 -3
  152. package/src/contexts/SendbirdChat.tsx +13 -5
  153. package/src/domain/groupChannel/component/GroupChannelInput/SendInput.tsx +1 -1
  154. package/src/domain/groupChannel/component/GroupChannelMessageList.tsx +23 -6
  155. package/src/domain/groupChannel/module/moduleContext.tsx +6 -13
  156. package/src/domain/groupChannel/types.ts +8 -2
  157. package/src/domain/groupChannelList/types.ts +1 -0
  158. package/src/domain/groupChannelSettings/module/moduleContext.tsx +5 -10
  159. package/src/fragments/createGroupChannelCreateFragment.tsx +38 -41
  160. package/src/fragments/createGroupChannelFragment.tsx +23 -33
  161. package/src/fragments/createGroupChannelListFragment.tsx +10 -32
  162. package/src/fragments/createGroupChannelMembersFragment.tsx +34 -39
  163. package/src/hooks/useContext.ts +3 -5
  164. package/src/index.ts +5 -1
  165. package/src/localization/StringSet.type.ts +8 -0
  166. package/src/platform/createFileService.expo.ts +17 -2
  167. package/src/platform/createFileService.native.ts +16 -3
  168. package/src/platform/createMediaService.expo.tsx +30 -0
  169. package/src/platform/createMediaService.native.tsx +37 -0
  170. package/src/platform/createNotificationService.expo.ts +1 -1
  171. package/src/platform/types.ts +26 -1
  172. package/src/version.ts +1 -1
@@ -2,10 +2,10 @@ import React from 'react';
2
2
  import type { HeaderStyleContextType, UIKitTheme } from '@sendbird/uikit-react-native-foundation';
3
3
  import type { SendbirdChatSDK } from '@sendbird/uikit-utils';
4
4
  import type { StringSet } from './localization/StringSet.type';
5
- import type { ClipboardServiceInterface, FileServiceInterface, NotificationServiceInterface } from './platform/types';
5
+ import type { ClipboardServiceInterface, FileServiceInterface, MediaServiceInterface, NotificationServiceInterface } from './platform/types';
6
6
  import type { ErrorBoundaryProps, LocalCacheStorage } from './types';
7
7
  export declare const SendbirdUIKit: Readonly<{
8
- VERSION: "1.0.2";
8
+ VERSION: "1.1.0";
9
9
  PLATFORM: string;
10
10
  }>;
11
11
  export declare type SendbirdUIKitContainerProps = React.PropsWithChildren<{
@@ -14,11 +14,14 @@ export declare type SendbirdUIKitContainerProps = React.PropsWithChildren<{
14
14
  file: FileServiceInterface;
15
15
  notification: NotificationServiceInterface;
16
16
  clipboard: ClipboardServiceInterface;
17
+ media?: MediaServiceInterface;
17
18
  };
18
19
  chatOptions?: {
19
20
  localCacheStorage?: LocalCacheStorage;
20
- enableAutoPushTokenRegistration?: boolean;
21
21
  onInitialized?: (sdkInstance: SendbirdChatSDK) => SendbirdChatSDK;
22
+ enableAutoPushTokenRegistration?: boolean;
23
+ enableChannelListTypingIndicator?: boolean;
24
+ enableChannelListMessageReceiptStatus?: boolean;
22
25
  };
23
26
  localization?: {
24
27
  stringSet?: StringSet;
@@ -27,6 +30,7 @@ export declare type SendbirdUIKitContainerProps = React.PropsWithChildren<{
27
30
  theme?: UIKitTheme;
28
31
  statusBarTranslucent?: boolean;
29
32
  defaultHeaderTitleAlign?: 'left' | 'center';
33
+ defaultHeaderHeight?: number;
30
34
  HeaderComponent?: HeaderStyleContextType['HeaderComponent'];
31
35
  };
32
36
  toast?: {
@@ -0,0 +1,12 @@
1
+ import type { SendbirdFileMessage } from '@sendbird/uikit-utils';
2
+ declare type Props = {
3
+ fileMessage: SendbirdFileMessage;
4
+ deleteMessage: () => Promise<void>;
5
+ onClose: () => void;
6
+ onPressDownload?: (message: SendbirdFileMessage) => void;
7
+ onPressDelete?: (message: SendbirdFileMessage) => void;
8
+ headerShown?: boolean;
9
+ headerTopInset?: number;
10
+ };
11
+ declare const FileViewer: ({ headerShown, deleteMessage, headerTopInset, fileMessage, onPressDownload, onPressDelete, onClose, }: Props) => JSX.Element;
12
+ export default FileViewer;
@@ -0,0 +1,8 @@
1
+ import { SendbirdGroupChannel } from '@sendbird/uikit-utils';
2
+ declare type Props = {
3
+ channel: SendbirdGroupChannel;
4
+ onPress: () => void;
5
+ onLongPress: () => void;
6
+ };
7
+ declare const GroupChannelPreviewContainer: ({ onPress, onLongPress, channel }: Props) => JSX.Element;
8
+ export default GroupChannelPreviewContainer;
@@ -0,0 +1,3 @@
1
+ import type { FileMessageProps } from './index';
2
+ declare const VideoFileMessage: ({ message }: FileMessageProps) => JSX.Element;
3
+ export default VideoFileMessage;
@@ -0,0 +1,18 @@
1
+ import { PressableProps, TouchableOpacityProps } from 'react-native';
2
+ declare type Components = 'Pressable' | 'TouchableOpacity';
3
+ declare type Props<T extends Components = 'Pressable'> = {
4
+ as?: T;
5
+ } & ExtractProps<T, AsProps>;
6
+ declare type AsProps = {
7
+ type: 'Pressable';
8
+ props: PressableProps;
9
+ } | {
10
+ type: 'TouchableOpacity';
11
+ props: TouchableOpacityProps;
12
+ };
13
+ declare type ExtractProps<T extends Components, U extends AsProps> = U extends {
14
+ type: T;
15
+ props: infer P;
16
+ } ? P : never;
17
+ declare const SBUPressable: <T extends Components>({ as, ...props }: Props<T>) => JSX.Element;
18
+ export default SBUPressable;
@@ -1,4 +1,3 @@
1
- import React from 'react';
2
1
  declare type Props = {
3
2
  uri: string;
4
3
  name: string;
@@ -7,5 +6,5 @@ declare type Props = {
7
6
  disabled: boolean;
8
7
  onPressActionMenu?: () => void;
9
8
  };
10
- declare const _default: React.MemoExoticComponent<({ muted, uri, name, disabled, onPressActionMenu, label }: Props) => JSX.Element>;
11
- export default _default;
9
+ declare const UserActionBar: ({ muted, uri, name, disabled, onPressActionMenu, label }: Props) => JSX.Element;
10
+ export default UserActionBar;
@@ -1,9 +1,8 @@
1
- import React from 'react';
2
1
  declare type Props = {
3
2
  uri: string;
4
3
  name: string;
5
4
  selected: boolean;
6
5
  disabled: boolean;
7
6
  };
8
- declare const _default: React.MemoExoticComponent<({ uri, name, selected, disabled }: Props) => JSX.Element>;
9
- export default _default;
7
+ declare const UserSelectableBar: ({ uri, name, selected, disabled }: Props) => JSX.Element;
8
+ export default UserSelectableBar;
@@ -1 +1,6 @@
1
1
  export declare const DEFAULT_LONG_PRESS_DELAY = 350;
2
+ export declare const DEPRECATION_WARNING: {
3
+ readonly GROUP_CHANNEL: {
4
+ readonly ON_PRESS_IMAGE_MESSAGE: "`onPressImageMessage` is deprecated, please use `onPressMediaMessage` instead";
5
+ };
6
+ };
@@ -1,10 +1,11 @@
1
1
  import React from 'react';
2
- import type { ClipboardServiceInterface, FileServiceInterface, NotificationServiceInterface } from '../platform/types';
2
+ import type { ClipboardServiceInterface, FileServiceInterface, MediaServiceInterface, NotificationServiceInterface } from '../platform/types';
3
3
  declare type Props = React.PropsWithChildren<{
4
4
  fileService: FileServiceInterface;
5
5
  clipboardService: ClipboardServiceInterface;
6
6
  notificationService: NotificationServiceInterface;
7
+ mediaService?: MediaServiceInterface;
7
8
  }>;
8
9
  export declare const PlatformServiceContext: React.Context<Props | null>;
9
- export declare const PlatformServiceProvider: ({ children, fileService, clipboardService, notificationService }: Props) => JSX.Element;
10
+ export declare const PlatformServiceProvider: ({ children, fileService, clipboardService, notificationService, mediaService, }: Props) => JSX.Element;
10
11
  export {};
@@ -4,6 +4,8 @@ import type { FileType } from '../platform/types';
4
4
  declare type Props = React.PropsWithChildren<{
5
5
  sdkInstance: SendbirdChatSDK;
6
6
  enableAutoPushTokenRegistration: boolean;
7
+ enableChannelListTypingIndicator: boolean;
8
+ enableChannelListMessageReceiptStatus: boolean;
7
9
  }>;
8
10
  declare type Context = {
9
11
  sdk: SendbirdChatSDK;
@@ -13,6 +15,8 @@ declare type Context = {
13
15
  markAsDeliveredWithChannel: (channel: SendbirdGroupChannel) => void;
14
16
  features: {
15
17
  autoPushTokenRegistrationEnabled: boolean;
18
+ channelListTypingIndicatorEnabled: boolean;
19
+ channelListMessageReceiptStatusEnabled: boolean;
16
20
  deliveryReceiptEnabled: boolean;
17
21
  broadcastChannelEnabled: boolean;
18
22
  superGroupChannelEnabled: boolean;
@@ -20,5 +24,5 @@ declare type Context = {
20
24
  };
21
25
  };
22
26
  export declare const SendbirdChatContext: React.Context<Context | null>;
23
- export declare const SendbirdChatProvider: ({ children, sdkInstance, enableAutoPushTokenRegistration }: Props) => JSX.Element;
27
+ export declare const SendbirdChatProvider: ({ children, sdkInstance, enableAutoPushTokenRegistration, enableChannelListMessageReceiptStatus, enableChannelListTypingIndicator, }: Props) => JSX.Element;
24
28
  export {};
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import type { SendbirdMessage } from '@sendbird/uikit-utils';
3
- declare const _default: React.MemoExoticComponent<({ currentUserId, channel, messages, renderMessage, nextMessages, newMessagesFromMembers, onBottomReached, onTopReached, renderNewMessagesButton, renderScrollToBottomButton, onResendFailedMessage, onDeleteMessage, onPressImageMessage, flatListProps, enableMessageGrouping, }: {
3
+ declare const _default: React.MemoExoticComponent<({ currentUserId, channel, messages, renderMessage, nextMessages, newMessagesFromMembers, onBottomReached, onTopReached, renderNewMessagesButton, renderScrollToBottomButton, onResendFailedMessage, onDeleteMessage, onPressImageMessage, onPressMediaMessage, flatListProps, enableMessageGrouping, }: {
4
4
  enableMessageGrouping: boolean;
5
5
  currentUserId?: string | undefined;
6
6
  channel: import("sendbird").GroupChannel;
@@ -11,7 +11,7 @@ declare const _default: React.MemoExoticComponent<({ currentUserId, channel, mes
11
11
  onBottomReached: () => void;
12
12
  onResendFailedMessage: (failedMessage: import("sendbird").FileMessage | import("sendbird").UserMessage) => Promise<void>;
13
13
  onDeleteMessage: (message: import("sendbird").FileMessage | import("sendbird").UserMessage) => Promise<void>;
14
- onPressImageMessage?: ((message: import("sendbird").FileMessage, uri: string) => void) | undefined;
14
+ onPressMediaMessage?: ((message: import("sendbird").FileMessage, deleteMessage: () => Promise<void>, uri: string) => void) | undefined;
15
15
  renderMessage: (props: {
16
16
  message: SendbirdMessage;
17
17
  prevMessage?: SendbirdMessage | undefined;
@@ -32,5 +32,6 @@ declare const _default: React.MemoExoticComponent<({ currentUserId, channel, mes
32
32
  onPress: () => void;
33
33
  }> | null;
34
34
  flatListProps?: Omit<import("react-native").FlatListProps<SendbirdMessage>, "data" | "renderItem"> | undefined;
35
+ onPressImageMessage?: ((message: import("sendbird").FileMessage, uri: string) => void) | undefined;
35
36
  }) => JSX.Element>;
36
37
  export default _default;
@@ -12,7 +12,7 @@ export interface GroupChannelProps {
12
12
  onPressHeaderRight: GroupChannelProps['Header']['onPressHeaderRight'];
13
13
  onBeforeSendFileMessage?: (params: SendbirdFileMessageParams) => SendbirdFileMessageParams | Promise<SendbirdFileMessageParams>;
14
14
  onBeforeSendUserMessage?: (params: SendbirdUserMessageParams) => SendbirdUserMessageParams | Promise<SendbirdUserMessageParams>;
15
- onPressImageMessage?: GroupChannelProps['MessageList']['onPressImageMessage'];
15
+ onPressMediaMessage?: GroupChannelProps['MessageList']['onPressMediaMessage'];
16
16
  renderMessage?: GroupChannelProps['MessageList']['renderMessage'];
17
17
  renderNewMessagesButton?: GroupChannelProps['MessageList']['renderNewMessagesButton'];
18
18
  renderScrollToBottomButton?: GroupChannelProps['MessageList']['renderScrollToBottomButton'];
@@ -23,6 +23,8 @@ export interface GroupChannelProps {
23
23
  sortComparator?: UseGroupChannelMessagesOptions['sortComparator'];
24
24
  collectionCreator?: UseGroupChannelMessagesOptions['collectionCreator'];
25
25
  queryCreator?: UseGroupChannelMessagesOptions['queryCreator'];
26
+ /** @deprecated `onPressImageMessage` is deprecated, please use `onPressMediaMessage` instead **/
27
+ onPressImageMessage?: GroupChannelProps['MessageList']['onPressImageMessage'];
26
28
  };
27
29
  Header: {
28
30
  onPressHeaderLeft: () => void;
@@ -39,7 +41,7 @@ export interface GroupChannelProps {
39
41
  onBottomReached: () => void;
40
42
  onResendFailedMessage: (failedMessage: SendbirdUserMessage | SendbirdFileMessage) => Promise<void>;
41
43
  onDeleteMessage: (message: SendbirdUserMessage | SendbirdFileMessage) => Promise<void>;
42
- onPressImageMessage?: (message: SendbirdFileMessage, uri: string) => void;
44
+ onPressMediaMessage?: (message: SendbirdFileMessage, deleteMessage: () => Promise<void>, uri: string) => void;
43
45
  renderMessage: (props: {
44
46
  message: SendbirdMessage;
45
47
  prevMessage?: SendbirdMessage;
@@ -60,6 +62,8 @@ export interface GroupChannelProps {
60
62
  onPress: () => void;
61
63
  }>;
62
64
  flatListProps?: Omit<FlatListProps<SendbirdMessage>, 'data' | 'renderItem'>;
65
+ /** @deprecated `onPressImageMessage` is deprecated, please use `onPressMediaMessage` instead **/
66
+ onPressImageMessage?: (message: SendbirdFileMessage, uri: string) => void;
63
67
  };
64
68
  Input: {
65
69
  channel: SendbirdGroupChannel;
@@ -1,21 +1,23 @@
1
- import React from 'react';
2
- import { LocalizationContextType } from '../contexts/Localization';
3
- export declare const useLocalization: () => LocalizationContextType;
1
+ /// <reference types="react" />
2
+ export declare const useLocalization: () => import("../contexts/Localization").LocalizationContextType;
4
3
  export declare const usePlatformService: () => {
5
4
  fileService: import("..").FileServiceInterface;
6
5
  clipboardService: import("..").ClipboardServiceInterface;
7
6
  notificationService: import("..").NotificationServiceInterface;
7
+ mediaService?: import("../platform/types").MediaServiceInterface | undefined;
8
8
  } & {
9
- children?: React.ReactNode;
9
+ children?: import("react").ReactNode;
10
10
  };
11
11
  export declare const useSendbirdChat: () => {
12
12
  sdk: import("sendbird").SendBirdInstance;
13
13
  currentUser?: import("sendbird").User | undefined;
14
- setCurrentUser: React.Dispatch<React.SetStateAction<import("sendbird").User | undefined>>;
14
+ setCurrentUser: import("react").Dispatch<import("react").SetStateAction<import("sendbird").User | undefined>>;
15
15
  updateCurrentUserInfo: (nickname: string, profile?: string | import("..").FileType | undefined) => Promise<import("sendbird").User>;
16
16
  markAsDeliveredWithChannel: (channel: import("sendbird").GroupChannel) => void;
17
17
  features: {
18
18
  autoPushTokenRegistrationEnabled: boolean;
19
+ channelListTypingIndicatorEnabled: boolean;
20
+ channelListMessageReceiptStatusEnabled: boolean;
19
21
  deliveryReceiptEnabled: boolean;
20
22
  broadcastChannelEnabled: boolean;
21
23
  superGroupChannelEnabled: boolean;
@@ -1,6 +1,7 @@
1
1
  export { default as MessageRenderer } from './components/MessageRenderer';
2
2
  export { default as ChannelCover } from './components/ChannelCover';
3
3
  export { default as ChatFlatList } from './components/ChatFlatList';
4
+ export { default as FileViewer } from './components/FileViewer';
4
5
  export { default as NewMessagesButton } from './components/NewMessagesButton';
5
6
  export { default as ProviderLayout } from './components/ProviderLayout';
6
7
  export { default as ScrollToBottomButton } from './components/ScrollToBottomButton';
@@ -31,9 +32,11 @@ export type { StringSet } from './localization/StringSet.type';
31
32
  export { default as createNativeFileService } from './platform/createFileService.native';
32
33
  export { default as createNativeClipboardService } from './platform/createClipboardService.native';
33
34
  export { default as createNativeNotificationService } from './platform/createNotificationService.native';
35
+ export { default as createNativeMediaService } from './platform/createMediaService.native';
34
36
  export { default as createExpoFileService } from './platform/createFileService.expo';
35
37
  export { default as createExpoClipboardService } from './platform/createClipboardService.expo';
36
38
  export { default as createExpoNotificationService } from './platform/createNotificationService.expo';
39
+ export { default as createExpoMediaService } from './platform/createMediaService.expo';
37
40
  export type { FileServiceInterface, ClipboardServiceInterface, FilePickerServiceInterface, FileSystemServiceInterface, SaveOptions, OpenDocumentOptions, OpenCameraOptions, OpenMediaLibraryOptions, OpenResultListener, DownloadedPath, Unsubscribe, FilePickerResponse, FileType, NotificationServiceInterface, } from './platform/types';
38
41
  /** Domain **/
39
42
  export * from './domain/groupChannel';
@@ -107,6 +107,10 @@ export interface StringSet {
107
107
  CHANNEL_NO_MEMBERS: string;
108
108
  TYPING_INDICATOR_TYPINGS: (users: SendbirdUser[]) => string | undefined;
109
109
  };
110
+ FILE_VIEWER: {
111
+ TITLE: (message: SendbirdFileMessage) => string;
112
+ SUBTITLE: (message: SendbirdFileMessage) => string;
113
+ };
110
114
  PLACEHOLDER: {
111
115
  NO_BANNED_MEMBERS: string;
112
116
  NO_USERS: string;
@@ -0,0 +1,9 @@
1
+ import type * as ExpoAV from 'expo-av';
2
+ import type * as ExpoVideoThumbnail from 'expo-video-thumbnails';
3
+ import type { MediaServiceInterface } from './types';
4
+ declare type Modules = {
5
+ avModule: typeof ExpoAV;
6
+ thumbnailModule: typeof ExpoVideoThumbnail;
7
+ };
8
+ declare const createExpoMediaService: ({ avModule, thumbnailModule }: Modules) => MediaServiceInterface;
9
+ export default createExpoMediaService;
@@ -0,0 +1,9 @@
1
+ import type * as CreateThumbnail from 'react-native-create-thumbnail';
2
+ import type Video from 'react-native-video';
3
+ import type { MediaServiceInterface } from './types';
4
+ declare type Modules = {
5
+ VideoComponent: typeof Video;
6
+ thumbnailModule: typeof CreateThumbnail;
7
+ };
8
+ declare const createNativeMediaService: ({ VideoComponent, thumbnailModule }: Modules) => MediaServiceInterface;
9
+ export default createNativeMediaService;
@@ -1,4 +1,4 @@
1
- import type ExpoNotification from 'expo-notifications';
1
+ import type * as ExpoNotification from 'expo-notifications';
2
2
  import type { NotificationServiceInterface } from './types';
3
3
  declare const createExpoNotificationService: (messagingModule: typeof ExpoNotification) => NotificationServiceInterface;
4
4
  export default createExpoNotificationService;
@@ -29,7 +29,7 @@ export interface OpenMediaLibraryOptions extends OpenResultListener {
29
29
  }
30
30
  export interface OpenCameraOptions extends OpenResultListener {
31
31
  cameraType?: 'front' | 'back';
32
- mediaType?: 'photo' | 'video';
32
+ mediaType?: 'photo' | 'video' | 'all';
33
33
  }
34
34
  export declare type OpenDocumentOptions = OpenResultListener;
35
35
  export interface SaveOptions {
@@ -45,3 +45,22 @@ export interface FilePickerServiceInterface {
45
45
  export interface FileSystemServiceInterface {
46
46
  save(options?: SaveOptions): Promise<DownloadedPath | null>;
47
47
  }
48
+ interface VideoProps {
49
+ source: {
50
+ uri: string;
51
+ } | number;
52
+ resizeMode?: 'cover' | 'contain' | 'stretch';
53
+ onLoad?: () => void;
54
+ }
55
+ interface GetVideoThumbnailOptions {
56
+ url: string;
57
+ timeMills?: number;
58
+ quality?: number;
59
+ }
60
+ export interface MediaServiceInterface {
61
+ VideoComponent<Props = {}>(props: VideoProps & Props): JSX.Element;
62
+ getVideoThumbnail(options: GetVideoThumbnailOptions): Promise<{
63
+ path: string;
64
+ } | null>;
65
+ }
66
+ export {};
@@ -1,2 +1,2 @@
1
- declare const VERSION = "1.0.2";
1
+ declare const VERSION = "1.1.0";
2
2
  export default VERSION;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sendbird/uikit-react-native",
3
- "version": "1.0.2",
3
+ "version": "1.1.0",
4
4
  "description": "react-native-uikit",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
@@ -41,9 +41,9 @@
41
41
  "access": "public"
42
42
  },
43
43
  "dependencies": {
44
- "@sendbird/uikit-chat-hooks": "1.0.2",
45
- "@sendbird/uikit-react-native-foundation": "1.0.2",
46
- "@sendbird/uikit-utils": "1.0.2"
44
+ "@sendbird/uikit-chat-hooks": "1.1.0",
45
+ "@sendbird/uikit-react-native-foundation": "1.1.0",
46
+ "@sendbird/uikit-utils": "1.1.0"
47
47
  },
48
48
  "devDependencies": {
49
49
  "@react-native-clipboard/clipboard": "^1.8.5",
@@ -53,24 +53,29 @@
53
53
  "@react-native-firebase/messaging": "^14.4.0",
54
54
  "@types/react": "*",
55
55
  "@types/react-native": "*",
56
+ "@types/react-native-video": "^5.0.14",
56
57
  "date-fns": "^2.28.0",
58
+ "expo-av": "^12.0.4",
57
59
  "expo-clipboard": "^2.1.1",
58
60
  "expo-document-picker": "^10.1.3",
59
61
  "expo-file-system": "^13.1.4",
60
62
  "expo-image-picker": "^12.0.2",
61
63
  "expo-media-library": "^14.0.1",
62
64
  "expo-notifications": "^0.14.1",
65
+ "expo-video-thumbnails": "^6.4.0",
63
66
  "glob": "^7.2.0",
64
67
  "inquirer": "^8.2.0",
65
68
  "js-convert-case": "^4.2.0",
66
69
  "react": "17.0.2",
67
70
  "react-native": "0.66.4",
68
71
  "react-native-builder-bob": "^0.18.0",
72
+ "react-native-create-thumbnail": "^1.5.1",
69
73
  "react-native-document-picker": "^8.0.0",
70
74
  "react-native-file-access": "^2.4.3",
71
75
  "react-native-image-picker": "^4.7.1",
72
76
  "react-native-permissions": "^3.6.0",
73
77
  "react-native-safe-area-context": "^3.3.2",
78
+ "react-native-video": "^5.2.0",
74
79
  "typescript": "^4.1.3"
75
80
  },
76
81
  "peerDependencies": {
@@ -79,18 +84,22 @@
79
84
  "@react-native-community/netinfo": ">=9.3.0",
80
85
  "@react-native-firebase/messaging": ">=14.4.0",
81
86
  "date-fns": ">=2.28.0",
87
+ "expo-av": ">=12.0.4",
82
88
  "expo-clipboard": ">=2.1.1",
83
89
  "expo-document-picker": ">=10.1.3",
84
90
  "expo-file-system": ">=13.1.4",
85
91
  "expo-image-picker": ">=12.0.2",
86
92
  "expo-notifications": ">=0.14.1",
93
+ "expo-video-thumbnails": ">=6.4.0",
87
94
  "react": ">=16.13.1",
88
95
  "react-native": ">=0.63.3",
96
+ "react-native-create-thumbnail": ">=1.5.1",
89
97
  "react-native-document-picker": ">=8.0.0",
90
98
  "react-native-file-access": ">=2.4.3",
91
99
  "react-native-image-picker": ">=4.7.1",
92
100
  "react-native-permissions": ">=3.6.0",
93
101
  "react-native-safe-area-context": ">=3.3.2",
102
+ "react-native-video": ">=5.2.0",
94
103
  "sendbird": "^3.1.22"
95
104
  },
96
105
  "peerDependenciesMeta": {
@@ -150,5 +159,5 @@
150
159
  "readmeFile": "./README.md",
151
160
  "displayName": "@sendbird/uikit-react-native"
152
161
  },
153
- "gitHead": "257ece5f957e03ff5c08b79780b33d9d19adc5de"
162
+ "gitHead": "787ef6d52fec5d01e9b831d7a6f17e33614e2d09"
154
163
  }
@@ -23,7 +23,12 @@ import { useLocalization } from './hooks/useContext';
23
23
  import StringSetEn from './localization/StringSet.en';
24
24
  import type { StringSet } from './localization/StringSet.type';
25
25
  import SBUDynamicModule from './platform/dynamicModule';
26
- import type { ClipboardServiceInterface, FileServiceInterface, NotificationServiceInterface } from './platform/types';
26
+ import type {
27
+ ClipboardServiceInterface,
28
+ FileServiceInterface,
29
+ MediaServiceInterface,
30
+ NotificationServiceInterface,
31
+ } from './platform/types';
27
32
  import type { ErrorBoundaryProps, LocalCacheStorage } from './types';
28
33
  import VERSION from './version';
29
34
 
@@ -40,11 +45,14 @@ export type SendbirdUIKitContainerProps = React.PropsWithChildren<{
40
45
  file: FileServiceInterface;
41
46
  notification: NotificationServiceInterface;
42
47
  clipboard: ClipboardServiceInterface;
48
+ media?: MediaServiceInterface;
43
49
  };
44
50
  chatOptions?: {
45
51
  localCacheStorage?: LocalCacheStorage;
46
- enableAutoPushTokenRegistration?: boolean;
47
52
  onInitialized?: (sdkInstance: SendbirdChatSDK) => SendbirdChatSDK;
53
+ enableAutoPushTokenRegistration?: boolean;
54
+ enableChannelListTypingIndicator?: boolean;
55
+ enableChannelListMessageReceiptStatus?: boolean;
48
56
  };
49
57
  localization?: {
50
58
  stringSet?: StringSet;
@@ -53,6 +61,7 @@ export type SendbirdUIKitContainerProps = React.PropsWithChildren<{
53
61
  theme?: UIKitTheme;
54
62
  statusBarTranslucent?: boolean;
55
63
  defaultHeaderTitleAlign?: 'left' | 'center';
64
+ defaultHeaderHeight?: number;
56
65
  HeaderComponent?: HeaderStyleContextType['HeaderComponent'];
57
66
  };
58
67
  toast?: {
@@ -132,12 +141,15 @@ const SendbirdUIKitContainer = ({
132
141
  <SendbirdChatProvider
133
142
  sdkInstance={sdkInstance}
134
143
  enableAutoPushTokenRegistration={chatOptions?.enableAutoPushTokenRegistration ?? true}
144
+ enableChannelListTypingIndicator={chatOptions?.enableChannelListTypingIndicator ?? false}
145
+ enableChannelListMessageReceiptStatus={chatOptions?.enableChannelListMessageReceiptStatus ?? false}
135
146
  >
136
147
  <LocalizationProvider stringSet={localization?.stringSet ?? StringSetEn}>
137
148
  <PlatformServiceProvider
138
149
  fileService={platformServices.file}
139
150
  notificationService={platformServices.notification}
140
151
  clipboardService={platformServices.clipboard}
152
+ mediaService={platformServices.media}
141
153
  >
142
154
  <UIKitThemeProvider theme={styles?.theme ?? LightUIKitTheme}>
143
155
  <HeaderStyleProvider