@sendbird/uikit-react-native 3.3.0 → 3.4.1

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 (154) hide show
  1. package/lib/commonjs/components/ChannelInput/index.js.map +1 -1
  2. package/lib/commonjs/components/ChannelMessageList/index.js.map +1 -1
  3. package/lib/commonjs/components/FileViewer/FileViewerContent.js +140 -0
  4. package/lib/commonjs/components/FileViewer/FileViewerContent.js.map +1 -0
  5. package/lib/commonjs/components/FileViewer/FileViewerFooter.js +82 -0
  6. package/lib/commonjs/components/FileViewer/FileViewerFooter.js.map +1 -0
  7. package/lib/commonjs/components/FileViewer/FileViewerHeader.js +93 -0
  8. package/lib/commonjs/components/FileViewer/FileViewerHeader.js.map +1 -0
  9. package/lib/commonjs/components/FileViewer/index.js +133 -0
  10. package/lib/commonjs/components/FileViewer/index.js.map +1 -0
  11. package/lib/commonjs/components/ReactionAddons/BottomSheetReactionAddon.js.map +1 -1
  12. package/lib/commonjs/domain/groupChannel/component/GroupChannelMessageList.js +10 -9
  13. package/lib/commonjs/domain/groupChannel/component/GroupChannelMessageList.js.map +1 -1
  14. package/lib/commonjs/domain/groupChannel/types.js.map +1 -1
  15. package/lib/commonjs/domain/groupChannelBannedUsers/types.js.map +1 -1
  16. package/lib/commonjs/domain/groupChannelList/types.js.map +1 -1
  17. package/lib/commonjs/domain/groupChannelModeration/types.js.map +1 -1
  18. package/lib/commonjs/domain/groupChannelMutedMembers/types.js.map +1 -1
  19. package/lib/commonjs/domain/groupChannelNotifications/types.js.map +1 -1
  20. package/lib/commonjs/domain/groupChannelOperators/types.js.map +1 -1
  21. package/lib/commonjs/domain/groupChannelSettings/types.js.map +1 -1
  22. package/lib/commonjs/domain/groupChannelUserList/types.js.map +1 -1
  23. package/lib/commonjs/domain/messageSearch/component/MessageSearchHeader.js +4 -1
  24. package/lib/commonjs/domain/messageSearch/component/MessageSearchHeader.js.map +1 -1
  25. package/lib/commonjs/domain/messageSearch/types.js.map +1 -1
  26. package/lib/commonjs/domain/openChannel/types.js.map +1 -1
  27. package/lib/commonjs/domain/openChannelBannedUsers/types.js.map +1 -1
  28. package/lib/commonjs/domain/openChannelCreate/component/OpenChannelCreateProfileInput.js +4 -2
  29. package/lib/commonjs/domain/openChannelCreate/component/OpenChannelCreateProfileInput.js.map +1 -1
  30. package/lib/commonjs/domain/openChannelCreate/types.js.map +1 -1
  31. package/lib/commonjs/domain/openChannelList/types.js.map +1 -1
  32. package/lib/commonjs/domain/openChannelModeration/types.js.map +1 -1
  33. package/lib/commonjs/domain/openChannelMutedParticipants/types.js.map +1 -1
  34. package/lib/commonjs/domain/openChannelOperators/types.js.map +1 -1
  35. package/lib/commonjs/domain/openChannelSettings/types.js.map +1 -1
  36. package/lib/commonjs/domain/openChannelUserList/types.js.map +1 -1
  37. package/lib/commonjs/fragments/createGroupChannelFragment.js +32 -16
  38. package/lib/commonjs/fragments/createGroupChannelFragment.js.map +1 -1
  39. package/lib/commonjs/fragments/createGroupChannelListFragment.js +25 -11
  40. package/lib/commonjs/fragments/createGroupChannelListFragment.js.map +1 -1
  41. package/lib/commonjs/types.js.map +1 -1
  42. package/lib/commonjs/version.js +1 -1
  43. package/lib/commonjs/version.js.map +1 -1
  44. package/lib/module/components/ChannelInput/index.js.map +1 -1
  45. package/lib/module/components/ChannelMessageList/index.js.map +1 -1
  46. package/lib/module/components/FileViewer/FileViewerContent.js +130 -0
  47. package/lib/module/components/FileViewer/FileViewerContent.js.map +1 -0
  48. package/lib/module/components/FileViewer/FileViewerFooter.js +74 -0
  49. package/lib/module/components/FileViewer/FileViewerFooter.js.map +1 -0
  50. package/lib/module/components/FileViewer/FileViewerHeader.js +85 -0
  51. package/lib/module/components/FileViewer/FileViewerHeader.js.map +1 -0
  52. package/lib/module/components/FileViewer/index.js +123 -0
  53. package/lib/module/components/FileViewer/index.js.map +1 -0
  54. package/lib/module/components/ReactionAddons/BottomSheetReactionAddon.js.map +1 -1
  55. package/lib/module/domain/groupChannel/component/GroupChannelMessageList.js +10 -9
  56. package/lib/module/domain/groupChannel/component/GroupChannelMessageList.js.map +1 -1
  57. package/lib/module/domain/groupChannel/types.js.map +1 -1
  58. package/lib/module/domain/groupChannelBannedUsers/types.js.map +1 -1
  59. package/lib/module/domain/groupChannelList/types.js.map +1 -1
  60. package/lib/module/domain/groupChannelModeration/types.js.map +1 -1
  61. package/lib/module/domain/groupChannelMutedMembers/types.js.map +1 -1
  62. package/lib/module/domain/groupChannelNotifications/types.js.map +1 -1
  63. package/lib/module/domain/groupChannelOperators/types.js.map +1 -1
  64. package/lib/module/domain/groupChannelSettings/types.js.map +1 -1
  65. package/lib/module/domain/groupChannelUserList/types.js.map +1 -1
  66. package/lib/module/domain/messageSearch/component/MessageSearchHeader.js +4 -1
  67. package/lib/module/domain/messageSearch/component/MessageSearchHeader.js.map +1 -1
  68. package/lib/module/domain/messageSearch/types.js.map +1 -1
  69. package/lib/module/domain/openChannel/types.js.map +1 -1
  70. package/lib/module/domain/openChannelBannedUsers/types.js.map +1 -1
  71. package/lib/module/domain/openChannelCreate/component/OpenChannelCreateProfileInput.js +4 -2
  72. package/lib/module/domain/openChannelCreate/component/OpenChannelCreateProfileInput.js.map +1 -1
  73. package/lib/module/domain/openChannelCreate/types.js.map +1 -1
  74. package/lib/module/domain/openChannelList/types.js.map +1 -1
  75. package/lib/module/domain/openChannelModeration/types.js.map +1 -1
  76. package/lib/module/domain/openChannelMutedParticipants/types.js.map +1 -1
  77. package/lib/module/domain/openChannelOperators/types.js.map +1 -1
  78. package/lib/module/domain/openChannelSettings/types.js.map +1 -1
  79. package/lib/module/domain/openChannelUserList/types.js.map +1 -1
  80. package/lib/module/fragments/createGroupChannelFragment.js +33 -17
  81. package/lib/module/fragments/createGroupChannelFragment.js.map +1 -1
  82. package/lib/module/fragments/createGroupChannelListFragment.js +26 -12
  83. package/lib/module/fragments/createGroupChannelListFragment.js.map +1 -1
  84. package/lib/module/types.js.map +1 -1
  85. package/lib/module/version.js +1 -1
  86. package/lib/module/version.js.map +1 -1
  87. package/lib/typescript/src/components/ChannelInput/index.d.ts +2 -2
  88. package/lib/typescript/src/components/ChannelMessageList/index.d.ts +5 -6
  89. package/lib/typescript/src/components/FileViewer/FileViewerContent.d.ts +13 -0
  90. package/lib/typescript/src/components/FileViewer/FileViewerFooter.d.ts +9 -0
  91. package/lib/typescript/src/components/FileViewer/FileViewerHeader.d.ts +10 -0
  92. package/lib/typescript/src/components/{FileViewer.d.ts → FileViewer/index.d.ts} +5 -1
  93. package/lib/typescript/src/containers/SendbirdUIKitContainer.d.ts +1 -1
  94. package/lib/typescript/src/domain/groupChannel/component/GroupChannelMessageList.d.ts +2 -2
  95. package/lib/typescript/src/domain/groupChannel/types.d.ts +15 -4
  96. package/lib/typescript/src/domain/groupChannelBannedUsers/types.d.ts +1 -1
  97. package/lib/typescript/src/domain/groupChannelList/types.d.ts +13 -2
  98. package/lib/typescript/src/domain/groupChannelModeration/types.d.ts +1 -1
  99. package/lib/typescript/src/domain/groupChannelMutedMembers/types.d.ts +1 -1
  100. package/lib/typescript/src/domain/groupChannelNotifications/types.d.ts +1 -1
  101. package/lib/typescript/src/domain/groupChannelOperators/types.d.ts +1 -1
  102. package/lib/typescript/src/domain/groupChannelSettings/types.d.ts +1 -1
  103. package/lib/typescript/src/domain/groupChannelUserList/types.d.ts +3 -2
  104. package/lib/typescript/src/domain/messageSearch/types.d.ts +1 -1
  105. package/lib/typescript/src/domain/openChannel/types.d.ts +1 -1
  106. package/lib/typescript/src/domain/openChannelBannedUsers/types.d.ts +1 -1
  107. package/lib/typescript/src/domain/openChannelCreate/types.d.ts +1 -1
  108. package/lib/typescript/src/domain/openChannelList/types.d.ts +1 -1
  109. package/lib/typescript/src/domain/openChannelModeration/types.d.ts +1 -1
  110. package/lib/typescript/src/domain/openChannelMutedParticipants/types.d.ts +1 -1
  111. package/lib/typescript/src/domain/openChannelOperators/types.d.ts +1 -1
  112. package/lib/typescript/src/domain/openChannelSettings/types.d.ts +1 -1
  113. package/lib/typescript/src/domain/openChannelUserList/types.d.ts +3 -3
  114. package/lib/typescript/src/types.d.ts +4 -4
  115. package/lib/typescript/src/version.d.ts +1 -1
  116. package/package.json +8 -7
  117. package/src/components/ChannelInput/index.tsx +2 -2
  118. package/src/components/ChannelMessageList/index.tsx +5 -11
  119. package/src/components/FileViewer/FileViewerContent.tsx +141 -0
  120. package/src/components/FileViewer/FileViewerFooter.tsx +73 -0
  121. package/src/components/FileViewer/FileViewerHeader.tsx +86 -0
  122. package/src/components/FileViewer/index.tsx +139 -0
  123. package/src/components/ReactionAddons/BottomSheetReactionAddon.tsx +3 -2
  124. package/src/domain/groupChannel/component/GroupChannelMessageList.tsx +7 -6
  125. package/src/domain/groupChannel/types.ts +16 -4
  126. package/src/domain/groupChannelBannedUsers/types.ts +1 -1
  127. package/src/domain/groupChannelList/types.ts +13 -2
  128. package/src/domain/groupChannelModeration/types.ts +1 -1
  129. package/src/domain/groupChannelMutedMembers/types.ts +1 -1
  130. package/src/domain/groupChannelNotifications/types.ts +1 -1
  131. package/src/domain/groupChannelOperators/types.ts +1 -1
  132. package/src/domain/groupChannelSettings/types.ts +1 -1
  133. package/src/domain/groupChannelUserList/types.ts +2 -2
  134. package/src/domain/messageSearch/component/MessageSearchHeader.tsx +4 -1
  135. package/src/domain/messageSearch/types.ts +1 -1
  136. package/src/domain/openChannel/types.ts +1 -1
  137. package/src/domain/openChannelBannedUsers/types.ts +1 -1
  138. package/src/domain/openChannelCreate/component/OpenChannelCreateProfileInput.tsx +4 -2
  139. package/src/domain/openChannelCreate/types.ts +1 -1
  140. package/src/domain/openChannelList/types.ts +1 -1
  141. package/src/domain/openChannelModeration/types.ts +1 -1
  142. package/src/domain/openChannelMutedParticipants/types.ts +1 -1
  143. package/src/domain/openChannelOperators/types.ts +1 -1
  144. package/src/domain/openChannelSettings/types.ts +1 -1
  145. package/src/domain/openChannelUserList/types.ts +4 -3
  146. package/src/fragments/createGroupChannelFragment.tsx +35 -17
  147. package/src/fragments/createGroupChannelListFragment.tsx +27 -9
  148. package/src/types.ts +2 -2
  149. package/src/version.ts +1 -1
  150. package/lib/commonjs/components/FileViewer.js +0 -300
  151. package/lib/commonjs/components/FileViewer.js.map +0 -1
  152. package/lib/module/components/FileViewer.js +0 -291
  153. package/lib/module/components/FileViewer.js.map +0 -1
  154. package/src/components/FileViewer.tsx +0 -288
@@ -0,0 +1,86 @@
1
+ import React from 'react';
2
+ import { useSafeAreaInsets } from 'react-native-safe-area-context';
3
+
4
+ import {
5
+ Box,
6
+ Icon,
7
+ PressBox,
8
+ Text,
9
+ createStyleSheet,
10
+ useHeaderStyle,
11
+ useUIKitTheme,
12
+ } from '@sendbird/uikit-react-native-foundation';
13
+ import { truncate } from '@sendbird/uikit-utils';
14
+
15
+ type Props = {
16
+ headerShown?: boolean;
17
+ topInset: number;
18
+ onClose: () => void;
19
+ title: string;
20
+ subtitle: string;
21
+ };
22
+
23
+ const FileViewerHeader = ({ headerShown = true, topInset, onClose, subtitle, title }: Props) => {
24
+ const { palette } = useUIKitTheme();
25
+ const { defaultHeight } = useHeaderStyle();
26
+ const { left, right } = useSafeAreaInsets();
27
+
28
+ if (!headerShown) return null;
29
+
30
+ return (
31
+ <Box
32
+ style={[
33
+ styles.container,
34
+ {
35
+ paddingLeft: styles.container.paddingHorizontal + left,
36
+ paddingRight: styles.container.paddingHorizontal + right,
37
+ paddingTop: topInset,
38
+ height: defaultHeight + topInset,
39
+ backgroundColor: palette.overlay01,
40
+ },
41
+ ]}
42
+ >
43
+ <PressBox activeOpacity={0.75} onPress={onClose} style={styles.buttonContainer}>
44
+ <Icon icon={'close'} size={24} color={palette.onBackgroundDark01} />
45
+ </PressBox>
46
+ <Box style={styles.titleContainer}>
47
+ <Text h2 color={palette.onBackgroundDark01} style={styles.title} numberOfLines={1}>
48
+ {truncate(title, { mode: 'mid', maxLen: 18 })}
49
+ </Text>
50
+ <Text caption2 color={palette.onBackgroundDark01} numberOfLines={1}>
51
+ {subtitle}
52
+ </Text>
53
+ </Box>
54
+ <Box style={styles.buttonContainer} />
55
+ </Box>
56
+ );
57
+ };
58
+
59
+ const styles = createStyleSheet({
60
+ container: {
61
+ top: 0,
62
+ left: 0,
63
+ right: 0,
64
+ position: 'absolute',
65
+ flexDirection: 'row',
66
+ alignItems: 'center',
67
+ justifyContent: 'center',
68
+ paddingHorizontal: 12,
69
+ },
70
+ buttonContainer: {
71
+ width: 32,
72
+ height: 32,
73
+ alignItems: 'center',
74
+ justifyContent: 'center',
75
+ },
76
+ titleContainer: {
77
+ flex: 1,
78
+ alignItems: 'center',
79
+ justifyContent: 'center',
80
+ },
81
+ title: {
82
+ marginBottom: 2,
83
+ },
84
+ });
85
+
86
+ export default FileViewerHeader;
@@ -0,0 +1,139 @@
1
+ import React, { useEffect } from 'react';
2
+ import { StatusBar } from 'react-native';
3
+ import { useSafeAreaInsets } from 'react-native-safe-area-context';
4
+
5
+ import { Box, useAlert, useHeaderStyle, useToast, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';
6
+ import type { SendbirdFileMessage } from '@sendbird/uikit-utils';
7
+ import { Logger, getFileExtension, getFileType, isMyMessage, toMegabyte } from '@sendbird/uikit-utils';
8
+
9
+ import { useLocalization, usePlatformService, useSendbirdChat } from '../../hooks/useContext';
10
+ import FileViewerContent from './FileViewerContent';
11
+ import FileViewerFooter from './FileViewerFooter';
12
+ import FileViewerHeader from './FileViewerHeader';
13
+
14
+ type Props = {
15
+ fileMessage: SendbirdFileMessage;
16
+ deleteMessage: () => Promise<void>;
17
+
18
+ onClose: () => void;
19
+ onPressDownload?: (message: SendbirdFileMessage) => void;
20
+ onPressDelete?: (message: SendbirdFileMessage) => void;
21
+
22
+ headerShown?: boolean;
23
+ headerTopInset?: number;
24
+
25
+ /** This prop is only available on the Image viewer */
26
+ minZoom?: number;
27
+ /** This prop is only available on the Image viewer */
28
+ maxZoom?: number;
29
+ };
30
+
31
+ const FileViewer = ({
32
+ headerShown = true,
33
+ maxZoom = 3,
34
+ minZoom = 1,
35
+ headerTopInset,
36
+ fileMessage,
37
+ onClose,
38
+ onPressDownload,
39
+ onPressDelete,
40
+ deleteMessage,
41
+ }: Props) => {
42
+ const { topInset, statusBarTranslucent } = useHeaderStyle();
43
+ const { bottom } = useSafeAreaInsets();
44
+ const { palette } = useUIKitTheme();
45
+ const { alert } = useAlert();
46
+ const { show } = useToast();
47
+
48
+ const { fileService } = usePlatformService();
49
+ const { currentUser } = useSendbirdChat();
50
+ const { STRINGS } = useLocalization();
51
+
52
+ const fileType = getFileType(fileMessage.type || getFileExtension(fileMessage.url));
53
+ const canDelete = isMyMessage(fileMessage, currentUser?.userId);
54
+ const basicTopInset = statusBarTranslucent ? topInset : 0;
55
+
56
+ const onPressDeleteButton = () => {
57
+ if (!canDelete) return;
58
+
59
+ if (onPressDelete) {
60
+ onPressDelete(fileMessage);
61
+ } else {
62
+ alert({
63
+ title: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_TITLE,
64
+ buttons: [
65
+ {
66
+ text: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_CANCEL,
67
+ },
68
+ {
69
+ text: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_OK,
70
+ style: 'destructive',
71
+ onPress: () => {
72
+ deleteMessage()
73
+ .then(() => {
74
+ onClose();
75
+ })
76
+ .catch(() => {
77
+ show(STRINGS.TOAST.DELETE_MSG_ERROR, 'error');
78
+ });
79
+ },
80
+ },
81
+ ],
82
+ });
83
+ }
84
+ };
85
+
86
+ const onPressDownloadButton = () => {
87
+ if (onPressDownload) {
88
+ onPressDownload(fileMessage);
89
+ } else {
90
+ if (toMegabyte(fileMessage.size) > 4) {
91
+ show(STRINGS.TOAST.DOWNLOAD_START, 'success');
92
+ }
93
+
94
+ fileService
95
+ .save({ fileUrl: fileMessage.url, fileName: fileMessage.name, fileType: fileMessage.type })
96
+ .then((response) => {
97
+ show(STRINGS.TOAST.DOWNLOAD_OK, 'success');
98
+ Logger.log('File saved to', response);
99
+ })
100
+ .catch((err) => {
101
+ show(STRINGS.TOAST.DOWNLOAD_ERROR, 'error');
102
+ Logger.log('File save failure', err);
103
+ });
104
+ }
105
+ };
106
+
107
+ useEffect(() => {
108
+ if (fileType === 'file') onClose();
109
+ }, []);
110
+
111
+ return (
112
+ <Box flex={1} backgroundColor={palette.background700}>
113
+ <StatusBar barStyle={'light-content'} animated />
114
+ <FileViewerHeader
115
+ topInset={headerTopInset ?? basicTopInset}
116
+ headerShown={headerShown}
117
+ title={STRINGS.FILE_VIEWER.TITLE(fileMessage)}
118
+ subtitle={STRINGS.FILE_VIEWER.SUBTITLE(fileMessage)}
119
+ onClose={onClose}
120
+ />
121
+ <FileViewerContent
122
+ topInset={headerTopInset ?? basicTopInset}
123
+ bottomInset={bottom}
124
+ type={fileType}
125
+ src={fileMessage.url}
126
+ maxZoom={maxZoom}
127
+ minZoom={minZoom}
128
+ />
129
+ <FileViewerFooter
130
+ bottomInset={bottom}
131
+ deleteShown={canDelete}
132
+ onPressDelete={onPressDeleteButton}
133
+ onPressDownload={onPressDownloadButton}
134
+ />
135
+ </Box>
136
+ );
137
+ };
138
+
139
+ export default FileViewer;
@@ -2,6 +2,7 @@ import React from 'react';
2
2
  import { Pressable, View } from 'react-native';
3
3
  import { useSafeAreaInsets } from 'react-native-safe-area-context';
4
4
 
5
+ import type { BaseMessage } from '@sendbird/chat/message';
5
6
  import { useChannelHandler } from '@sendbird/uikit-chat-hooks';
6
7
  import { Icon, Image, createStyleSheet, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';
7
8
  import { SendbirdBaseChannel, SendbirdBaseMessage, useUniqHandlerId } from '@sendbird/uikit-utils';
@@ -24,12 +25,12 @@ const BottomSheetReactionAddon = ({ onClose, message, channel }: Props) => {
24
25
  useChannelHandler(sdk, handlerId, {
25
26
  async onReactionUpdated(eventChannel, event) {
26
27
  if (channel?.url === eventChannel.url && event.messageId === message?.messageId) {
27
- const msg = await sdk.message.getMessage({
28
+ const msg = (await sdk.message.getMessage({
28
29
  includeReactions: true,
29
30
  messageId: message.messageId,
30
31
  channelUrl: message.channelUrl,
31
32
  channelType: message.channelType,
32
- });
33
+ })) as null | BaseMessage;
33
34
  if (msg) updateReactionFocusedItem({ message: msg });
34
35
  }
35
36
  },
@@ -34,7 +34,9 @@ const GroupChannelMessageList = (props: GroupChannelProps['MessageList']) => {
34
34
  lazyScrollToIndex({ index: foundMessageIndex, animated: true, timeout });
35
35
  } else {
36
36
  if (props.channel.messageOffsetTimestamp <= createdAt) {
37
- if (focusAnimated) props.onUpdateSearchItem({ startingPoint: createdAt });
37
+ if (focusAnimated) {
38
+ props.onUpdateSearchItem({ startingPoint: createdAt });
39
+ }
38
40
  props.onResetMessageListWithStartingPoint(createdAt);
39
41
  } else {
40
42
  return false;
@@ -44,15 +46,14 @@ const GroupChannelMessageList = (props: GroupChannelProps['MessageList']) => {
44
46
  },
45
47
  );
46
48
 
47
- const scrollToBottom = useFreshCallback((animated = false) => {
49
+ const scrollToBottom = useFreshCallback(async (animated = false) => {
48
50
  if (props.hasNext()) {
49
51
  props.onUpdateSearchItem(undefined);
50
52
  props.onScrolledAwayFromBottom(false);
51
53
 
52
- props.onResetMessageList(() => {
53
- props.onScrolledAwayFromBottom(false);
54
- lazyScrollToBottom({ animated });
55
- });
54
+ await props.onResetMessageList();
55
+ props.onScrolledAwayFromBottom(false);
56
+ lazyScrollToBottom({ animated });
56
57
  } else {
57
58
  lazyScrollToBottom({ animated });
58
59
  }
@@ -1,6 +1,7 @@
1
1
  import type React from 'react';
2
2
  import type { FlatList } from 'react-native';
3
3
 
4
+ import type { MessageCollectionParams, MessageFilterParams } from '@sendbird/chat/groupChannel';
4
5
  import type { UseGroupChannelMessagesOptions } from '@sendbird/uikit-chat-hooks';
5
6
  import type {
6
7
  OnBeforeHandler,
@@ -20,6 +21,7 @@ import type { ChannelMessageListProps } from '../../components/ChannelMessageLis
20
21
  import type { CommonComponent } from '../../types';
21
22
  import type { PubSub } from '../../utils/pubsub';
22
23
 
24
+ export type MessageListQueryParamsType = Omit<MessageCollectionParams, 'filter'> & MessageFilterParams;
23
25
  export interface GroupChannelProps {
24
26
  Fragment: {
25
27
  channel: SendbirdGroupChannel;
@@ -43,9 +45,19 @@ export interface GroupChannelProps {
43
45
  keyboardAvoidOffset?: GroupChannelProps['Provider']['keyboardAvoidOffset'];
44
46
  flatListProps?: GroupChannelProps['MessageList']['flatListProps'];
45
47
  sortComparator?: UseGroupChannelMessagesOptions['sortComparator'];
46
- collectionCreator?: UseGroupChannelMessagesOptions['collectionCreator'];
47
48
 
48
49
  searchItem?: GroupChannelProps['MessageList']['searchItem'];
50
+
51
+ /**
52
+ * @description You can specify the query parameters for the message list.
53
+ * @example
54
+ * ```
55
+ * <GroupChannelFragment messageListQueryParams={{ prevResultLimit: 20, customTypesFilter: ['filter'] }} />
56
+ * ```
57
+ * */
58
+ messageListQueryParams?: MessageListQueryParamsType;
59
+ /** @deprecated Please use `messageListQueryParams` instead */
60
+ collectionCreator?: UseGroupChannelMessagesOptions['collectionCreator'];
49
61
  };
50
62
  Header: {
51
63
  shouldHideRight: () => boolean;
@@ -73,8 +85,8 @@ export interface GroupChannelProps {
73
85
  | 'hasNext'
74
86
  | 'searchItem'
75
87
  > & {
76
- onResetMessageList: (callback?: () => void) => void;
77
- onResetMessageListWithStartingPoint: (startingPoint: number, callback?: () => void) => void;
88
+ onResetMessageList: () => Promise<void>;
89
+ onResetMessageListWithStartingPoint: (startingPoint: number) => Promise<void>;
78
90
 
79
91
  // Changing the search item will trigger the focus animation on messages.
80
92
  onUpdateSearchItem: (searchItem?: GroupChannelProps['MessageList']['searchItem']) => void;
@@ -169,7 +181,7 @@ export interface GroupChannelModule {
169
181
  StatusLoading: CommonComponent;
170
182
  }
171
183
 
172
- export type GroupChannelFragment = CommonComponent<GroupChannelProps['Fragment']>;
184
+ export type GroupChannelFragment = React.FC<GroupChannelProps['Fragment']>;
173
185
 
174
186
  export type GroupChannelPubSubContextPayload =
175
187
  | {
@@ -49,4 +49,4 @@ export interface GroupChannelBannedUsersModule {
49
49
  StatusError: CommonComponent<GroupChannelBannedUsersProps['StatusError']>;
50
50
  }
51
51
 
52
- export type GroupChannelBannedUsersFragment = CommonComponent<GroupChannelBannedUsersProps['Fragment']>;
52
+ export type GroupChannelBannedUsersFragment = React.FC<GroupChannelBannedUsersProps['Fragment']>;
@@ -1,21 +1,32 @@
1
1
  import type React from 'react';
2
2
  import type { FlatListProps } from 'react-native';
3
3
 
4
+ import type { GroupChannelCollectionParams, GroupChannelFilterParams } from '@sendbird/chat/groupChannel';
4
5
  import type { UseGroupChannelListOptions } from '@sendbird/uikit-chat-hooks';
5
6
  import type { ActionMenuItem } from '@sendbird/uikit-react-native-foundation';
6
7
  import type { SendbirdGroupChannel } from '@sendbird/uikit-utils';
7
8
 
8
9
  import type { CommonComponent } from '../../types';
9
10
 
11
+ export type ChannelListQueryParamsType = Omit<GroupChannelCollectionParams, 'filter'> & GroupChannelFilterParams;
10
12
  export interface GroupChannelListProps {
11
13
  Fragment: {
12
14
  onPressChannel: GroupChannelListProps['List']['onPressChannel'];
13
15
  onPressCreateChannel: (channelType: GroupChannelType) => void;
14
16
  renderGroupChannelPreview?: GroupChannelListProps['List']['renderGroupChannelPreview'];
15
17
  skipTypeSelection?: boolean;
16
- collectionCreator?: UseGroupChannelListOptions['collectionCreator'];
17
18
  flatListProps?: GroupChannelListProps['List']['flatListProps'];
18
19
  menuItemCreator?: GroupChannelListProps['List']['menuItemCreator'];
20
+ /**
21
+ * @description You can specify the query parameters for the channel list.
22
+ * @example
23
+ * ```
24
+ * <GroupChannelListFragment channelListQueryParams={{ limit: 20, includeEmpty: false }} />
25
+ * ```
26
+ * */
27
+ channelListQueryParams?: ChannelListQueryParamsType;
28
+ /** @deprecated Please use `channelListQueryParams` instead */
29
+ collectionCreator?: UseGroupChannelListOptions['collectionCreator'];
19
30
  };
20
31
  Header: {};
21
32
  List: {
@@ -61,5 +72,5 @@ export interface GroupChannelListModule {
61
72
  StatusLoading: CommonComponent;
62
73
  }
63
74
 
64
- export type GroupChannelListFragment = CommonComponent<GroupChannelListProps['Fragment']>;
75
+ export type GroupChannelListFragment = React.FC<GroupChannelListProps['Fragment']>;
65
76
  export type GroupChannelType = 'GROUP' | 'SUPER_GROUP' | 'BROADCAST';
@@ -45,4 +45,4 @@ export interface GroupChannelModerationModule {
45
45
  Menu: CommonComponent<GroupChannelModerationProps['Menu']>;
46
46
  }
47
47
 
48
- export type GroupChannelModerationFragment = CommonComponent<GroupChannelModerationProps['Fragment']>;
48
+ export type GroupChannelModerationFragment = React.FC<GroupChannelModerationProps['Fragment']>;
@@ -49,4 +49,4 @@ export interface GroupChannelMutedMembersModule {
49
49
  StatusError: CommonComponent<GroupChannelMutedMembersProps['StatusError']>;
50
50
  }
51
51
 
52
- export type GroupChannelMutedMembersFragment = CommonComponent<GroupChannelMutedMembersProps['Fragment']>;
52
+ export type GroupChannelMutedMembersFragment = React.FC<GroupChannelMutedMembersProps['Fragment']>;
@@ -35,4 +35,4 @@ export interface GroupChannelNotificationsModule {
35
35
  View: CommonComponent<GroupChannelNotificationsProps['View']>;
36
36
  }
37
37
 
38
- export type GroupChannelNotificationsFragment = CommonComponent<GroupChannelNotificationsProps['Fragment']>;
38
+ export type GroupChannelNotificationsFragment = React.FC<GroupChannelNotificationsProps['Fragment']>;
@@ -51,4 +51,4 @@ export interface GroupChannelOperatorsModule {
51
51
  StatusError: CommonComponent<GroupChannelOperatorsProps['StatusError']>;
52
52
  }
53
53
 
54
- export type GroupChannelOperatorsFragment = CommonComponent<GroupChannelOperatorsProps['Fragment']>;
54
+ export type GroupChannelOperatorsFragment = React.FC<GroupChannelOperatorsProps['Fragment']>;
@@ -53,4 +53,4 @@ export interface GroupChannelSettingsModule {
53
53
  Menu: CommonComponent<GroupChannelSettingsProps['Menu']>;
54
54
  }
55
55
 
56
- export type GroupChannelSettingsFragment = CommonComponent<GroupChannelSettingsProps['Fragment']>;
56
+ export type GroupChannelSettingsFragment = React.FC<GroupChannelSettingsProps['Fragment']>;
@@ -52,7 +52,7 @@ export interface GroupChannelMembersProps {
52
52
  queryCreator?: UseUserListOptions<SendbirdMember>['queryCreator'];
53
53
  };
54
54
  }
55
- export type GroupChannelMembersFragment = CommonComponent<GroupChannelMembersProps['Fragment']>;
55
+ export type GroupChannelMembersFragment = React.FC<GroupChannelMembersProps['Fragment']>;
56
56
 
57
57
  export interface GroupChannelRegisterOperatorProps {
58
58
  Fragment: {
@@ -64,4 +64,4 @@ export interface GroupChannelRegisterOperatorProps {
64
64
  queryCreator?: UseUserListOptions<SendbirdMember>['queryCreator'];
65
65
  };
66
66
  }
67
- export type GroupChannelRegisterOperatorFragment = CommonComponent<GroupChannelRegisterOperatorProps['Fragment']>;
67
+ export type GroupChannelRegisterOperatorFragment = React.FC<GroupChannelRegisterOperatorProps['Fragment']>;
@@ -91,7 +91,10 @@ const styles = createStyleSheet({
91
91
  flex: 1,
92
92
  height: '100%',
93
93
  fontSize: 14,
94
- padding: 0,
94
+ paddingLeft: 0,
95
+ paddingTop: 0,
96
+ paddingBottom: 0,
97
+ paddingRight: 0,
95
98
  },
96
99
  });
97
100
 
@@ -52,4 +52,4 @@ export interface MessageSearchModule {
52
52
  StatusError: CommonComponent<MessageSearchProps['StatusError']>;
53
53
  }
54
54
 
55
- export type MessageSearchFragment = CommonComponent<MessageSearchProps['Fragment']>;
55
+ export type MessageSearchFragment = React.FC<MessageSearchProps['Fragment']>;
@@ -111,7 +111,7 @@ export interface OpenChannelModule {
111
111
  StatusLoading: CommonComponent;
112
112
  }
113
113
 
114
- export type OpenChannelFragment = CommonComponent<OpenChannelProps['Fragment']>;
114
+ export type OpenChannelFragment = React.FC<OpenChannelProps['Fragment']>;
115
115
 
116
116
  export type OpenChannelPubSubContextPayload =
117
117
  | {
@@ -49,4 +49,4 @@ export interface OpenChannelBannedUsersModule {
49
49
  StatusError: CommonComponent<OpenChannelBannedUsersProps['StatusError']>;
50
50
  }
51
51
 
52
- export type OpenChannelBannedUsersFragment = CommonComponent<OpenChannelBannedUsersProps['Fragment']>;
52
+ export type OpenChannelBannedUsersFragment = React.FC<OpenChannelBannedUsersProps['Fragment']>;
@@ -142,8 +142,10 @@ const styles = createStyleSheet({
142
142
  },
143
143
  input: {
144
144
  flex: 1,
145
- paddingVertical: 0,
146
- paddingHorizontal: 0,
145
+ paddingLeft: 0,
146
+ paddingRight: 0,
147
+ paddingTop: 0,
148
+ paddingBottom: 0,
147
149
  },
148
150
  removeButtonContainer: {
149
151
  alignItems: 'flex-end',
@@ -42,4 +42,4 @@ export interface OpenChannelCreateModule {
42
42
  StatusLoading: CommonComponent;
43
43
  }
44
44
 
45
- export type OpenChannelCreateFragment = CommonComponent<OpenChannelCreateProps['Fragment']>;
45
+ export type OpenChannelCreateFragment = React.FC<OpenChannelCreateProps['Fragment']>;
@@ -53,4 +53,4 @@ export interface OpenChannelListModule {
53
53
  StatusError: CommonComponent<OpenChannelListProps['StatusError']>;
54
54
  }
55
55
 
56
- export type OpenChannelListFragment = CommonComponent<OpenChannelListProps['Fragment']>;
56
+ export type OpenChannelListFragment = React.FC<OpenChannelListProps['Fragment']>;
@@ -45,4 +45,4 @@ export interface OpenChannelModerationModule {
45
45
  Menu: CommonComponent<OpenChannelModerationProps['Menu']>;
46
46
  }
47
47
 
48
- export type OpenChannelModerationFragment = CommonComponent<OpenChannelModerationProps['Fragment']>;
48
+ export type OpenChannelModerationFragment = React.FC<OpenChannelModerationProps['Fragment']>;
@@ -49,4 +49,4 @@ export interface OpenChannelMutedParticipantsModule {
49
49
  StatusError: CommonComponent<OpenChannelMutedParticipantsProps['StatusError']>;
50
50
  }
51
51
 
52
- export type OpenChannelMutedParticipantsFragment = CommonComponent<OpenChannelMutedParticipantsProps['Fragment']>;
52
+ export type OpenChannelMutedParticipantsFragment = React.FC<OpenChannelMutedParticipantsProps['Fragment']>;
@@ -51,4 +51,4 @@ export interface OpenChannelOperatorsModule {
51
51
  StatusError: CommonComponent<OpenChannelOperatorsProps['StatusError']>;
52
52
  }
53
53
 
54
- export type OpenChannelOperatorsFragment = CommonComponent<OpenChannelOperatorsProps['Fragment']>;
54
+ export type OpenChannelOperatorsFragment = React.FC<OpenChannelOperatorsProps['Fragment']>;
@@ -51,4 +51,4 @@ export interface OpenChannelSettingsModule {
51
51
  Menu: CommonComponent<OpenChannelSettingsProps['Menu']>;
52
52
  }
53
53
 
54
- export type OpenChannelSettingsFragment = CommonComponent<OpenChannelSettingsProps['Fragment']>;
54
+ export type OpenChannelSettingsFragment = React.FC<OpenChannelSettingsProps['Fragment']>;
@@ -1,7 +1,8 @@
1
+ import type React from 'react';
2
+
1
3
  import type { UseUserListOptions } from '@sendbird/uikit-chat-hooks';
2
4
  import type { SendbirdOpenChannel, SendbirdParticipant, SendbirdUser } from '@sendbird/uikit-utils';
3
5
 
4
- import type { CommonComponent } from '../../types';
5
6
  import type { UserListProps } from '../userList/types';
6
7
 
7
8
  export interface OpenChannelParticipantsProps {
@@ -14,7 +15,7 @@ export interface OpenChannelParticipantsProps {
14
15
  sortComparator?: UseUserListOptions<SendbirdUser | SendbirdParticipant>['sortComparator'];
15
16
  };
16
17
  }
17
- export type OpenChannelParticipantsFragment = CommonComponent<OpenChannelParticipantsProps['Fragment']>;
18
+ export type OpenChannelParticipantsFragment = React.FC<OpenChannelParticipantsProps['Fragment']>;
18
19
 
19
20
  export interface OpenChannelRegisterOperatorProps {
20
21
  Fragment: {
@@ -27,4 +28,4 @@ export interface OpenChannelRegisterOperatorProps {
27
28
  sortComparator?: UseUserListOptions<SendbirdUser | SendbirdParticipant>['sortComparator'];
28
29
  };
29
30
  }
30
- export type OpenChannelRegisterOperatorFragment = CommonComponent<OpenChannelRegisterOperatorProps['Fragment']>;
31
+ export type OpenChannelRegisterOperatorFragment = React.FC<OpenChannelRegisterOperatorProps['Fragment']>;